Задача [IDE7]: Копирование объектов в приложении

Формулировка проблемы: для упрощения процесса разработки приложений на базе Synergy необходимо изменить интерфейс конфигуратора на оболочку Synergy IDE.

Связанные задачи:

Решение:

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

Жесткие связи между сущностями Synergy, когда при копировании первого объекта необходимо создать копию связанного объекта:

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

Папки приложения, как и корневая нода приложения, не копируются.

Для всех объектов приложения, кроме папок и корневой ноды приложения, необходимо добавить новый пункт контекстного меню "Создать копию" (выше пункта "Переместить", если он есть).

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

К коду копии добавляется постфикс _copy%N%, к наименованию копии - текст " (копия)" (во всех локалях).

Расчет постфикса выполняется по такому же алгоритму, как и для кодов компонентов на форме.

Созданная копия располагается в той же папке, что и исходный объект. В случае копирования реестра или карточки созданная копия формы располагается в той же папке, что и исходная форма.

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

Копия группы содержит тех же пользователей (те же реестры) и вложенные группы, что и оригинальная группа.

Пример копирования групп пользователей:

Предположим, приложение содержит такую структуру групп:

SAD выполняет копирование группы В. При этом создается копия этой группы с кодом B_copy1, а также копия ее дочерней группы C_copy1. При этом B_copy1 является дочерней для группы А, а C_copy1 - дочерней для B_copy1. Результирующая структура групп:

При этом группы В и С содержат тех же пользователей, которые содержались в исходных группах В и С.