Рано или поздно, но все сталкиваются с задачей создания автонумерации для своих объектов. По умолчанию в Microsoft Dynamics CRM 4.0 присутствует автонумерация для семи системных объектов (Контракты, Обращения, Статьи, Коммерческие предложения, Заказы, Счета, Кампании) и, к сожалению, для других сущностей такого нужного инструмента нет.
В этой статье я расскажу вам как создать такой автонумератор для любой сущности с помощью встроенного инструмента MS CRM – workflow (бизнес-процесс).
Идея: создать бизнес-процесс, который будет срабатывать на событие «создание записи» для нужной сущности, в определенное поле устанавливать уникальное значение счетчика, т.е. присваивать уникальный номер.
Реализация автонумератора:
- Создаем новую сущность Auto Number – new_autonumber. В этой сущности у нас будет храниться счетчик для одной из сущностей.
- Добавляем новый атрибут типа int – new_nextnumber. Наш счетчик объектов, точнее следующий номер записи.
- Создаем новое отношение типа 1..N, где основной объект – это наша сущность Auto Number, а связанный объект – выбираем ту сущность, для которой нам нужен счетчик. В моей случае – это кастомная сущность «Товарные издержки».
- Размещаем полученную связь (lookup) на нашей сущности и публикуем изменения.
Создаем новую записи счетчика (ИЗД) типа Auto Number, в которой указываем название счетчика сущности для себя и его следующее значение.
Теперь перейдет непосредственно к созданию бизнес-процесса – workflow
- Параметры – Бизнесс-процесс – Создать
- Название – «Автонумератор Товарной издержки», объект – наша сущность «Товарная издержка», Ок.
- Область применения – Организация, т.к. я хочу чтобы объекты, созданные пользователями из организации автоматически нумеровались, а не только мои
- Условие запуска – создание
- Теперь добавляем новые шаги (все будут на Обновить)
- Обновить: Товарная издержка и в нашей связи (лукапе) выбираем запись счетчика для издержки

- Новый шаг. Обновить: Товарная издержка. В поле test рядом с динамическим значением я добавил и просто статический текст: «ИЗД», вот такой самодельный префикс получился
. Правда, в начале, столкнулся с проблемой: при добавлении статического текста рядом с динамическим все поле становилось просто статическим. Решение было найдено: Ошибка WF1399 Workflow compilation failed

- Добавляем последний шаг. Обновить: autonumber (выбираем из связанных объектов сущность автонумератора). Устанавливаем в наше поле Next number (тип int) динамическое значение увелечивающееся на 1. Выбираем оператор Шаг по, вставляем в поле «значение по умолчанию» 1 – ОК.

- Обновить: Товарная издержка и в нашей связи (лукапе) выбираем запись счетчика для издержки
Общий вид бизнес-процесса автонумератора
Сохраняем и публикуем наш процесс и проверяем его работоспособность
Напомню, что workflow работают в асинхронном режиме и требуется некоторое время после создания записи для того, чтобы присвоился номер. Кстати, после синхронизации записей из Outlook номера будут созданы автоматически.
В ближайшие дни опишу вариант автонумерации для любой сущности с помощью plug-in.
UPD: пример «Автонумератора для любой сущности с помощью Plug-in«


31.07.2009 в 14:25
привет. отличная статья спасибо.
хотела посоветоваться –
а как можно сделать чтобы и префикс был динамическим
пример: в opportunity, есть доп поле Компания, так вот если Компания = А, то Код сделки = А-01, есть Компания B, то код сделки B=02 и т.д.
просто из статьи не поняла удалось ли сделать префикс или нет)
31.07.2009 в 14:40
Привет.
Доп. поле «Компания» – это ваше кастомное поле или пиклист? Если это Ваше поле, то Вы можете использовать его значение добавив его как динамическое на втором шаге