Перемещение объектов между приложениями

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

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

Примечание:

В случае, если в приложении многие объекты зависят друг от друга, при попытке переноса одного из объектов, внешне не имеющего никаких зависимостей - например, пользовательского компонента - совместно с ним может быть перенесена большая часть других объектов приложения. В случае с пользовательским компонентом будут перенесены все ВМК, использующие этот компонент, и все формы, на которых этот компонент размещен. Формы, в свою очередь, повлекут перемещение всех объектов, на которые ссылаются компоненты форм, а также все реестры и/или карточки, использующие эти формы. Таким образом, возникает сильно связанный «снежный ком», разъединить который при переносе невозможно, и это не является ошибкой Synergy.

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

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

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

Открывается диалоговое окно «Выберите перемещаемые объекты», содержащее дерево объектов приложения и кнопку «Далее»:

Рисунок 4.9. Выбор перемещаемых объектов

Выбор перемещаемых объектов

По умолчанию в дереве выделены:

  1. выбранный для перемещения объект, у которого было вызвано контекстное меню;

  2. все объекты, на которые ссылается выбранный объект (зависимости «вниз»);

  3. все объекты, которые содержат ссылки на выбранный объект (зависимости «вверх»);

  4. для всех объектов, выделенных по зависимостям - в свою очередь, их зависимости «вниз» и «вверх».

Снять выделение с объектов, выделенных по умолчанию, невозможно.

При необходимости SAD может дополнительно выделить другие объекты, которые необходимо переместить.

Выделение папок недоступно.

По нажатию на кнопку «Далее» в диалоге отображается дерево приложения, выбранного в пункте контекстного меню, и кнопка «Переместить»:

Рисунок 4.10. Выбор целевой папки

Выбор целевой папки

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

SAD выбирает одну папку, в которую будут перемещены все объекты, выделенные на предыдущем шаге.

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

Определение зависимостей объектов

Зависимости перемещаемого объекта «вниз» определяются по тем же правилам, как и в случае импорта этого объекта с зависимостями.

Сущности, объекты которых проверяются для выявления ссылок на выбираемый объект в зависимости от сущности этого объекта:

  1. Справочник:

    • формы, в которых есть компоненты, ссылающиеся на этот справочник;

  2. Форма:

    • реестр этой формы;

    • типы документов, использующих эту форму;

    • карточка пользователей, карточка должностей и карточка подразделений, использующие эту форму;

    • шаблоны документов, в которых использована эта форма;

    • шаблоны маршрутов, в которых используется тип действия «Условный переход» с этой формой в качестве источника данных;

  3. Реестр:

    • формы, в которых есть компонент «Ссылка на реестр», где используется выбранный реестр;

    • реестры, где выбранный реестр указан в качестве реестра ответа;

    • действия по сотрудникам и действия по резерву, в которых используется выбранный реестр;

    • группы реестров, в которые входит выбранный реестр;

    • пользовательские отчеты, в которых в качестве модуля указан этот реестр;

  4. Группа реестров:

    • все группы реестров, дочерние для выбранной группы;

    • если группа является корневой, то все ее дочерние группы;

    • если группа не является корневой, то:

      • ее родительские группы вплоть до корневой группы;

      • все дочерние группы выделенных родительских групп;

  5. Шаблон маршрута:

    • реестры, в маршрутах которых используется тип действия «Запуск маршрута по шаблону» или «Условный переход», где указан этот шаблон;

    • шаблоны маршрутов, в которых используется тип действия «Запуск маршрута по шаблону» или «Условный переход», где указан выбранный шаблон;

    • типы документов, в которых указан выбранный шаблон маршрута;

  6. Счетчик:

    • шаблоны номеров, использующие этот счетчик;

  7. Шаблон номера:

    • журналы, использующие этот шаблон номера;

    • формы, в которых есть компонент «Номер», ссылающийся на этот шаблон номера;

  8. Журнал:

    • типы документов, в которых указан выбранный журнал;

  9. Тип документа:

    • реестры, в которых указан этот тип документа;

    • шаблоны документов, в которых указан этот тип документа;

  10. Карточка пользователей, карточка должностей, карточка подразделений:

    • шаблоны маршрутов, в которых есть тип действия «Копирование в карточку», и указан идентификатор выбранной карточки;

    • реестры, в маршрутах которых есть тип действия «Копирование в карточку», и указан идентификатор выбранной карточки;

    • действия по сотрудникам и по резерву, где выбранная карточка пользователя используется в сопоставлении;

  11. Группа пользователей:

    • реестры, в которых используется выбранная группа (непосредственно или в качестве прав на фильтры реестра);

    • типы документов, в которых указана выбранная группа;

    • карточки пользователей, создаваемых для этой группы;

    • пользовательские отчеты, доступные этой группе;

    • все группы пользователей, дочерние для выбранной группы;

    • если группа является корневой, то все ее дочерние группы;

    • если группа не является корневой, то:

      • ее родительские группы вплоть до корневой группы;

      • все дочерние группы выделенных родительских групп;

  12. ПК:

    • ВМК, которые используют этот ПК;

    • формы, в которых ПК использован в качестве компонента;

  13. Скрипт интерпретатора:

    • реестры, в маршрутах которых есть тип действия «Блокирующий процесс», где указан этот скрипт);

    • шаблоны маршрутов, в которых есть тип действия «Блокирующий процесс», где указан этот скрипт).

Для ВМК, внешних модулей, действий по сотрудникам и по резерву, пользовательских отчетов не может быть объектов, которые от них зависят.

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

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