CRM 2011 Plugin - Merge Plugin Yazımı

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