Расширенная функциональность
06
Авг
2

Перенос Примечаний при конвертации Интереса

Как Вы знаете при преобразовании Интереса в Организацию, Контакт ил Возможную сделку не переносятся Примечания, созданные для Интереса. Но этот недостаток можно устранить с помощью плагина:

  • Создайте плагин с таким кодом:
    using System;
    using System.Diagnostics;
    using System.Linq;
    using System.ServiceModel;
    using Microsoft.Xrm.Sdk;
    using Microsoft.Xrm.Sdk.Query;
    
    namespace MapNotesFromLead
    {
        public class MapNotesFromLead : IPlugin
        {
            public void Execute(IServiceProvider serviceProvider)
            {
                IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
                IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
                IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
                Entity entity = (Entity)context.InputParameters["Target"];
    
                // Проверяем присутствует ли в создаваемой записи лукап на Интерес
                if (!entity.Attributes.Contains("originatingleadid")) return;
                Guid originatingLeadId = ((EntityReference)entity.Attributes["originatingleadid"]).Id;
    
                // Формируем запрос для возвращения Примечаний конвертируемого Интереса
                ConditionExpression condition = new ConditionExpression();
                condition.AttributeName = "objectid";
                condition.Operator = ConditionOperator.Equal;
                condition.Values.Add(originatingLeadId);
    
                FilterExpression filter = new FilterExpression();
                filter.FilterOperator = LogicalOperator.And;
                filter.Conditions.Add(condition);
    
                QueryExpression queryNotes = new QueryExpression();
                queryNotes.ColumnSet = new ColumnSet(true);
                queryNotes.EntityName = "annotation";
                queryNotes.Criteria = filter;
    
                // Выполняем запрос
                EntityCollection retrievNotes = service.RetrieveMultiple(queryNotes);
    
                // Просматриваем возвращенные Примечания, созаем такие же с привязкой созданной записи Организации, Контакта или Возможной сделки
                foreach (Entity note in retrievNotes.Entities)
                {
                    Guid noteGUID = Guid.NewGuid();
                    note.Id = noteGUID;
                    note["annotationid"] = noteGUID;
                    note["objectid"] = new EntityReference(context.PrimaryEntityName, (Guid)context.OutputParameters["id"]);
                    note["objecttypecode"] = context.PrimaryEntityName;
                    service.Create(note);
                }
            }
        }
    }
    
    • Здесь мы сначала проверяем заполнено ли у создаваемой записи Организации, Контакта или Возможной сделки лукап, ссылающийся на Интерес, из которого она была создана;
    • Затем запрашиваем все Примечания Интереса и присматриваем их;
    • На каждом шаге просмотра создаем копию Примечания при этом подставляя в лукап «В отношении» создаваемую запись.
  • Зарегистрируйте плагин в CRM на нужные Вам объекты: Организация, Контакт или Возможная сделка. Плагин универсальный, поэтому может быть зарегистрирован на любой из них (или на все сразу). Стадия должна быть Post. А вот режим может быть либо синхронный либо асинхронный.

Идем пробовать…



Комментарии (2)

*

code