Импорт приложения

Импорт в открытое приложение выполняется при выборе пункта меню «Приложения» - «Импорт приложения». Пункт меню доступен только в том случае, если у пользователя есть право «Изменение» для текущего приложения.

Первым шагом импорта является выбор файла в диалоговом окне:

Рисунок 4.11. Выбор импортируемого архива

Выбор импортируемого архива

Разработчик должен выбрать один архив 7z и нажать на кнопку «Импортировать». При этом возможно выполнение альтернативных потоков 2, 3.

После нажатия на кнопку «Импортировать» отображается диалог запроса подтверждения действия с сообщением:

В ходе импорта все объекты приложения будут полностью заменены загружаемыми. Данный процесс займет некоторое время. Вы действительно хотите продолжить?

Если разработчик подтверждает импорт, то отображается окно прогресса импорта приложения. Внешний вид окна аналогичен существующему прогрессу импорта конфигурации.

Процесс импорта просходит в четыре этапа:

  1. Предварительная валидация выбранного архива. На этом же шаге выполняется обратное преобразование имени файла/папки в имя объекта приложения: исключается указание имени сущности объекта.

Ошибки, возникающие в ходе валидации, отображаются в логе событий. В случае, если валидация была успешно завершена, в логе отображается сообщение «Валидация архива успешно завершена», и отображается таблица импорта объектов.

Если валидация была завершена с ошибками, то кнопка «Завершить» становится доступной, окно не закрывается, импорт объектов не начинается. Возможно выполнение альтернативных потоков 4-10.

Во время предварительной валидации архива для каждой папки и каждого файла вычисляется хэш-сумма. Если она отличается от значения для соответствующего объекта приложения в среде импорта, то объект считается измененным.

  1. Выбор объектов для импорта. Отображется таблица импорта объектов приложения, содержащая целевую структуру приложения - состояние структуры приложения после применения импорта - и флаг «Включать зависимости», по умолчанию включенный. Каждому измененному объекту или папке приложения соответствует флаг включения и подпись:

  • объект присутствует и в приложении, и в архиве: флаг включен, подпись «Объект будет заменен»;

  • объект присутствует в приложении, но отсутствует в архиве: флаг отключен, подпись «Объект будет скрыт/удален»;

  • объект присутствует в архиве, но отсутствует в приложении: флаг включен, подпись «Объект будет добавлен»;

  • объект присутствует и в приложении, и в архиве, но у него отличается родительская папка: флаг включен, подпись «Объект будет перемещен».

На этом шаге SAD включает флаги объектов, которые должны быть импортированы. При этом:

  • если флаг «Включать зависимости» включен, то при включении флага объекта включаются также все объекты, от которых он зависит (аналогично реализации импорта/экспорта конфигурации); при отключении флага объекта также отключаются флаги объектов, зависящих от него;

  • если флаг «Включать зависимости» отключен, то при включении/отключении флага объекта состояние флагов связанных с ним объектов не изменяется.

После завершения выбора объектов необходимо проверить целостность итогового приложения. Проверка выполняется после нажатия на кнопку «Проверить». В процессе проверки отображается окно, содержащее прогресс-бар, область логов, кнопки «Назад», «Импортировать» и «Завершить». Возможно выполнение альтернативных потоков 11, 12.

В случае, если проверка целостности завершена без ошибок, в логе отображается сообщение «Проверка целостности приложения успешно завершена», кнопка «Импортировать» становится доступной. Кнопки «Назад» и «Завершить» в это время заблокированы. По нажатию на кнопку «Импортировать» начинается непосредственно импорт объектов.

Если проверка целостности была завершена с ошибками, кнопки «Назад» и «Завершить» становятся доступны. По нажатию на кнопку «Назад» отображается таблица импорта объектов, состояние флагов для которых такое же, как перед началом проверки. По нажатию на кнопку «Завершить» окно прогресса закрывается, изменения не применяются.

  1. Создание и инициализация импортируемых объектов.

  2. Настройка объектов, их прав, связей и других параметров.

Процент завершения каждого этапа вычисляется независимо. Таким образом, в случае успеха после предварительной валидации архива прогресс-бар трижды принимает значение 100%.

Результатом импорта является обновление структуры и объектов приложения в среде импорта.

Импорт увеличивает номер ревизии приложения.

Возможные ошибки, возникающие при импорте приложения

Альтернативный поток 2. Не выбран файл.

Действие не выполняется, система отображает сообщение об ошибке с текстом:

Выберите файл

Альтернативный поток 3. Выбран файл, не являющийся корректным 7z-архивом.

Действие не выполняется, система отображает сообщение об ошибке с текстом:

Ошибка при чтении архива

Альтернативный поток 4. В выбранном архиве содержатся некорретные файлы json.

Ошибка возникает в случае, если файл в архиве не может быть прочитан как файл json, имеет неизвестную структуру, а также в случае, когда имя сущности объекта отличаются от указанной в имени файла/папки.

При валидации архива в области логов событий отображается ошибка с текстом:

Некорректный формат файла path/to/file.json: %текст_ошибки%

Путь к файлу указывается относительно корня импортируемого архива.

Для каждого некорректного файла отображается отдельная строка с ошибкой, продолжается валидация остальных элементов архива.

Альтернативный поток 5. Не совпадает номер ревизии в сведениях о приложении в архиве и в среде импорта.

При валидации архива в области логов событий отображается ошибка с текстом:

Не совпадает номер ревизии в сведениях о приложении в архиве и в среде импорта. Пожалуйста, актуализируйте сведения о приложении в импортируемом архиве.

Валидация завершается.

Альтернативный поток 6. Невозможно выполнить обратное преобразование имени файла в код объекта: неизвестный шаблон имени

Ошибка возникает в случае, когда имя файла или папки в архиве не соответствует известным шаблонам (например, templateN.html вместо template.html для html-кода пользовательского компонента, или файл script.js без родительской папки)

При валидации архива в области логов событий отображается ошибка с текстом:

Неизвестный шаблон имени элемента path/to/object

Путь к файлу указывается относительно корня импортируемого архива.

Для каждого некорректного файла отображается отдельная строка с ошибкой, продолжается валидация остальных элементов архива.

Альтернативный поток 7. Невозможно выполнить обратное преобразование имени файла в код объекта: код объекта, указанный в файле, не соответствует указанному имени файла или папки.

Ошибка возникает в случае, когда код объекта, который содержится в файле json, не соответствует имени этого файла/ имени папки с учетом шаблонов именования.

При валидации архива в области логов событий отображается ошибка с текстом:

Невозможно выполнить преобразование имени в код для элемента path/to/object: код, указанный в свойствах объекта, не соответствует имени элемента

Для каждого некорректного файла или папки отображается отдельная строка с ошибкой, продолжается валидация остальных элементов архива.

Альтернативный поток 8. Невозможно выполнить обратное преобразование имени файла в код объекта: код объекта имеет некорректный формат.

Ошибка возникает в случае, когда в результате преобразования имен содержимого архива в коды объектов приложения полученный код не соответствует правилам валидации кода, принятым для сущности этого объекта. Например:

  • код 123 form некорректен для любой сущности, поскольку содержит пробел и начинается с цифры;

  • код код.объекта некорректен для таких сущностей, как шаблоны номеров или журналы, поскольку содержит символы кириллицы и точку. Однако такой код может быть корректным для форм и реестров, поскольку эти сущности поддерживают использование кириллицы в кодах.

При валидации архива в области логов событий отображается ошибка с текстом:

Невозможно выполнить преобразование имени в код для элемента path/to/object: код объекта не соответствует правилам валидации для своей сущности

Для каждого некорректного элемента архива отображается отдельная строка с ошибкой, продолжается валидация остальных элементов.

Альтернативный поток 9. Невозможно выполнить обратное преобразование имени файла в код объекта: проблема уникальности кодов объектов.

Ошибка возникает в случае, когда в результате преобразования имен содержимого архива в коды объектов приложения присутствует два или более объекта одной сущности и с одинаковыми кодами, или полученный код объекта уже используется в экземпляре Synergy.

При валидации архива в области логов событий отображается ошибка с текстом:

Невозможно выполнить преобразование имени в код для элемента path/to/object: данный код уже используется

Для каждого некорректного файла отображается отдельная строка с ошибкой, продолжается валидация остальных элементов архива.

Альтернативный поток 10. В архиве присутствуют файлы объектов, для которых не указаны обязательные параметры

Ошибка возникает в случае, когда в архиве присутствует файл объекта, для которого не объявлены или пусты секции, соответствующие обязательным параметрам объекта (например, есть файл реестра, для которого не указано наименование).

При валидации архива в области логов событий отображается ошибка с текстом:

Некорректно указаны обязательные параметры для объекта в файле path/to/file.json

Путь к файлу указывается относительно корня импортируемого архива.

Для каждого некорректного файла отображается отдельная строка с ошибкой, продолжается валидация остальных элементов архива.

Альтернативный поток 11. В результирующем приложении присутствуют объекты, для которых не определены зависимые объекты

Ошибка возникает в случае, если для какого-либо объекта был указан объект, от которого он зависит, но архив или приложение не этого объекта (например, есть реестр, для которого не импортируется соответствующая ему форма, или для формы, в которой используется справочник, не выбран этот справочник).

При валидации структуры приложения в области логов событий отображается ошибка с текстом:

%Имя_сущности% %код_объекта% содержит объявления несуществующих или не выбранных объектов: %имя_сущности_отсутствующего_объекта1% с кодом %код_отсутствующего_объекта1%, …, %имя_сущности_отсутствующего_объектаN% с кодом %код_отсутствующего_объектаN%

Для каждого некорректного объекта отображается отдельная строка с ошибкой, продолжается валидация остальных объектов.

Альтернативный поток 12. В результирующем приложении присутствуют ссылки объекты, которые будут удалены в результате импорта

Ошибка возникает в случае, когда объект, на который ссылается импортируемый объект, содержится в приложении, но не содержится в архиве, и сущность этого объекта поддерживает удаление. Например, в ситуации, когда импортируется форма без учета зависимостей, но для справочника, на который ссылается компонент этой формы, включен флаг удаления при импорте.

При валидации структуры приложения в области логов событий отображается ошибка с текстом:

%Имя_сущности% %код_объекта% содержит ссылки на объекты, которые будут удалены в результате импорта: %имя_сущности_удаляемого_объекта1% с кодом %код_удаляемого_объекта1%, …, %имя_сущности_удаляемого_объектаN% с кодом %код_удаляемого_объектаN%

Для каждого некорректного объекта отображается отдельная строка с ошибкой, продолжается валидация остальных объектов.