Разработка
05
Сен
0

Кастомный формат FullName

Как Вы знаете CRM поддерживает ограниченный и предзаданный набор форматов полного имени (Full Name) для Контактов, Интересов и Пользователей.

Если же Вам нужно выйти за рамки этого набора, то можно воспользоваться таким плагином:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using System.Runtime.Serialization;

namespace FullNameFormat
{
    public class Class1 : IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
            IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            IOrganizationService service = factory.CreateOrganizationService(context.UserId);

            // Получаем переданные данные
            if (!context.InputParameters.Contains("Target")) { return; }
            Entity target = context.InputParameters["Target"] as Entity;
            if (target == null) { return; }

            string salutation = null;
            string firstName = null;
            string lastName = null;
            
            // Если задан пре-снимок, то вытаскиваем из него исходные значения и помещаем их в переменные
            if (context.PreEntityImages.Contains("Image") && context.PreEntityImages["Image"] is Entity)
            {
                Entity pre = context.PreEntityImages["Image"];
                if (pre.Contains("salutation")) salutation = pre["salutation"].ToString();
                if (pre.Contains("firstname")) firstName = pre["firstname"].ToString();
                if (pre.Contains("lastname")) lastName = pre["lastname"].ToString();
            }

            // Если в таргете пришли измененные значения - помещаем их в переменные
            if (target.Contains("salutation")) salutation = target["salutation"].ToString();
            if (target.Contains("firstname")) firstName = target["firstname"].ToString();
            if (target.Contains("lastname")) lastName = target["lastname"].ToString();

            // Соединяем salutation, firstName и lastName (игнорируя пустые занчения) 
            string fullName = string.Join(" ", new string[] { salutation, firstName, lastName }
                .Where(a => !string.IsNullOrWhiteSpace(a)));

            // Подставляем fullName в target
            target["fullname"] = fullName;
        }
    }
}

Плагин составляет имя из Приветствия, Имени и Фамилии. Если есть первоначальные значения в этих полях (получаем их из снимка Пре), то записываем их в переменные. Далее в эти же переменные перезаписываем значения этих полей переданные в таргете. Итоговое значение подставляем обратно в таргет.

Плагин необходимо зарегистрировать на два сообщения Create и Update (на Пре, синхронно). Для сообщения Update зарегистрируйте снимок на пре с именем Image и тремя полями salutation, firstname, lastname. Плагин на Update также должен срабатывать на изменение этих трех полей: salutation, firstname, lastname.



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

*

code