Утилита позволяет перенести структуру папок и файлы, находящиеся в системе G-Station, в Vitro MP.
Дополнительно есть возможность переноса замечаний и согласований.
Для работы утилиты нужны решения Migration, которые надо разместить в Solutions на сервере Vitro MP:
Сами решения Migration берутся из дистрибутива версии сервера Vitro-CAD
Если не указать параметр Mode, то будут запущены все режимы последовательно.
Данные из G-Station извлекаются с помощью API. В системе G-Station должен быть технический пользователь, у которого есть доступ на чтение ко всем переносимым проектам.
Вся информация о миграции записывается в таблицу БД migration_gstation. В качестве БД предполагается использовать PostgreSQL. Может быть расположено в той же схеме, что и Vitro MP.
Структура таблицы
| Название колонки | Тип данных | Описание |
|---|---|---|
| api_url | TEXT | Содержит api префикс для получения элемента. G-Station может быть разбит на несколько серверов с разными адресами |
| project_urn | TEXT | Urn проекта переносимой сущности |
| urn | TEXT | Urn сущности |
| name | TEXT | Название |
| id | BIGINT | Численный идентификатор в системе G-Station |
| parent | BIGINT | Идентификатор родителя в системе G-Station |
| type | INT | Тип сущности. 0 – файл, 1 – папка, 2 - проект, 3 - замечание, 4 - согласование |
| size | BIGINT | Размер в байтах. Актуален только для файлов. |
| item_id | UUID | Guid в системе Vitro MP. Формируется во время режима Init. |
| version | INT | Версия элемента в G-Station |
| create_start | TIMESTAMP | Дата начала обработки файла/папки |
| create_end | TIMESTAMP | Дата окончания обработки файла/папки |
| issue_start | TIMESTAMP | Дата начала обработки замечания |
| issue_end | TIMESTAMP | Дата окончания обработки замечания |
| issue_attachment_start | TIMESTAMP | Дата начала переноса вложений замечания |
| issue_attachment_end | TIMESTAMP | Дата окончания переноса вложений замечания |
| approving_start | TIMESTAMP | Дата начала обработки согласования |
| approving_end | TIMESTAMP | Дата окончания обработки согласования |
| error | TEXT | Текст ошибки при переносе элемента |
Записи, которые поступили в обработку имеют заполненное поле *_start для своего режима (например create_start).
При успешной обработке будет заполнено поле *_end (например поле create_end). Если произошла ошибка, то будет заполнен столбец error.
Уникальный идентификатор для таблицы - составной ключ: api_url, project_urn, urn, так как в системе G-Station нет Guid и уникального идентификатора в рамках всех проектов.
Основной параметр является LibraryMap, который определяет, какая папка G-Station в какую папку Vitro MP будет перенесена.
| Параметр | Пример | Описание |
|---|---|---|
| WebUrl | "https://localhost:53135" | Адрес системы Vitro MP |
| Login | "admin" | Логин от технической учетной записи в системе Vitro MP |
| Password | "admin" | Пароль от технической учетной записи в системе Vitro MP |
| Mode | Init | Режим работы утилиты. Может быть не заполнен. В таком случае будут запущены последовательно все режимы работы |
| ListId | "966e62c5-a803-49a0-a1be-e680d130c481" | Guid списка куда будут перенесены папки и файлы в Vitro MP |
| ConnectionString | "server=localhost;database=vitrodb;user id=vitrodbuser;password=vitrodbuser" | Строка подключения к БД с таблицей migration_gstation |
| DownloadFileBody | true | Флаг скачивания тел файлов. Может быть проведено тестирование без переноса тел файлов для экономии места. |
| MigrateFileVersionList | true | Флаг переноса всех версий файлов. Если true, то будут перенесены все тела файлов. |
| DefaultUserId | "aab39600-92b4-4c38-a55c-53efac8db9cc" | Guid пользователя, который будет подставлен при отсутствии сопоставления пользователя по email |
| IssueStatusMap | [ { "Name": "DRAFT", "Id": "059114cf-3ff1-40db-9086-af0a0053e123" }, | Маппинг статусов замечаний G-Station в статусы задач Vitro MP |
| FileStatusMap | [ { "Name": "default", "Id": "b9d061b1-7ce7-4756-8230-e502cfe3d8d8" }, | Маппинг статусов файлов G-Station в статус документа Vitro MP |
| ApprovalStatusMap | [ { "Name": "started", "Id": "4a1254f6-6d16-4f53-8861-45df330758f2" }, { "Name": "void", "Id": "ef9e1ebe-2211-4ba4-9493-9d17323a3b4d" }, { "Name": "completed", "Id": "62f64b73-76df-40f4-9889-7ed6a8494c3d" } ] | Маппинга статусов согласований G-Station в статус процесса Vitro MP |
| FileRefStatusMap | [ { "Name": "default", "Id": "a5f3ae02-9ee1-4b3a-ad25-1af248eac2ae" }, { "Name": "approved", "Id": "57465f37-3c35-4d73-96e7-b3b53bdd8336" }, { "Name": "rejected", "Id": "d1abf56b-cfba-49ba-89e3-672ad012e0d8" }, { "Name": "partially_approved", "Id": "0d43e15e-fa91-4976-bd5e-9f8423247d80" } ] | Маппинг статусов привязки файлов к согласованиям. |
| ExtensionWhiteList | [ "DWG", "PDF", "XLSX", "JPG", "DOCX", "ZIP", "RAR", "RVT", "DOC", "7Z", "TXT", "PNG"] | Белый список расширений переносимых файлов. |
| ApprovalListId | "fd8f54f8-b708-47d9-807d-f36add5dfc82" | Guid списка согласования в Vitro MP |
| PublishApprovalListId | "102f576c-9903-489c-a10b-d6dd78a5f0f0" | Guid списка "В производство работ" в Vitro MP |
| ApprovalContentTypeId | "7f09fdc2-3dce-418b-a8b5-f2e059442315" | Guid типа элемента "Согласование" в Vitro MP |
| ApprovalStepContentTypeId | "de4133bb-286d-4c02-a37b-4fafb8a0f45c" | Guid типа элемента "Этап согласования" в Vitro MP |
| ApproverContentTypeId | "23aa25ba-2b04-49a5-9e9e-4959908de66f" | Guid типа элемента "Согласующий" в Vitro MP |
| LibraryMap | { "https://gs.ru/urn:gstation.dm.project:130/folders/urn:gstation.dm.folder:1112": "3401b2e4-a230-438d-848a-4a0e1c6233ac", "https://gs.ru/urn:gstation.dm.project:133/folders/urn:gstation.dm.folder:17929": "3401b2e4-a230-438d-848a-4a0e1c6233ac"} | Основной параметр. Маппинг url папки G-Station в guid папки Vitro MP. |
Пример конфигурации утилиты с указанием режима обработки Mode. Если строчку с Mode удалить все режимы запустятся последовательно:
{
"WebUrl": "https://localhost:53135",
"Login": "admin",
"Mode": "Init",
"Password": "admin",
"ListId": "966e62c5-a803-49a0-a1be-e680d130c481",
"ConnectionString": "server=localhost;database=vitrodb;user id=vitrodbuser;password=@pwd4vitro!",
"DownloadFileBody": true,
"DefaultUserId": "aab39600-92b4-4c38-a55c-53efac8db9cc",
"ApprovalRefContentTypeId": "45b51fc8-40ff-48fe-bc06-cbad7d6a1d11",
"IssueStatusMap": [
{
"Name": "DRAFT",
"Id": "059114cf-3ff1-40db-9086-af0a0053e123"
},
{
"Name": "NOT_RELEVANT",
"Id": "059114cf-3ff1-40db-9086-af0a0053e123"
},
{
"Name": "NOT_STARTED",
"Id": "646ac5e3-d5d4-4f88-b213-af0a0058c25c"
},
{
"Name": "IN_PROCESS",
"Id": "5755dca4-9bad-442f-abfd-af0a0058e7e2"
},
{
"Name": "ON_REVIEW",
"Id": "2c559935-7137-46a8-a858-af0a0059773f"
},
{
"Name": "CLOSED",
"Id": "ae7cf376-0098-4a76-b172-af0a0059978d"
}
],
"FileStatusMap": [
{
"Name": "default",
"Id": "b9d061b1-7ce7-4756-8230-e502cfe3d8d8"
},
{
"Name": "approved",
"Id": "84124eed-7049-46a8-bac9-a179ff00efe3"
},
{
"Name": "rejected",
"Id": "14a46dee-9aa4-47a5-b2ae-7dfee7deefd5"
},
{
"Name": "partially_approved",
"Id": "132fd34b-b757-459e-8191-4a264c91a5b3"
}
],
"ApprovalStatusMap": [
{
"Name": "started",
"Id": "4a1254f6-6d16-4f53-8861-45df330758f2"
},
{
"Name": "void",
"Id": "ef9e1ebe-2211-4ba4-9493-9d17323a3b4d"
},
{
"Name": "completed",
"Id": "62f64b73-76df-40f4-9889-7ed6a8494c3d"
}
],
"FileRefStatusMap": [
{
"Name": "default",
"Id": "a5f3ae02-9ee1-4b3a-ad25-1af248eac2ae"
},
{
"Name": "approved",
"Id": "57465f37-3c35-4d73-96e7-b3b53bdd8336"
},
{
"Name": "rejected",
"Id": "d1abf56b-cfba-49ba-89e3-672ad012e0d8"
},
{
"Name": "partially_approved",
"Id": "0d43e15e-fa91-4976-bd5e-9f8423247d80"
}
],
"ExtensionWhiteList": [ "DWG", "PDF", "XLSX" ],
"ApprovalListId": "fd8f54f8-b708-47d9-807d-f36add5dfc82",
"ApprovalContentTypeId": "7f09fdc2-3dce-418b-a8b5-f2e059442315",
"ApprovalStepContentTypeId": "de4133bb-286d-4c02-a37b-4fafb8a0f45c",
"PublishApprovalListId": "102f576c-9903-489c-a10b-d6dd78a5f0f0",
"ApproverContentTypeId": "23aa25ba-2b04-49a5-9e9e-4959908de66f",
"LibraryMap": {
"https://gs.gs.ru/dm/projects/urn:gstation.dm.project:133/folders/urn:gstation.dm.folder:17929": "3401b2e4-a230-438d-848a-4a0e1c6233ac",
"https://gs.gs.ru/dm/projects/urn:gstation.dm.project:130/folders/urn:gstation.dm.folder:14900": "3401b2e4-a230-438d-848a-4a0e1c6233ac",
},
"MigrateFileVersionList": true
}
Важно: перед запуском утилиты качественно подготовить config – проверить все ID в системе Vitro-CAD:
Атрибуты, которые должны существовать в Vitro-CAD MP перед запуском утилиты:
assignedto_gstation – string - ФИО пользователей в поле "Исполнители"
approver_role_list – string – список ролей этапа согласования
approval_template – string – шаблон согласования
Типы элементов, которые должны существовать в Vitro-CAD MP перед запуском утилиты и их атрибуты:
| Тип элемента | Атрибуты |
|---|---|
| Замечание | assignedto_gstation, attachment_list |
| Согласование (ApprovalContentTypeId) | End_date_plan, end_date_fact, description, workflow_status, approval_template |
| Этап согласования (ApprovalStepContentTypeId) | End_date_plan, end_date_fact, approver_role_list, workflow_status |
| Согласующий (ApproverContentTypeId) | Description, workflow_status |
| Связь с согласованием | Необходимо создать тип элемента под Связь с указанием версии. Дополнительные атрибуты не нужны. |
Списки
| Список | Типы элементов |
|---|---|
| Согласования (ApprovalListId) | Согласование, этап согласования, согласующий |
| Выпуск в производство (PublishApprovalListId) | Согласование, этап согласования, согласующий |
Последовательность действий для запуска первичной миграции (таблица в БД migration_gstation пустая)
1. Заполнить config. json основными параметрами типов контента и списков. Убедиться, что все пути указывают в верную директорию Vitro-CAD. Убедиться, что есть доступы у указанных пользователи в системе G-Station
2. Заполнить параметр LibraryMap для переноса нужных папок
3. Запустить утилиту GStationToMPMigrateApp
4. Проверить таблицу migration_gstation – в ней появляются записи. Критерии успешности:
5. При возникновении ошибок делать запрос в таблицу миграции gstation_migration и изучить ошибку. Запустить утилиту в том режиме, в котором произошла ошибка. Если ошибка упала на режиме Folder, то следующий запуск нужно сделать в режиме Folder. Для этого зайти в config.json указать Mode Folder.
6. При повторном запуске утилиты миграции с новыми параметрами LibraryMap предварительно необходимо очистить таблицу миграции и запустить утилиту без указания Mode (строчку надо удалить из config.json). Если цель повторного запуска утилиты – домиграция новых данных из тех директорий в LibraryMap, которые ранее были перенесены – чистить таблицу gstation_migration нельзя