serving the solutions day and night

Pages

Wednesday, March 30, 2016

Dynamics CRM - Update Contact Fullname

My client want the fullname with the suffix and custom order like LastName, FirstName Middle Name Suffix. Dynamics CRM System Settings doesn't have the option to set the custom order fullname. Contact entity fullname is readonly attribute, it won't allow to update the fullname directly.

You can update through only pre create or update operation plugin.

i created one image for pre update, it contains firstname,lastname,middlename,dns_suffix and also FilteringAttributes.
Plugin Step & image
<Plugin Description="Update Full Name with Suffix" FriendlyName="FullName" Name="DNS.VM.Plugins.FullName" Id="00000000-0000-0000-0000-000000000000" TypeName="DNS.VM.Plugins.FullName">
  <Steps>
    <clear />
    <Step CustomConfiguration="" Name="PreCreate" Description="Update Full Name" Id="00000000-0000-0000-0000-000000000000" MessageName="Create" Mode="Synchronous" PrimaryEntityName="contact" Rank="1" SecureConfiguration="" Stage="PreInsideTransaction" SupportedDeployment="ServerOnly" />
    <Step CustomConfiguration="" Name="PreUpdate" Description="Update Full Name" FilteringAttributes="firstname,lastname,middlename,dns_suffix" Id="00000000-0000-0000-0000-000000000000" MessageName="Update" Mode="Synchronous" PrimaryEntityName="contact" Rank="1" SecureConfiguration="" Stage="PreInsideTransaction" SupportedDeployment="ServerOnly">
      <Images>
<Image Attributes="firstname,lastname,middlename,dns_suffix" EntityAlias="PreImage" Id="00000000-0000-0000-0000-000000000000" MessagePropertyName="Target" ImageType="PreImage" />
      </Images>
    </Step>
  </Steps>
</Plugin>

Plugin Code
public class FullName : Plugin
{
public FullName()
   : base(typeof(FullName))
{
   base.RegisteredEvents.Add(new Tuple<int, string, string, Action<LocalPluginContext>>(20, "Create", 'contact', new Action<LocalPluginContext>(ExecutePreCreate)));
   base.RegisteredEvents.Add(new Tuple<int, string, string, Action<LocalPluginContext>>(20, "Update", 'contact', new Action<LocalPluginContext>(ExecutePreUpdate)));
}

/// Plugin steps:
/// create - contact - pre-operation - synchronous
/// update - contact - pre-operation - synchronous - filtering attributes: firstname, lastname, suffix, middlename
/// </summary>
protected void ExecutePreCreate(LocalPluginContext localContext)
{
   if (localContext == null) throw new ArgumentNullException("localContext");

   IPluginExecutionContext context = localContext.PluginExecutionContext;
   IOrganizationService service = localContext.OrganizationService;

   if (context.InputParameters != null && context.InputParameters.Contains("Target"))
   {
Entity target = (Entity)context.InputParameters["Target"];
Entity img = (context.PreEntityImages != null && context.PreEntityImages.Contains("PreImage")) ? localContext.PluginExecutionContext.PreEntityImages["PreImage"] : null;

SetFullName(target, img);
   }
}

protected void ExecutePreUpdate(LocalPluginContext localContext)
{
   if (localContext == null) throw new ArgumentNullException("localContext");

   IPluginExecutionContext context = localContext.PluginExecutionContext;
   IOrganizationService service = localContext.OrganizationService;

   if (context.InputParameters != null && context.InputParameters.Contains("Target"))
   {
Entity target = (Entity)context.InputParameters["Target"];
Entity img = (context.PreEntityImages != null && context.PreEntityImages.Contains("PreImage")) ? localContext.PluginExecutionContext.PreEntityImages["PreImage"] : null;

SetFullName(target, img);
   }
}

private void SetFullName(Entity target, Entity img)
{
   string firstName = GetValue(target, img, 'fistname');
   string lastName = GetValue(target, img, 'lastname');
   string middlename = GetValue(target, img, 'middlename');
   string suffix = string.Empty;


   //Suffix
   if (target.Attributes.Contains('dns_suffix'))
   {
if (target.Attributes['dns_suffix'] != null)
   suffix = GetSuffix(Int32.Parse(((OptionSetValue)(target.Attributes['dns_suffix'])).Value.ToString()));
   }
   else if (img != null && img.Attributes.Contains('dns_suffix'))
   {
if (img.Attributes['dns_suffix'] != null)
   suffix = GetSuffix(Int32.Parse(((OptionSetValue)(img.Attributes['dns_suffix'])).Value.ToString()));
   }

   //Full Name
   string fullName = string.Join(" ", new string[] { lastName+",", firstName, middlename, suffix }.Where(a => !string.IsNullOrWhiteSpace(a)));

   target['fullname'] = fullName;
}

private string GetValue(Entity target, Entity img, string attname)
{
string attval = string.Empty;
if (target.Attributes.Contains(attname) && target.Attributes[attname]!=null)
attval = target.Attributes[attname].ToString()
else if (img != null && img.Attributes.Contains(attname) && img.Attributes[attname] != null)
attval = img.Attributes[attname].ToString();
return attval;
}

private string GetSuffix(int value)
{
   switch (value)
   {
case 0: return "JR";
case 1: return "SR";
case 2: return "II";
case 3: return "III";
case 4: return "IV";
case 5: return "V";
case 6: return "VI";
case 7: return "VII";
default: return "";
   }
        }
}

14 comments:

Suseela said...


Great and useful article. Creating content regularly is very tough. Your points are motivated me to move on.


SEO Company in Chennai

Ancy merina said...
This comment has been removed by the author.
Anonymous said...

Новая брендовая поставка изЕвропы, сделаная из новых веществ в черном, оранжевом, красном, голубом, золтом цвете. Популярны строгие классические квадратные модели и оригинальные неформальные в манере casual, с гладкой кожей, запрашивают стеганые, с металлическими клепами, ремешками, пряжками, с кисточками и рюшками. Продукция бренда выделяется от конкуренток высоким качеством, охватывает весь спектр аксессуаров, без которых невозможно презентовать модный образ. В каталоге на нашем официальном сайте сумка 4 вы найдете более 20 артикулов самой разнообразной расцветки и дизайна. Прекрасные пастельные цвета меняются с пестрыми цветами и принтами, качесвтенная кожа с фактурной, с глбокой строчкой и еще с серебряным отблеском.

Anonymous said...

Предсказание грядущего позволяет понять, что вас подстерегает в ближайшем времени. Гадание на настоящее - шанс спрогнозировать приближающиеся явления непрерывно привлекал род человеческий. Каждый стремится просмотреть собственное будущее и воспринимает определенные варианты гадания по максимуму эффективными.

Anonymous said...

Фирма СнабТоп.ру поможет потребителям закупить тут https://snabtop.ru/ по наиболее приемлемой цене скрытых условий. Разные жилищные предприятия встречаются с проблемой приобретения разного рода контейнеров. Стройинвентарь для жилищников по самым доступным ценам.

Anonymous said...

Лучший выбор плитки способен прикрасить каждую кухню или санузел. Сфокусируйтесь не только на кафельной плитке заграничного производства, а также на местные идеи. Отбирая качественный стройматериал как ibero коллекция доведется рассмотреть максимальное число материалов. Керамическая отлично подойдет к каждому интерьеру.

Anonymous said...

Используя услуги срочный займ на карту сбербанка, вы можете самолично выбрать необходимые предложения по кредиту. Лишь надежные МФО осуществляют свою деятельность на сайте «СкороДеньги». Возьмите кредит на карту для любых целей.

Anonymous said...

Нестандартный список деяний, направленных на прогнозирование судьбы, называют хиромантия. Услуги таролога - это простой метод узнать судьбу с использованием различных атрибутов и порядков. Таинственные силы и всевозможные варианты предсказания судьбы учеными не описаны, но многочисленные люди в них верят.

Anonymous said...

Подробное меню и быстрый поиск – это надежный путь найти необходимую онлайн игру. Всего лишь на текущей платформе casino x официальный казино вы сможете нырнуть в сказочные приключения. Колесо фортуны – самый-самый популярный слот в числе виртуальных игрушек KazinoX.

Anonymous said...

Прямая и гладенькая плоскость довольно просто протирается. Если вы решили купить плитку в магазине Сотни.ру, необходимо просто просмотреть главную страницу сайта фирмы. Каждый клиент, приобретая кафель в интернет-магазине cerrad aragon brick, получает в самом деле классный товар. Отделывают стены и пол керамикой прежде всего вследствие её физических свойств.

Anonymous said...

Приобрести морские деликатесы http://palz.one/index.php?title=%D0%9F%D0%BE%D0%BA%D1%83%D0%BF%D0%B0%D0%B9%D1%82%D0%B5%20%D0%BC%D0%BE%D0%BB%D0%BB%D1%8E%D1%81%D0%BA%D0%BE%D0%B2%20%D1%83%20%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%B5%D0%BD%D0%BD%D1%8B%D1%85%20%D0%BF%D1%80%D0%BE%D0%B4%D0%B0%D0%B2%D1%86%D0%BE%D0%B2%20%D0%B2%20%D0%BD%D0%BE%D0%B2%D0%B5%D0%B9%D1%88%D0%B5%D0%BC%20%D0%BE%D0%BD%D0%BB%D0%B0%D0%B9%D0%BD-%D0%BC%D0%B0%D0%B3%D0%B0%D0%B7%D0%B8%D0%BD%D0%B5%20%D0%BC%D0%BE%D1%80%D0%B5%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D0%BE%D0%B2%20%C2%AB%D0%9A%D1%80%D0%B0%D1%81%D0%BD%D1%8B%D0%B9%20%D0%B6%D0%B5%D0%BC%D1%87%D1%83%D0%B3%C2%BB можно в розницу или незначительной партией. Поставка осуществляется прямо указанное время. В целях оформления заказа на рыбу в любом числе нужно обратиться к администратору или сделать удаленный заказ именно на сайте redgmshop.ru.

Anonymous said...

Всевозможные методы ворожбы называются как эзотерика. Любой способ ворожбы исключителен и необходим для разного рода результатов. Гадание на рунах на ситуацию и подлинность предсказаний будущего прямо зависит от практики гадающего. Каждый мечтает знать собственную судьбу и видит определенные методы предсказания судьбы по максимуму эффективными.

Anonymous said...

https://joomlaux.com/forum/user/98954-ebyvapiji.html

Anonymous said...

Неопытный пользователь не сумеет настроить проектор, необходим серьезный набор навыков. На главной странице https://www.projector24.ru/proektory/optoma-s-podderzhkoy-wi-fi/ расположено несколько толковых статей по подбору медиапроекторов. До приобретения проекционной установки довольно просто оценить демонстрацию преимуществ установки.