Bu makalemde iki contact varlığının merge edildiğinde çalışacak pluginin nasıl yazılacağını anlatacağım.
Merge plugini yazımında context ten bize Target ve SubordinateId diye tanımlı InputParameterelere dikkat edeceğiz.Target parametresi bize geriye kalcak varlığın bilgisini verirken , SubordinateId parametresi bize deactivate olacak ikinci varlığın bilgisini verir.
Aşağıdaki kodları incelerseniz beni daha ii anlayacaksınız.
contact1 nesnesi işlem sonunda geriye kalan contact ı
contact2 ise deactivate olan contactı simgeler.
Kaynak Kodlar
public class ContactMerge : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
Guid contact1 = Guid.Empty;
Guid contact2 = Guid.Empty;
try
{
#region Plugin Tanımlamaları
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
serviceFactory.GetType().GetProperty("ProxyTypesAssembly").SetValue(serviceFactory, typeof(XrmServiceContext).Assembly, null);
IOrganizationService crmService = serviceFactory.CreateOrganizationService(context.UserId);
if (!context.InputParameters.Contains("Target"))
return;
if (string.IsNullOrEmpty(context.MessageName))
return;
if (!context.MessageName.Equals("Merge"))
throw new Exception("Plugin executed but message was not merge");
#endregion
#region Main Code
if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is EntityReference)
{
EntityReference eTarget = (EntityReference)context.InputParameters["Target"];
contact1 = eTarget.Id;
contact2 = (Guid)context.InputParameters["SubordinateId"];
if (contact1 != Guid.Empty && contact2 != Guid.Empty)
{
Contact contact1Entity = (Contact)crmService.Retrieve("contact", contact1, new ColumnSet(new string[] { "contactid", "ite_industryid" }));
if (contact1Entity != null && contact1Entity.Id != Guid.Empty)
{
}
else
throw new Exception("Contact not found.");
}
else
throw new Exception("Contact1 or Contact2 id guid empty.");
}
else
throw new Exception("Not right type of target");
#endregion
}
catch (Exception ex)
{
throw new InvalidPluginExecutionException("An error occurred in the ContactMerge plug-in" + ex.Message);
}
}
}
Plugin Registration Tool ile MErge Plugin Deploy Etme
Plugin inize aşağıdaki step i eklemeniz yeterli olacaktır.
Hiç yorum yok:
Yorum Gönder