Кастомный формат 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.