Циклические последовательности связей в иерархии пакетов

Продукты
Все продукты

В Creatio версии 8.0 Atlas реализован новый подход к кастомизации и выделен уровень с функциональными блоками, направленными на решение бизнес-задач — приложениями. Приложения становятся основной единицей no-code разработки. Например, приложением может быть набор инструментов для управления заявками сотрудников. Приложение может состоять из одного или нескольких пакетов с наполнением. Пакет — это совокупность конфигурационных элементов, которые реализуют определенный блок функциональности. Его можно переносить между рабочими средами (экспортировать, устанавливать на другие экземпляры Creatio), предоставлять для использования другими пользователями на Creatio Marketplace. Подробнее: Общие принципы работы с пакетами (документация по разработке).

Вместе с приложением автоматически создается пакет, в который сохраняется вся разрабатываемая функциональность. Для элементов, созданных в No-code дизайнере, Freedom UI дизайнере, дизайнерах бизнес-процессов и кейсов, а также для привязок данных все необходимые зависимости добавляются в приложение автоматически.

На заметку.Если вы возвращаетесь к редактированию приложения спустя некоторое время после его создания, то перед началом работы убедитесь, что пакет данного приложения указан в системной настройке “Текущий пакет” (код “CurrentPackageId”). Иначе все ваши доработки будут сохранены в другой пакет, что приведет к возникновению ошибок при сохранении и переносе изменений.

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

Например, в приложении есть пакеты A, B и C. Пакет B зависит от пакета A, пакет C зависит от пакета B. Если при кастомизации приложения в пакете A или B был использован элемент из пакета C, то Creatio потребуется добавить в зависимости пакет C, чтобы получить доступ к его функциональности. Данная операция не будет выполнена, поскольку возникнет циклическая последовательность(Рис. 1).

Рис. 1 — Пример циклической последовательности
scr_example_cyclic_sequences.png

Использование приложения с такими зависимостями может привести к сбоям в работе Creatio. Поэтому при сохранении изменений в приложениях выполняется проверка использованных конфигурационных элементов и настроенных зависимостей. Если в ходе проверки были обнаружены циклические последовательности взаимосвязей, то Creatio сохранит изменения, но не добавит зависимости для пакетов автоматически. Вы получите уведомление с рекомендацией проверить и исправить настроенные зависимости, в котором содержатся подробности ошибки (Рис. 2):

  • Источник — часть схемы с элементом, приводящем к ошибке. приводящий к ошибке.
  • Ссылка — название элемента, приводящего к ошибке.
  • Пакет — название пакета, в котором находится элемент.
Рис. 2 — Пример сообщения об ошибке циклических последовательностей
scr_error_cyclic_sequences.png

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

Примеры циклических последовательностей 

Рассмотрим несколько примеров решений, которые приводят к возникновению циклических последовательностей.

Пример 1. Если в пользовательском приложении “UserApplication” будет использован конфигурационный элемент, созданный ранее в пакете Custom (Рис. 3), то возникает циклическая последовательность. Причина: пакет Custom по умолчанию зависим от всех пакетов конфигурации, в том числе от “UserApplication”. А “UserApplication” необходима зависимость от Custom для доступа к его элементам.

Рис. 3 — Пример иерархии пакетов
scr_hierarchy_cyclic_sequences.png

Пример 2. Созданы приложения “Application1” и “Application2”. При использовании в приложении “Application2” элементов из “Application1” Creatio автоматически сделает “Application2” зависимым от “Application1”. Если при доработках приложения “Application1” в нем будет использована функциональность приложения “Application2”, то возникнет ошибка циклической последовательности.

Предотвратить появление циклических последовательностей 

Чтобы избежать появления циклических последовательностей рекомендуем:

  • При настройке вашего приложения с использованием элементов из другого приложения, необходимо учитывать, что ваше приложение при этом становится зависимым. Чтобы ваше приложение корректно работало на другой среде, переносить необходимо будет оба этих приложения.
  • Сохранять доработки, которые могут быть использованы в приложении, только в пакет данного приложения. После создания приложения, но перед его настройкой необходимо узнать название его пакета и изменить пакет по умолчанию. Для этого:
  1. В разделе Расширенные настройки No-code дизайнера найдите название пакета вашего приложения.
  2. Нажмите в правом верхнем углу btn_system_designer.pngСистемные настройки.
  3. Выберите системную настройку “Текущий пакет” (код “CurrentPackageId”).
  4. Убедитесь, что в поле Значение по умолчанию указано название пакета, полученное на шаге 1. Если в поле указано другое значение, то замените его названием пакета вашего приложения и сохраните изменения.

Устранить проблему циклических последовательностей 

Способы устранения циклической последовательности:

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

    Пример. В элементе Читать данные бизнес-процесса была вычитана или использована в условиях фильтрации лишняя колонка. Для устранения циклической последовательности достаточно удалить ее и сохранить разработанный бизнес-процесс.

    На заметку. До устранения проблемы циклических зависимостей объект или бизнес-процесс, который использует методы и элементы Задание-сценарий, будет недоступнен для публикации.

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

    Пример. Существует два замещения объекта UsrObject: в пакете приложения “UserApplication” и в пакете Custom. У колонки Column данного объекта, созданной в пакете Custom, было изменено свойство Название в пакете “UserApplication”. Изменение произведено в зависимом пакете, то привело к возникновению циклической последовательности. Для ее устранения достаточно вернуть свойство в исходное состояние и сохранить обновленный объект.

  • Если элементы, вызвавшие циклические последовательности нельзя изменить и удалить, то необходимо их переместить:
    • в один пакет со схемами, от которых они зависят;
    • в пакет, от которого будет зависеть пакет с этими схемами.

    Пример. Циклическая последовательность возникла из-за использования в приложении “UserApplication” справочника UsrLookup пакета Custom. Справочник используется как источник данных для справочной колонки объекта UsrEntity. Чтобы устранить ошибку, необходимо переместить справочник UsrLookup в пакет приложения “UserApplication”.

    Чтобы переместить созданную функциональность между пакетами:

  1. В разделе Расширенные настройки No-code дизайнера найдите название пакета вашего приложения.
  2. Нажмите в правом верхнем углу btn_system_designer.pngУправление конфигурацией.
  3. В списке пакетов выберите необходимый пакет.
  4. В содержимом пакета найдите схему, которая стала причиной циклической последовательности.
  5. Нажмите кнопку btn_multiple.png.
  6. Выберите “Переместить в другой пакет”.
  7. В открывшемся окне выберите название пакета, полученное на шаге 1, и сохраните изменения.

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