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 Code
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>
<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 "";
}
}
}
{
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 "";
}
}
}
11 comments:
Новая брендовая поставка изЕвропы, сделаная из новых веществ в черном, оранжевом, красном, голубом, золтом цвете. Популярны строгие классические квадратные модели и оригинальные неформальные в манере casual, с гладкой кожей, запрашивают стеганые, с металлическими клепами, ремешками, пряжками, с кисточками и рюшками. Продукция бренда выделяется от конкуренток высоким качеством, охватывает весь спектр аксессуаров, без которых невозможно презентовать модный образ. В каталоге на нашем официальном сайте сумка 4 вы найдете более 20 артикулов самой разнообразной расцветки и дизайна. Прекрасные пастельные цвета меняются с пестрыми цветами и принтами, качесвтенная кожа с фактурной, с глбокой строчкой и еще с серебряным отблеском.
Фирма СнабТоп.ру поможет потребителям закупить тут https://snabtop.ru/ по наиболее приемлемой цене скрытых условий. Разные жилищные предприятия встречаются с проблемой приобретения разного рода контейнеров. Стройинвентарь для жилищников по самым доступным ценам.
Лучший выбор плитки способен прикрасить каждую кухню или санузел. Сфокусируйтесь не только на кафельной плитке заграничного производства, а также на местные идеи. Отбирая качественный стройматериал как ibero коллекция доведется рассмотреть максимальное число материалов. Керамическая отлично подойдет к каждому интерьеру.
Используя услуги срочный займ на карту сбербанка, вы можете самолично выбрать необходимые предложения по кредиту. Лишь надежные МФО осуществляют свою деятельность на сайте «СкороДеньги». Возьмите кредит на карту для любых целей.
Нестандартный список деяний, направленных на прогнозирование судьбы, называют хиромантия. Услуги таролога - это простой метод узнать судьбу с использованием различных атрибутов и порядков. Таинственные силы и всевозможные варианты предсказания судьбы учеными не описаны, но многочисленные люди в них верят.
Подробное меню и быстрый поиск – это надежный путь найти необходимую онлайн игру. Всего лишь на текущей платформе casino x официальный казино вы сможете нырнуть в сказочные приключения. Колесо фортуны – самый-самый популярный слот в числе виртуальных игрушек KazinoX.
Прямая и гладенькая плоскость довольно просто протирается. Если вы решили купить плитку в магазине Сотни.ру, необходимо просто просмотреть главную страницу сайта фирмы. Каждый клиент, приобретая кафель в интернет-магазине cerrad aragon brick, получает в самом деле классный товар. Отделывают стены и пол керамикой прежде всего вследствие её физических свойств.
Приобрести морские деликатесы 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.
Всевозможные методы ворожбы называются как эзотерика. Любой способ ворожбы исключителен и необходим для разного рода результатов. Гадание на рунах на ситуацию и подлинность предсказаний будущего прямо зависит от практики гадающего. Каждый мечтает знать собственную судьбу и видит определенные методы предсказания судьбы по максимуму эффективными.
Неопытный пользователь не сумеет настроить проектор, необходим серьезный набор навыков. На главной странице https://www.projector24.ru/proektory/optoma-s-podderzhkoy-wi-fi/ расположено несколько толковых статей по подбору медиапроекторов. До приобретения проекционной установки довольно просто оценить демонстрацию преимуществ установки.
Post a Comment