Разработка конфигурационных элементов

Сложный

Схема — основа конфигурации Creatio. С точки зрения программной реализации схема — это класс ядра, который наследуется от базового класса Schema. Конфигурационные элементы (значения выпадающего списка Добавить (Add) панели инструментов реестра раздела Конфигурация (Configuration)), представлен схемой соответствующего типа (выпадающий список Тип (Type)).

Виды конфигурационных элементов
scr_AddList.png
Типы схем
scr_TypeList.png

Клиентский модуль 

Клиентский модуль — это отдельный блок функциональности, который загружается и запускается по требованию. В соответствии с подходом AMD и несмотря на некоторые функциональные различия, клиентские модули Creatio имеют одинаковую структуру описания.

Клиентские модули используются для front-end разработки (на языке JavaScript) в приложении Creatio.

Виды схем клиентских модулей:

  • Невизуальный модуль (схема модуля).
  • Визуальный модуль (схема модели представления).
  • Модуль расширения и замещающий клиентский модуль (схема замещающей модели представления).

Модули описаны в статье Виды модулей.

Схема модуля 

Алгоритм разработки схемы:

  1. Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
  2. На панели инструментов реестра раздела нажмите Добавить —> Модуль (Add —> Module).
    scr_add_module.png
  3. В дизайнере модуля заполните свойства схемы.

    Основные свойства схемы:

    • Код (Code) — название схемы (обязательное свойство). Должно содержать префикс (по умолчанию Usr), указанный в системной настройке Префикс названия объекта (код SchemaNamePrefix), символы латинского алфавита и цифры.
    • Заголовок (Title) — локализуемый заголовок схемы (обязательное свойство).
    • Пакет (Package) — пользовательский пакет, в котором создается схема. Заполняется автоматически и недоступно для редактирования.
    • Описание (Description) — локализуемое описание схемы.
    scr_source_code.png

    Для применения заданных свойств нажмите Применить (Apply).

    Панель свойств позволяет изменить основные свойства схемы (кнопка scr_edit_button.png) и задать дополнительные (кнопка scr_add_button.png). Дополнительными свойствами являются Локализуемые строки (Localizable strings), Сообщения (Messages), Изображения (Images).

  4. В дизайнере модуля добавьте исходный код. Название модуля в функции define() должно совпадать с названием схемы (свойство Код (Code).

    Если при написании кода допущена ошибка, то слева возле номера строки отображается тип ошибки (ошибка scr_error_icon.png или предупреждение scr_warning_icon.png). При наведении курсора на тип ошибки отображается всплывающая подсказка с текстовым описанием.

  5. На панели инструментов дизайнера модуля нажмите Сохранить (Save).

Схема модели представления 

Виды схем модели представления:

  • Схема страницы записи раздела (пункт Модель представления страницы (Page view model)).
  • Схема страницы раздела с реестром и итогами (пункт Модель представления раздела (Section view model)).
  • Схема страницы детали с реестром (пункт Модель представления детали с реестром (Detail (list) view model)).
  • Схема страницы детали с полями (Модель представления детали с полями (Detail (fields) view model)).

Алгоритм разработки схемы:

  1. Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
  2. На панели инструментов реестра раздела нажмите Добавить (Add) и выберите вид схемы модели представления.
    scr_add_model_view.png
  3. В дизайнере модуля заполните свойства схемы.

    Основные свойства схемы:

    • Код (Code) — название схемы (обязательное свойство). Должно содержать префикс (по умолчанию Usr), указанный в системной настройке Префикс названия объекта (код SchemaNamePrefix), символы латинского алфавита и цифры.
    • Заголовок (Title) — локализуемый заголовок схемы (обязательное свойство).
    • Пакет (Package) — пользовательский пакет, в котором создается схема. Заполняется автоматически и недоступно для редактирования.
    • Родительский объект (Parent object) — родительский объект для текущего объекта. В выпадающем списке выберите родительский объект, свойства которого необходимо наследовать.
    • Описание (Description) — локализуемое описание схемы.
    scr_source_code1.png

    Для применения заданных свойств нажмите Применить (Apply).

    Панель свойств позволяет изменить основные свойства схемы (кнопка scr_edit_button.png) и задать дополнительные (кнопка scr_add_button.png). Дополнительными свойствами являются Локализуемые строки (Localizable strings) и Изображения (Images).

  4. В дизайнере модуля добавьте исходный код. Название модуля в функции define() должно совпадать с названием схемы (свойство Код (Code). Схема модели представления обязательно должна быть наследником базовой схемы BaseModulePageV2.

    Если при написании кода допущена ошибка, то слева возле номера строки отображается тип ошибки (ошибка scr_error_icon.png или предупреждение scr_warning_icon.png). При наведении курсора на тип ошибки отображается всплывающая подсказка с текстовым описанием.

  5. На панели инструментов дизайнера модуля нажмите Сохранить (Save).

Схема замещающей модели представления 

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

Алгоритм разработки схемы:

  1. Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
  2. Установите зависимости пакета. В зависимости обязательно добавьте пакет, который содержит замещаемый клиентский модуль.
  3. На панели инструментов реестра раздела нажмите Добавить —> Замещающая модель представления (Add —> Replacing view model).
    scr_add_replacing_module.png
  4. В дизайнере модуля выберите родительский объект.

    Чтобы модуль замещал раздел или страницу, в обязательном свойстве Родительский объект (Parent object) схемы укажите заголовок той базовой схемы модели представления, которую необходимо заместить. Например, для создания замещающей схемы раздела Контакты (Contacts) в качестве родительского объекта необходимо указать схему ContactSectionV2. Для этого в поле Родительский объект (Parent object) свойств замещающей схемы необходимо начать вводить заголовок "Раздел контакты" ("Contacts section") и выбрать нужное значение из выпадающего списка.

    scr_props_ContactSectionV2.png

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

    scr_source_code1.png

    Для применения заданных свойств нажмите Применить (Apply).

    Панель свойств позволяет изменить основные свойства схемы (кнопка scr_edit_button.png) и задать дополнительные (кнопка scr_add_button.png). Дополнительными свойствами являются Локализуемые строки (Localizable strings) и Изображения (Images).

  5. В дизайнере модуля реализуйте функциональность, которая отличает замещающий клиентский модуль от замещаемого. Название модуля в функции define() должно совпадать с названием схемы (свойство Код (Code).

    Если при написании кода допущена ошибка, то слева возле номера строки отображается тип ошибки (ошибка scr_error_icon.png или предупреждение scr_warning_icon.png). При наведении курсора на тип ошибки отображается всплывающая подсказка с текстовым описанием.

  6. На панели инструментов дизайнера модуля нажмите Сохранить (Save).

Объект 

Объектный слой ORM (Object-relational mapping) в Creatio основан на объектах (Entity). Объект — это бизнес-сущность, которая на уровне серверного ядра позволяет объявить новый класс ORM-модели. На уровне базы данных создание объекта означает создание записи таблицы с таким же именем, как у созданного объекта, и с таким же набором колонок. То есть в большинстве случаев каждый объект в системе является системным представлением одной физической таблицы в базе данных.

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

Виды схем объектов:

  • Базовые. Недоступны для редактирования, находятся в предустановленных пакетах. Базовые схемы могут замещаться пользовательскими.
  • Пользовательские. Создаются при кастомизации, находятся в пользовательских пакетах.

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

Объекты используются для back-end разработки (на языке C#) в приложении Creatio.

Схема объекта 

Алгоритм разработки схемы:

  1. Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
  2. На панели инструментов реестра раздела нажмите Добавить —> Объект (Add —> Object).
    scr_add_entity_schema.png
  3. В дизайнере объекта заполните свойства схемы.

    Основные свойства схемы:

    • Код (Code) — название схемы (обязательное свойство). Должно содержать префикс (по умолчанию Usr), указанный в системной настройке Префикс названия объекта (код SchemaNamePrefix), символы латинского алфавита и цифры. Допустимая длина имени объекта — 128 символов. На базах Oracle ниже версии 12.2 не допускаются к использованию объекты с длиной имени более 30 символов.
    • Заголовок (Title) — локализуемый заголовок схемы (обязательное свойство).
      scr_schema_props_extended.png
    • Родительский объект (Parent object) — родительский объект для текущего объекта.

      Чтобы объект наследовал функциональность базового объекта, в свойстве Родительский объект (Parent object) схемы укажите код той базовой схемы объекта, функциональность которой необходимо наследовать. Например, для наследования функциональности базовой схемы BaseEntity в поле Родительский объект (Parent object) свойств схемы необходимо начать вводить код BaseEntity и выбрать нужное значение из выпадающего списка. После подтверждения выбранного родительского объекта к структуре объекта будут добавлены колонки, унаследованные от базового объекта.

      Подтверждение использования родительского объекта
      scr_add_message.png
      Унаследованные колонки в структуре объекта
      scr_entity_columns.png
    • Идентификатор (Id) — системная колонка, используемая в качестве первичного ключа в таблице базы данных (обязательное свойство). Заполняется автоматически после установки свойства Родительский объект (Parent object).

      Поскольку объект в системе является представлением таблицы в базе данных, то он обязательно должен содержать колонку-идентификатор. Для установки значения свойства Идентификатор (Id) в качестве родительского объекта укажите один из базовых объектов системы или в выпадающем списке выберите пользовательскую колонку типа Уникальный идентификатор (Unique identifier). Добавление пользовательской колонки рассмотрено ниже. Если попытаться сохранить схему объекта без идентификатора, то система выдаст предупреждение.

  4. Добавьте пользовательскую колонку в объект.

    Алгоритм добавления в объект пользовательской колонки:

    1. В контекстном меню узла Колонки (Columns) структуры объекта нажмите add_button.
    2. В выпадающем меню выберите тип колонки и задайте ее свойства.

      Для добавления колонки-идентификатора нажмите Другие —> Уникальный идентификатор (Other —> Unique identifier).

      scr_add_column_type.png
    3. В дизайнере объекта заполните свойства добавляемой колонки.

      Основные свойства добавляемой колонки:

      • Код (Code) — название колонки (обязательное свойство). Значение по умолчанию устанавливается дизайнером объекта и может быть изменено.

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

      • Заголовок (Title) — локализуемый заголовок колонки (обязательное свойство).
      • Тип данных (Data type) — тип данных, содержащихся в колонке. Значение по умолчанию устанавливается дизайнером объекта в зависимости от выбранной команды добавления колонки.
      • Обязательное (Required) — обязательность колонки. Выберите "На уровне приложения" ("Application Level"), поскольку колонка должна обязательно содержать значение.
      • Значение по умолчанию (Default value) — значение по умолчанию.

        Для установки значения по умолчанию нажмите scr_edit_button.png и заполните поля:

        • Тип значения (Default value type) — выберите "Cистемная переменная" ("System variable").
        • Cистемная переменная (System variable) — выберите "Новый идентификатор" ("New Id"), поскольку идентификаторы должны быть уникальными.
          scr_default_column_value.jpg
      • Режим использования (Usage mode) — выберите "Расширенный" ("Advanced").
        entity_column

        Режимы использования колонок, реализованные в Creatio IDE:

        1. Общие (General) — стандартный режим колонок в приложении.
        2. Расширенный (Advanced) — колонка отображается в конфигурации и доступна для использования в приложении.
        3. Никогда (None) — колонка отображается в конфигурации как системная и недоступна для использования в приложении.
    4. На панели инструментов дизайнера объекта нажмите Сохранить (Save) для временного сохранения изменений в метаданных.
    5. Добавьте индексы в объект.

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

      В блоке свойств Поведение (Behavior) установите признак Индексируемая (Indexed), если необходимо создать индекс по одной колонке. В системе по умолчанию справочные колонки являются индексируемыми.

      scr_Behavior.png

      Алгоритм добавления составного индекса:

      1. Задайте название индекса. Для этого в контекстном меню элемента Индексы (Indexes) нажмите scr_add_button.png и в поле Код (Code) укажите пользовательское название.
      2. Установите признак Уникальный (Unique) если для колонок индекса необходимо реализовать ограничение целостности (исключить возможность вставки повторяющихся комбинаций значений).
      3. Добавьте необходимые колонки в индекс. Для этого в блоке Колонки индекса (Index Columns) нажмите Добавить (Add), выберите колонку объекта и укажите направление сортировки.

         

        gif_index.gif
    6. На панели инструментов дизайнера объекта нажмите Сохранить (Save) для временного сохранения изменений в метаданных схемы.
    7. На панели инструментов дизайнера объекта нажмите Опубликовать (Publish) для окончательного сохранения схемы и создания соответствующей таблицы в базе данных.

      Начиная с версии 7.18.5, кнопка Опубликовать (Publish) позволяет генерировать статический контент и обновлять структуру базы данных. При этом компиляция конфигурации не выполняется. Это позволяет ускорить разработку объектов и замещающих объектов. Компиляция при публикации объекта необходима, если при редактировании встроенного процесса объекта он был сохранен, но не был опубликован в дизайнере процессов. Чтобы компилировать конфигурацию, генерировать статический контент и обновлять структуру базы данных, выберите Опубликовать и компилировать (Publish and compile) в выпадающем меню кнопки Опубликовать (Publish).

Для объекта можно установить каскадную связь. Она настраивается для колонки типа Справочник (Lookup).

Алгоритм добавления в объект колонки типа Справочник (Lookup):

  1. В контекстном меню узла Колонки (Columns) структуры объекта нажмите add_button.
  2. Для добавления колонки типа Справочник (Lookup) нажмите Справочник (Lookup).

    scr_add_lookup.png

Каскадная связь настраивается в блоке свойств Источник данных (Data source) с помощью:

  • признака Не контролировать целостность (Do not control integrity).
  • опций пункта При удалении значения справочника (On lookup value deletion).

    scr_data_source_lookup.png

Рассмотрим каскадную связь на примере объекта Контакт (Contact), который связан по справочной колонке [AccountId] с объектом Контрагент (Account). Для этого в поле Выбор объекта (Lookup) выберите Account.

Варианты настройки каскадной связи:

  • Если установлен признак Не контролировать целостность (Do not control integrity), то удаление контрагента будет выполнено. При этом не будут удалены контакты, связанные с текущим контрагентом.
  • Если не установлен признак Не контролировать целостность (Do not control integrity) и выбрана опция Блокировать удаление, если есть связанные записи в текущем объекте с этим значением (Block deletion if there are connected records in current object with this value), то удаление контрагента будет заблокировано, если присутствуют контакты, связанные с текущим контрагентом. В этом случае приложение выдаст предупреждающее сообщение. После подтверждения удаление контрагента будет выполнено. При этом не будут удалены контакты, связанные с текущим контрагентом.
  • Если не установлен признак Не контролировать целостность (Do not control integrity) и выбрана опция Удалять записи из текущего объекта с этим значением (Delete records from current object with this value), то удаление контрагента будет выполнено вместе с удалением контактов, связанных с текущим контрагентом.

Схема замещающего объекта 

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

Алгоритм разработки схемы:

  1. Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
  2. Установите зависимости пакета. В зависимости обязательно добавьте пакет, который содержит замещаемый объект.
  3. На панели инструментов реестра раздела нажмите Добавить —> Замещающий объект (Add —> Replacing object).
    scr_add_entity_schema_replaced.png
  4. В дизайнере объекта выберите родительский объект.

    Чтобы объект замещал функциональность базового объекта, в обязательном свойстве Родительский объект (Parent object) схемы укажите название той базовой схемы объекта, функциональность которой необходимо заместить. Например, для замещения функциональности базовой схемы BaseEntity в поле Родительский объект (Parent object) свойств схемы необходимо начать вводить код BaseEntity) и выбрать нужное значение из выпадающего списка. После подтверждения выбранного родительского объекта остальные свойства будут заполнены автоматически.

    scr_replacing_base_object.png
  5. В дизайнере объекта реализуйте функциональность, которая отличает замещающий объект от замещаемого.
  6. На панели инструментов дизайнера объекта нажмите Сохранить (Save) для временного сохранения изменений в метаданных схемы.
  7. На панели инструментов дизайнера объекта нажмите Опубликовать (Publish) для выполнения изменений на уровне базы данных. Результатом успешной публикации объекта являются созданные (или измененные) физические объекты в базе данных — таблица, столбцы, индексы.

Исходный код 

Схема Исходный код (Source code) используется для back-end разработки (на языке C#) в приложении Creatio.

Алгоритм разработки схемы:

  1. Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
  2. На панели инструментов реестра раздела нажмите Добавить —> Исходный код (Add —> Source code).
    scr_add_schema.png
  3. В дизайнере исходного кода заполните свойства схемы.

    Основные свойства схемы:

    • Код (Code) — название схемы (обязательное свойство). Должно содержать префикс (по умолчанию Usr), указанный в системной настройке Префикс названия объекта (код SchemaNamePrefix), символы латинского алфавита и цифры.
    • Заголовок (Title) — локализуемый заголовок схемы (обязательное свойство).
    • Пакет (Package) — пользовательский пакет, в котором создается схема. Заполняется автоматически и недоступно для редактирования.
    • Описание (Description) — локализуемое описание схемы.

    Панель свойств позволяет изменить основные свойства схемы (кнопка scr_edit_button.png) и задать дополнительные (кнопка scr_add_button.png). Дополнительным свойством является Локализуемые строки (Localizable strings).

    scr_schema_designer.png

    Для применения заданных свойств нажмите Применить (Apply).

  4. В дизайнере исходного кода добавьте исходный код. Название класса, объявленного в исходном коде, должно совпадать с названием схемы (свойство Код (Code).
  5. На панели инструментов дизайнера исходного кода нажмите Сохранить (Save) для временного сохранения изменений в метаданных схемы.
  6. На панели инструментов дизайнера исходного кода нажмите Опубликовать (Publish) для выполнения изменений на уровне базы данных.

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

Чтобы создать замещающий класс:

  1. Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлен замещающий класс.
  2. Установите зависимости пакета. В зависимости обязательно добавьте пакет, который содержит замещаемый класс.
  3. На панели инструментов реестра раздела нажмите Добавить —> Исходный код (Add —> Source code).

  4. Создайте класс, который является наследником замещаемого класса.
  5. Для класса добавьте атрибут [Override]. Описание атрибута содержится в статье Атрибут [Override].
  6. Реализуйте функциональность, которая отличает замещающий класс от замещаемого. Например, реализуйте свойства и методы, расширяющие функциональность замещаемого класса, перегрузку методов замещаемого класса и т. д.). В замещающем классе для свойств и методов добавьте модификатор override. В пользовательском замещаемом классе для свойств и методов, которые необходимо заместить, добавьте модификатор virtual. В базовом классе можно заместить только виртуальные или реализовать абстрактные методы. До компиляции все замещающие свойства и методы, которые обьявлены без использования ключего слова override, недоступны. Привязка и внедрение зависимостей типов выполняется open-source фреймворком внедрения зависимостей Ninject только во время выполнения.

Замещение конфигурационных элементов 

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

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

Замещающий конфигурационный элемент — конфигурационный элемент, который замещает другой конфигурационный элемент соответствующего типа.

Замещаемый конфигурационный элемент — конфигурационный элемент, который замещен другим конфигурационным элементом соответствующего типа.

Конфигурационные элементы, которые можно заместить в Creatio:

  • Клиентский модуль, определяющий модель представления.

    Клиентский модуль реализует front-end часть приложения. Для создания замещающего клиентского модуля необходимо использовать схему замещающей модели представления, которая описана в статье Разработка конфигурационных элементов.

  • Объект.

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

  • Исходный код.

    В качестве замещающего конфигурационного элемента выступает класс. Для создания замещающего класса необходимо использовать схему типа Исходный код (Source code), которая описана в статье Разработка конфигурационных элементов.

После реализации замещающего конфигурационного элемента при обращении к замещаемому конфигурационному элементу система будет выполнять логику замещающего конфигурационного элемента.

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