10.01.2010Автонумерация. Еще разок
Раньше уже рассматривал возможность создания автонумерации для кастомных сущностей в 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
