Добавить автонумерацию к полю на странице добавления записи (back-end)

Сложный

Пример. Добавить автонумерацию к полю Код (Code) страницы добавления продукта. Шаблон номера: ART_0000N, где N = 1, 2, и т. д. Автонумерацию реализовать на стороне back-end.

1. Создать системные настройки 

  1. Создайте системную настройку с маской кода продукта.

    1. Перейдите в дизайнер системы по кнопке .
    2. В блоке Настройка системы (System setup) перейдите по ссылке Системные настройки (System settings).
    3. На панели инструментов раздела нажмите на кнопку Добавить настройку (Add setting).
    4. Заполните свойства системной настройки.

      • Название (Name) — "Маска кода продукта" ("Product code mask").
      • Код (Code) — "ProductCodeMask".
      • Тип (Type) — выберите "Строка неограниченной длины" ("Unlimited length text").
      • Значение по умолчанию (Default value) — "ART_{0:00000}".
  2. Создайте системную настройку с текущим кодом продукта.

    1. Перейдите в дизайнер системы по кнопке .
    2. В блоке Настройка системы (System setup) перейдите по ссылке Системные настройки (System settings).
    3. На панели инструментов раздела нажмите на кнопку Добавить настройку (Add setting).
    4. Заполните свойства системной настройки.

      • Название (Name) — "Текущий код продукта" ("Product last number").
      • Код (Code) — "ProductLastNumber".
      • Тип (Type) — выберите "Целое число" ("Integer").

2. Создать схему замещающего объекта 

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

  3. Заполните свойства схемы.

    • Код (Code) — "Product".
    • Заголовок (Title) — "Продукт" ("Product").
    • Родительский объект (Parent object) — выберите "Product".
  4. В схему добавьте событие.

    1. Перейдите в узел События (Events) структуры объекта.
    2. В блоке Добавление (Adding) установите признак Перед добавлением записи (Before record added). Событию присвоено имя ProductInserting.

    3. На панели инструментов дизайнера объектов нажмите Сохранить (Save).
  5. Реализуйте событийный подпроцесс.

    1. На панели инструментов дизайнера объектов нажмите Открыть процесс (Open process).
    2. В области элементов дизайнера нажмите Действия системы (System actions) и разместите элемент Событийный подпроцесс (Event sub-process) в рабочей области дизайнера процессов.

    3. На панели настройки элементов заполните свойство Заголовок (Title) — "Product Inserting Sub-process".
    4. Настройте элементы событийного подпроцесса.

      1. Настройте начальное событие Сообщение (Message).

        • Заголовок (Title) — "Before product adding".
        • При получении какого сообщения запускать процесс? (Which message event should start the process?) — "ProductInserting".
      2. Добавьте логический оператор Исключающее "ИЛИ" (Exclusive gateway (OR)).

        Для этого в меню начального события Сообщение (Message) выберите Исключающее "ИЛИ" (Exclusive gateway (OR)).

      3. Добавьте действие системы Задание-сценарий (Script task).

        1. В области элементов дизайнера нажмите Действия системы (System actions) и разместите действие системы Задание-сценарий (Script task) в рабочей области подпроцесса.

        2. Действию системы Задание-сценарий (Script task) добавьте имя "Определить схему объекта для генерации номера" ("Get entity schema to generate number").
        3. Добавьте код действия системы Задание-сценарий (Script task).

          Код действия системы Задание-сценарий (Script task)
          /* Установка схемы для генерации номера. */
          UserTask1.EntitySchema = Entity.Schema;
          return true;
          

          UserTask1 — код действия системы Выполнить действие процесса (User task) Выполнить генерацию номера (Generate number), настройка которого описана на следующем шаге. Изменить код можно в расширенном режиме настройки действия системы Выполнить действие процесса (User task).

        4. На панели инструментов дизайнера процессов нажмите Сохранить (Save).
      4. Добавьте действие системы Выполнить действие процесса (User task).

        1. В области элементов дизайнера нажмите Действия системы (System actions) и разместите действие системы Выполнить действие процесса (User task) в рабочей области подпроцесса.

        2. Заполните свойства действия системы.

          • Заголовок (Title) — "Выполнить генерацию номера" ("Generate number").
          • Какое пользовательское действие выполнить? (Which user task to perform?) — выберите "Generate ordinal number". Системное действие генерирует текущий порядковый номер в соответствии с маской, которая установлена в системной настройке ProductCodeMask.
      5. Добавьте действие системы Задание-сценарий (Script task).

        1. В области элементов дизайнера нажмите Действия системы (System actions) и разместите действие системы Задание-сценарий (Script task) в рабочей области подпроцесса.

        2. Действию системы Задание-сценарий (Script task) добавьте имя "Записать полученный номер в колонку объекта" ("Save number to entity column").
        3. Добавьте код действия системы Задание-сценарий (Script task).

          Код действия системы Задание-сценарий (Script task)
          Entity.SetColumnValue("Code", UserTask1.ResultCode);
          return true;
          
        4. На панели инструментов дизайнера процессов нажмите Сохранить (Save).
      6. Добавьте событие Останов (Terminate).

        Для этого в области элементов дизайнера нажмите Останов (Terminate) и разместите событие в рабочей области подпроцесса.

    5. Настройте потоки.

      1. Настройте условный поток между логическим оператором Исключающее "ИЛИ" (Exclusive gateway (OR)) и действием системы Определить схему объекта для генерации номера (Get entity schema to generate number).

        1. В меню логического оператора Исключающее "ИЛИ" (Exclusive gateway (OR)) нажмите на кнопку и соедините логический оператор Исключающее "ИЛИ" (Exclusive gateway (OR)) с действием системы Определить схему объекта для генерации номера (Get entity schema to generate number).
        2. Заполните свойства условного потока.

          • Заголовок (Title) — "Код не заполнен" ("Code is empty").
          • Условие перехода (Condition to move down the flow).

            1. На панели настройки элементов в свойстве Условие перехода (Condition to move down the flow) нажмите кнопку .
            2. Задайте формулу.

              string.IsNullOrEmpty(Entity.GetTypedColumnValue<string>("Code"))
              
            3. Сохраните изменения.
      2. Настройте поток по умолчанию между логическим оператором Исключающее "ИЛИ" (Exclusive gateway (OR)) и событием Останов (Terminate).

        1. В меню логического оператора Исключающее "ИЛИ" (Exclusive gateway (OR)) нажмите на кнопку и соедините логический оператор Исключающее "ИЛИ" (Exclusive gateway (OR)) с событием Останов (Terminate).
        2. Трансформируйте поток управления в поток по умолчанию. Для этого в меню потока нажмите —> Поток по умолчанию (Default flow).

      3. Настройте потоки управления.

        1. В меню действия системы Определить схему объекта для генерации номера (Get entity schema to generate number) нажмите на кнопку и соедините действие системы Определить схему объекта для генерации номера (Get entity schema to generate number) с действием системы Выполнить генерацию номера (Generate number).
        2. В меню действия системы Выполнить генерацию номера (Generate number) нажмите на кнопку и соедините действие системы Выполнить генерацию номера (Generate number) с действием системы Записать полученный номер в колонку объекта (Save number to entity column).

    Событийный подпроцесс представлен на рисунке ниже.

  6. На панели инструментов дизайнера процессов нажмите Сохранить (Save), а затем Опубликовать (Publish).

Результат выполнения примера 

Чтобы посмотреть результат выполнения примера:

  1. Очистите кэш браузера.
  2. Обновите страницу раздела Продукты (Products).
  3. Добавьте и сохраните новый продукт (например, Test product).

     

Автогенерация кода и его сохранение в колонку выполняется на стороне сервера при возникновении события Перед сохранением записи (Before Record Saved), которое возникает на стороне сервера после отправки запроса на добавление записи из front-end части. Поэтому значение кода невозможно сразу отобразить на странице добавления продукта. Номер отобразится после сохранения продукта.

В результате выполнения примера добавлена автонумерацию к полю Код (Code) страницы продукта.