Перейти к содержанию

Автонумерация записей с помощью формулы, C#-скрипта или выражения N3

Введение

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

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

Здесь даны примеры настройки автоматической нумерации новых записей в шаблоне следующими способами:

Внимание!

Прикладная задача

Имеется шаблон записи «Заявки».

С шаблоном «Заявки» связан шаблон процесса «Оформление заявки».

Необходимо настроить автоматическую нумерацию заявок, создаваемых при запуске процесса «Оформление заявки».

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

Автонумерация с помощью формулы

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

Внимание!

  • Данный способ не учитывает возможность удаления записей. При удалении записей порядковые номера могут дублироваться.
  • Данный способ учитывает количество существующих записей. Новой записи будет присвоен такой порядковый номер, как если бы все предыдущие записи были тоже пронумерованы.
  1. В шаблоне записи «Заявки» создайте и поместите на форму атрибут «Номер заявки» типа «Текст».
  2. Откройте сценарий на выходе из начального события процесса «Оформление заявки» и добавьте в него действие «Изменить значения атрибутов» со следующими свойствами:

    Атрибут Операция со значениями Значение
    Номер заявки Заменить Формула:

    FORMAT("{0}",LIST(COUNT((from a in db->Zayavki select a->id))))

    Синтаксис формулы

    • FORMAT() — эта функция принимает строку с заполнителями вида {0}{N} и список значений. Функция подставляет значения из списка в соответствующие заполнители и возвращает результирующую строку.
    • LIST() — эта функция принимает перечень значений и возвращает список, состоящий из этих значений.
    • COUNT() — эта функция подсчитывает количество записей в шаблоне записи, возвращённых в запросом from a in db.
    • from a in db->Zayavki select a->id — запрос всех записей из шаблона «Заявки».
    • Zayavki — системное имя шаблона записи «Заявки».
  3. Опубликуйте диаграмму процесса.

Тестирование

  1. Создайте экземпляр процесса «Оформление заявки».
  2. При запуске процесса будет создана новая запись в шаблоне «Заявки».
  3. Новой заявке должен быть присвоен Номер заявки на 1 больше количества существующих записей в шаблоне «Заявки».

Автонумерация с помощью C#-скрипта в процессе

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

Внимание!

  • Данный способ учитывает возможность удаления записей. При удалении записей порядковые номера не дублируются.
  • Данный способ не учитывает количество существующих записей. Автонумерация начинается с заданного значения.
  1. На странице администрирования приложения выберите пункт «Переменные».
  2. Создайте переменную со следующими свойствами:

    • НазваниеПорядковый номер
    • Типчисло
    • Значение1
  3. В шаблоне записи «Заявки» создайте и поместите на форму атрибут «Номер заявки» типа «Число».

  4. В шаблоне процесса «Оформление заявки» добавьте задачу-выполнение сценария сразу после начального события.
  5. В свойствах задачи-выполнения сценария на вкладке «Дополнительные» добавьте следующий C#-скрипт:

    using System; 
    using System.Collections.Generic;
    using System.Linq;
    using Comindware.Data.Entity;
    using Comindware.TeamNetwork.Api.Data.UserCommands;
    using Comindware.TeamNetwork.Api.Data;
    public class Script
    {
    public static void Main(Comindware.Process.Api.Data.ScriptContext context, Comindware.Entities entities)
    {
    // BusinessObjectId — запись, связанная с экземпляром процесса.
    var objectId = context.BusinessObjectId;
    // Получаем значение переменной «Порядковый номер» по её ID — svar.1.
    // Присваиваем полученное значение переменной sequenceNumber.
    var sequenceNumber = (decimal)Api.Solution.SolutionVariableService.GetValue("svar.1");
    // Nomerzayavki — системное имя атрибута «Номер заявки».
    // Создаём словарь data со значением атрибута «Номер заявки»,
    // равным значению переменной «Порядковый номер».
    var data = new Dictionary<string, object>
    {
    {"Nomerzayavki", sequenceNumber}
    };
    // Zayavki — системное имя шаблона записи «Заявки».
    // Записываем значение атрибута «Порядковый номер» в текущей Заявке
    Api.TeamNetwork.ObjectService.EditWithAlias("Zayavki", objectId, data);
    // Приращиваем на 1 значение переменной «Порядковый номер»
    Api.Solution.SolutionVariableService.SetValue("svar.1", sequenceNumber+1);
    }
    }
  6. Опубликуйте диаграмму.

Тестирование

  1. Создайте экземпляр процесса.
  2. В поле атрибута «Номер заявки» должен отобразиться её порядковый номер.
  3. В свойствах переменной «Порядковый номер» значение должно увеличиться на 1.

Автонумерация с помощью C#-скрипта в сценарии

C#-скрипт также можно применять для автонумерации в сценариях.

Внимание!

  • Данный способ учитывает возможность удаления записей. При удалении записей порядковые номера не дублируются.
  • Данный способ не учитывает количество существующих записей. Автонумерация начинается с заданного значения.
  1. На странице администрирования приложения выберите пункт «Переменные».
  2. Создайте переменную со следующими свойствами:

    • НазваниеПорядковый номер
    • Типчисло
    • Значение1
  3. В шаблоне записи «Заявки» создайте и поместите на форму атрибут «Номер заявки» типа «Число».

  4. Создайте новый сценарий «Автонумерация» и настройте его событие:

    • Тип: создание записи;
    • Контекстный шаблон записи: Заявки.
  5. Добавьте действие «Изменить значения скриптом» со следующими свойствами:

    • Атрибут: Номер заявки
    • Операция со значениями: заменить
    • Значение: C#

      public class Script 
      {
      // ObjectID — запись, в контексте которой выполняется скрипт.
      public static decimal Main(string ObjectID)
      {
      // Получаем значение переменной «Порядковый номер» по её ID — svar.1.
      // Приращиваем на 1 значение переменной.
      // Присваиваем полученное значение переменной sequenceNumber.
      var sequenceNumber = (decimal) Api.Solution.SolutionVariableService.IncrementValue("svar.1");
      // Возвращаем значение sequenceNumber в указанный атрибут.
      return sequenceNumber;
      }
      }

Тестирование

  1. Создайте экземпляр записи в шаблоне «Заявки».
  2. В поле атрибута «Номер заявки» должен отобразиться её порядковый номер.
  3. В свойствах переменной «Порядковый номер» значение должно увеличиться на 1.

Автонумерация с помощью выражения N3

Внимание!

  • Данный способ учитывает возможность удаления записей. При удалении записей порядковые номера не дублируются.
  • Данный способ не учитывает количество существующих записей. Автонумерация начинается с заданного значения.
  1. На странице администрирования приложения выберите пункт «Переменные».
  2. Создайте переменную со следующими свойствами:

    • НазваниеПорядковый номер
    • Типчисло
    • Значение1
  3. В шаблоне записи «Заявки» создайте и поместите на форму атрибут «Номер заявки» типа «Число».

  4. Создайте новый сценарий «Автонумерация» и настройте его событие:

    • Тип: создание записи
    • Контекстный шаблон записи: Заявки
  5. Добавьте действие «Изменить значения атрибутов» со следующими свойствами:

    • Атрибут: Номер заявки
    • Операция со значениями: заменить
    • Значение: N3

      # Импортируем функции для работы с переменными 
      @prefix globalvariable: <http://comindware.com/ontology/variable#>.
      @prefix cmwnullable: <http://comindware.com/ontology/entity/nullable#>.

      {
      # Получаем значение переменной «Порядковый номер»
      # по её ID — svar.1 и помещаем в ?globalVar.
      "svar.1" globalvariable:getValueById ?globalVar.
      # Увеличиваем значение переменной «Порядковый номер»
      # на 1 и сохраняем в ?resultSum.
      (?globalVar 1) cmwnullable:sum ?resultSum.
      # Присваиваем переменной значение ?resultSum.
      "svar.1" globalvariable:setValue ?resultSum.
      # Передаем в атрибут значение ?globalVar (переменной до её увеличения).
      ?globalVar -> ?value.
      }

Тестирование

  1. Создайте экземпляр записи в шаблоне «Заявки».
  2. В поле атрибута «Номер заявки» должен отобразиться её порядковый номер.
  3. В свойствах переменной «Порядковый номер» значение должно увеличиться на 1.
К началу