Формулировка проблемы: для упрощения процесса разработки приложений на базе Synergy необходимо изменить интерфейс конфигуратора на оболочку Synergy IDE.
Связанные задачи:
Решение:
Создание копии объекта выполняется только в рамках текущего приложения. При этом могут быть созданы копии связанных объектов, если у копируемого объекта есть жесткая связь с ними.
Жесткие связи между сущностями Synergy, когда при копировании первого объекта необходимо создать копию связанного объекта:
реестр и форма;
карточка пользователей и форма;
карточка должностей и форма;
карточка подразделений и форма.
При копировании группы пользователей или группы реестров копируется ее дочерние элементы.
Папки приложения, как и корневая нода приложения, не копируются.
Для всех объектов приложения, кроме папок и корневой ноды приложения, необходимо добавить новый пункт контекстного меню "Создать копию" (выше пункта "Переместить", если он есть).
Когда SAD выбирает этот пункт, в приложении создается новый объект - копия, которая отличается от оригинального объекта кодом и наименованием. Если копируется реестр или карточка, то автоматически копируется связанная с ними форма, и созданная копия реестра/карточки связывается с копией формы. Все остальные связи, свойства, скрипты и вложенные файлы копии полностью совпадают с оригинальным объектом.
К коду копии добавляется постфикс _copy%N%
, к
наименованию копии - текст " (копия)" (во всех локалях).
Расчет постфикса выполняется по такому же алгоритму, как и для кодов компонентов на форме.
Созданная копия располагается в той же папке, что и исходный объект. В случае копирования реестра или карточки созданная копия формы располагается в той же папке, что и исходная форма.
При копировании группы пользователей необходимо различать, для какого объекта была вызвана функция создания копии, а какие группы были скопированы при копировании их родителя. В этом случае копия группы, для которой было вызвано копирование, находится в той же родительской группе, что и исходная группа. Однако дочерние группы, копирование которых было следствием, располагаются в копии своей родительской группы (см. пример ниже).
Копия группы содержит тех же пользователей (те же реестры) и вложенные группы, что и оригинальная группа.
Пример копирования групп пользователей:
Предположим, приложение содержит такую структуру групп:
А (корневая группа)
В
C
D
SAD выполняет копирование группы В. При этом создается копия этой
группы с кодом B_copy1
, а также копия ее дочерней
группы C_copy1
. При этом
B_copy1
является дочерней для группы А, а
C_copy1
- дочерней для
B_copy1
. Результирующая структура групп:
А (корневая группа)
В
C
B_copy1
C_copy1
D
При этом группы В и С содержат тех же пользователей, которые содержались в исходных группах В и С.