Раньше уже рассматривал возможность создания автонумерации для кастомных сущностей в Microsoft Dynamics CRM 4.0 сегодня приложу просто еще один вариант автонумерации для одной сущности, реализуемой с помощью плагина.

Задача: необходимо реализовать автонумерацию сущности «Лист согласования», создаваемую из сущности «Договор» со следующем форматом: ГГММДД – ХХХ, где ГГММДД – Дата создания записи, а ХХХ – количество созданных листов согласования по этому договору + 1.

Основной код плагина автонумерации:


ICrmService crmService = context.CreateCrmService(true);

//Если лист согласования
if (entity.Name == "new_list_soglasovaniya")
{

//Если договор Договор (создается из договора)

if (entity.Properties.Contains("new_regardingobjectid"))

{

//получаю список листов согласования, по текущему договору

ColumnSet cs = new ColumnSet();

cs.Attributes.AddRange(new string[] { "createdon" });

ConditionExpression conditionId = new ConditionExpression();

conditionId.AttributeName = "new_regardingobjectid";

conditionId.Operator = ConditionOperator.Equal;

conditionId.Values = new string[]{ ((Lookup)entity.Properties["new_regardingobjectid"]).Value.ToString()};

FilterExpression filter = new FilterExpression();

filter.FilterOperator = LogicalOperator.And;

filter.Conditions.Add(conditionId);

QueryExpression query = new QueryExpression();

query.EntityName = "new_list_soglasovaniya";

query.ColumnSet = cs;

query.Criteria = filter;

RetrieveMultipleRequest retrieve = new RetrieveMultipleRequest();

retrieve.Query = query;

retrieve.ReturnDynamicEntities = true;

RetrieveMultipleResponse retrieved = (RetrieveMultipleResponse)crmService.Execute(retrieve);

string countLists;

//номер текущей записи

countLists = (retrieved.BusinessEntityCollection.BusinessEntities.Count + 1).ToString();

//формирую вывод

while (countLists.Length < 3)

{

countLists = "0" + countLists;

}

string new_number;

new_number = DateTime.Now.Year.ToString().Substring(2, 2) + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + "-" + countLists.ToString();

//присваиваю полю new_number мой полученный номер

entity.Properties.Add(new StringProperty("new_number", new_number));

}

Данные для регистрации плагина

Register New Step:

  • Message: Create
  • Primary Entity: new_list_soglasovaniya
  • Execution order: 1
  • Eventing Pipeline Stage of Execution: Pre

Полезные ссылки: