Рано или поздно, но все сталкиваются с задачей создания автонумерации для своих объектов. По умолчанию в Microsoft Dynamics CRM 4.0 присутствует автонумерация для семи системных объектов (Контракты, Обращения, Статьи, Коммерческие предложения, Заказы, Счета, Кампании) и, к сожалению, для других сущностей такого нужного инструмента нет.
В этой статье я расскажу вам как создать такой автонумератор для любой сущности с помощью встроенного инструмента MS CRM – workflow (бизнес-процесс).

Идея: создать бизнес-процесс, который будет срабатывать на событие «создание записи» для нужной сущности, в определенное поле устанавливать уникальное значение счетчика, т.е. присваивать уникальный номер.

Реализация автонумератора:

  1. Создаем новую сущность Auto Number – new_autonumber. В этой сущности у нас будет храниться счетчик для одной из сущностей.
  2. Добавляем новый атрибут типа int – new_nextnumber. Наш счетчик объектов, точнее следующий номер записи.
  3. Создаем новое отношение типа 1..N, где основной объект – это наша сущность Auto Number, а связанный объект – выбираем ту сущность, для которой нам нужен счетчик. В моей случае – это кастомная сущность «Товарные издержки».
  4. Размещаем полученную связь (lookup) на нашей сущности и публикуем изменения.

Создаем новую записи счетчика (ИЗД) типа Auto Number, в которой указываем название счетчика сущности для себя и его следующее значение.

Теперь перейдет непосредственно к созданию бизнес-процесса – workflow

  1. Параметры – Бизнесс-процесс – Создать
  2. Название – «Автонумератор Товарной издержки», объект – наша сущность «Товарная издержка», Ок.
  3. Область применения – Организация, т.к. я хочу чтобы объекты, созданные пользователями из организации автоматически нумеровались, а не только мои :)
  4. Условие запуска – создание
  5. Теперь добавляем новые шаги (все будут на Обновить)
    1. Обновить: Товарная издержка и в нашей связи (лукапе) выбираем запись счетчика для издержкиautonumber-workflow32
    2. Новый шаг. Обновить: Товарная издержка. В поле test рядом с динамическим значением я добавил и просто статический текст: «ИЗД», вот такой самодельный префикс получился :) . Правда, в начале, столкнулся с проблемой: при добавлении статического текста рядом с динамическим все поле становилось просто статическим. Решение было найдено: Ошибка WF1399 Workflow compilation failed
      autonumber-workflow4
    3. Добавляем последний шаг. Обновить: autonumber (выбираем из связанных объектов сущность автонумератора). Устанавливаем в наше поле Next number (тип int) динамическое значение увелечивающееся на 1. Выбираем оператор Шаг по, вставляем в поле «значение по умолчанию» 1 – ОК.
    4. autonumber-workflow51

Общий вид бизнес-процесса автонумератора

autonumber-workflow2

Сохраняем и публикуем наш процесс и проверяем его работоспособность :)

Напомню, что workflow работают в асинхронном режиме и требуется некоторое время после создания записи для того, чтобы присвоился номер. Кстати, после синхронизации записей из Outlook номера будут созданы автоматически.

В ближайшие дни опишу вариант автонумерации для любой сущности с помощью plug-in.

UPD: пример «Автонумератора для любой сущности с помощью Plug-in«