Microsoft Dynamics CRM - Eklentiler

Eklenti, platformun standart davranışını değiştirmek veya genişletmek için Microsoft Dynamics CRM ile entegre olan özel bir iş mantığıdır. Eklentiler, olay işleyicileri olarak hareket eder ve CRM'de belirli bir olay üzerinde yürütmek için kaydedilir. Eklentiler ya C # ya da VB ile yazılır ve ya eşzamanlı ya da eşzamansız modda çalışabilir.

Bir eklenti yazacağınız bazı senaryolar şunlardır:

  • Bir CRM kaydı oluşturduğunuzda veya güncellediğinizde, bir kaydın belirli alanlarını güncellemek veya ilgili kayıtları güncellemek gibi bazı iş mantığı yürütmek istiyorsunuz.

  • Bir kaydı kaydetme veya güncelleme gibi belirli olaylarda harici bir web hizmetini aramak istiyorsunuz.

  • Herhangi bir kayıt açıldığında alan değerlerini dinamik olarak hesaplamak istiyorsunuz.

  • CRM'deki belirli olaylarda müşterilerinize e-posta göndermek gibi süreçleri otomatikleştirmek istiyorsunuz.

Etkinlik Çerçevesi

CRM'deki Olay İşleme Çerçevesi, senkronize ve senkronize olmayan eklenti isteklerini olay yürütme hattına ileterek işler. Bir olay bir eklenti mantığını tetiklediğinde, CRM Organizasyon Web Hizmetine, diğer eklentiler veya platformun herhangi bir temel işlemi tarafından okunabileceği veya değiştirilebileceği bir mesaj gönderilir.

Eklenti Ardışık Düzeni Aşamaları

Tüm eklenti ardışık düzeni, özel iş mantığınızı kaydedebileceğiniz birden çok aşamaya bölünmüştür. Belirtilen işlem hattı aşaması, eklenti çalıştırma döngüsünün hangi aşamasında, eklenti kodunuzun çalıştığını gösterir. Aşağıdaki tabloda belirtilen tüm ardışık düzen aşamaları dışında, özel eklentilerinizi yalnızca Etkinlik Öncesi ve Sonrası için kaydedebilirsiniz. Eklentileri Platform Core Main Operations'a kaydedemezsiniz.

Etkinlik Sahne adı Açıklama
Etkinlik Öncesi Ön doğrulama Ana sistem çalışmasından önce yürütülecek eklentiler için işlem hattındaki aşama. Bu aşamada kaydedilen eklentiler veritabanı işlemlerinin dışında yürütülebilir.
Etkinlik Öncesi Operasyon öncesi Ana sistem çalışmasından önce yürütülecek eklentiler için ardışık düzen içindeki aşama. Bu aşamada kaydedilen eklentiler, veritabanı işlemi içerisinde yürütülür.
Platform Çekirdek İşlemi AnaOperasyon Sistemin oluşturma, güncelleme, silme vb. Ana işlemi olan saldırı. Bu aşamada hiçbir özel eklenti kaydedilemez. İç kullanım için.
Olay sonrası Ameliyat sonrası Ana işlemden sonra yürütülecek eklentiler için işlem hattındaki aşama. Bu aşamada kaydedilen eklentiler veri tabanı işlemi içerisinde yürütülür.

CRM uygulaması bir olay başlattığında (bir kaydı kaydetme veya güncelleme gibi), aşağıdaki eylemler dizisi gerçekleşir -

  • Olay, bir Web hizmeti çağrısını tetikler ve yürütme, olay işlem hattı aşamalarından (olay öncesi, platform temel işlemleri, olay sonrası) geçirilir.

  • Bilgiler dahili olarak bir OrganizationRequest mesajı olarak paketlenir ve son olarak dahili CRM Web hizmeti yöntemlerine ve platform temel işlemlerine gönderilir.

  • OrganizationRequest mesajı ilk olarak, bilgileri platform temel işlemlerine aktarmadan önce değiştirebilen olay öncesi eklentiler tarafından alınır. Platform temel işlemlerinden sonra, mesaj OrganizationResponse olarak paketlenir ve işlem sonrası eklentilere aktarılır. Operasyon sonrası eklentileri, eşzamansız eklentiye geçmeden önce bu bilgileri isteğe bağlı olarak değiştirebilir.

  • Eklentiler, bu bilgileri, daha sonraki işlemlerin gerçekleştiği Execute yöntemine iletilen bağlam nesnesi biçiminde alır.

  • Tüm eklenti işlemleri tamamlandıktan sonra, yürütme, olayı tetikleyen uygulamaya geri gönderilir.

Eklenti Mesajları

Mesajlar, eklentinin (veya iş mantığının) kayıtlı olduğu olaylardır. Örneğin, İletişim Mesajı Oluştur varlığında bir eklenti kaydedebilirsiniz. Bu, yeni bir İlgili Kişi kaydı oluşturulduğunda iş mantığını ateşler.

Özel varlıklar için, varlığın kullanıcıya mı yoksa kuruluşa mı ait olduğuna bağlı olarak desteklenen mesajlar aşağıdadır.

Mesaj Adı Mülkiyet Türü
Atamak Yalnızca kullanıcının sahip olduğu varlıklar
Oluşturmak Kullanıcıya ait ve kuruluşa ait varlıklar
Sil Kullanıcıya ait ve kuruluşa ait varlıklar
GrantAccess Yalnızca kullanıcının sahip olduğu varlıklar
ModifyAccess Yalnızca kullanıcının sahip olduğu varlıklar
Al Kullanıcıya ait ve kuruluşa ait varlıklar
RetrieveMultiple Kullanıcıya ait ve kuruluşa ait varlıklar
RetrievePrincipalAccess Yalnızca kullanıcının sahip olduğu varlıklar
RetrieveSharedPrincipalsAndAccess Yalnızca kullanıcının sahip olduğu varlıklar
RevokeAccess Yalnızca kullanıcının sahip olduğu varlıklar
SetState Kullanıcıya ait ve kuruluşa ait varlıklar
SetStateDynamicEntity Kullanıcıya ait ve kuruluşa ait varlıklar
Güncelleme Kullanıcıya ait ve kuruluşa ait varlıklar

Varsayılan olarak kullanıma hazır varlıklar için 100'den fazla desteklenen mesaj vardır. Bu mesajlardan bazıları tüm varlıklar için geçerlidir, bazıları ise belirli varlıklara özeldir. Desteklenen mesajların tam listesini SDK içindeki bir excel dosyasında bulabilirsiniz:SDK\Message-entity support for plug-ins.xlsx

Yazma Eklentisi

Bu bölümde, bir eklenti yazmanın temellerini öğreneceğiz. Sisteme yeni bir müşteri eklendiğinde, yani CRM'de yeni bir Kişi kaydı oluşturulduğunda müşteriyi takip etmek için bir Görev etkinliği oluşturan örnek bir eklenti oluşturacağız.

Her şeyden önce, referansları eklemeniz gerekir. Microsoft.Xrm.Sdkad alanı. CRM SDK, gerekli tüm SDK derlemelerini içerir. SDK'yı Bölüm 2'de zaten indirip yüklediğinizi varsayarak, Visual Studio'yu açın. Sınıf Kitaplığı türünde yeni bir proje oluşturun. Projeyi SamplePlugins olarak adlandırabilir ve Tamam'a tıklayabilirsiniz.

Referansını ekleyin Microsoft.Xrm.Sdkprojenize montaj. Montaj mevcutSDK/Bin.

Şimdi, adlı bir sınıf oluşturun PostCreateContact.cs ve sınıfı genişletmek IPlugin. Şimdiye kadar, kodunuz aşağıdaki gibi görünecek.

Ayrıca System.Runtime.Serialization'a başvuru eklemeniz gerekecektir. Gerekli referansları ekledikten sonra, aşağıdaki koduPostCreateContact sınıf.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Xrm.Sdk;

namespace SamplePlugins {
   public class PostCreateContact:IPlugin {
      /// A plug-in that creates a follow-up task activity when a new account is created.
      /// Register this plug-in on the Create message, account entity,
      /// and asynchronous mode.

      public void Execute(IServiceProviderserviceProvider) {
         // Obtain the execution context from the service provider.
         IPluginExecutionContext context =(IPluginExecutionContext)
            serviceProvider.GetService(typeof(IPluginExecutionContext));

         // The InputParameters collection contains all the data
            passed in the message request.

         if(context.InputParameters.Contains("Target")&&
            context.InputParameters["Target"]isEntity) {
            
            // Obtain the target entity from the input parameters.
            Entity entity = (Entity)context.InputParameters["Target"];
            try {
               
               // Create a task activity to follow up with the account customer in 7 days
               Entity followup = new Entity("task");
               followup["subject"] = "Send e-mail to the new customer.";
               followup["description"] =
                  "Follow up with the customer. Check if there are any new issues
                  that need resolution.";
               
               followup["scheduledstart"] = DateTime.Now;
               followup["scheduledend"] = DateTime.Now.AddDays(2);
               followup["category"] = context.PrimaryEntityName;

               // Refer to the contact in the task activity.
               if(context.OutputParameters.Contains("id")) {
                  Guid regardingobjectid = new Guid(context.OutputParameter
                     s["id"].ToString());
                  string regardingobjectidType = "contact";
                  followup["regardingobjectid"] = 
                     new EntityReference(rega rdingobjectidType,regardingobjectid);
               }
               
               // Obtain the organization service reference.
               IOrganizationServiceFactory serviceFactory =
                  (IOrganizationSer viceFactory)serviceProvider.GetService
                  (typeof(IOrganizationServiceFactory));
               IOrganizationService service = 
                  serviceFactory.CreateOrganizationService(context.UserId);

               // Create the followup activity
               service.Create(followup);
            } catch(Exception ex) {
               throw new InvalidPluginExecutionException(ex.Message);
            }
         }
      }
   }
}

Aşağıda, bu kodun ne yaptığına dair adım adım açıklama yer almaktadır -

Step 1- IServiceProvider nesnesini parametresi olarak alarak Execute yöntemini uygular. Servis sağlayıcı, eklenti içinde kullanacağınız birçok yararlı nesneye referanslar içerir.

Step 2 - IServiceProvider'ın GetService yöntemini kullanarak IPluginExecutionContext nesnesini alır.

Step 3- Bağlam nesnesinin InputParameters koleksiyonundan hedef varlığın nesnesini alır. Bu Varlık sınıfı nesnesi, eklentimizin kaydedileceği İlgili Kişi varlık kaydına başvurur.

Step 4- Daha sonra Görev varlığının bir nesnesini oluşturur ve uygun konuyu, açıklamayı, tarihleri, kategoriyi ve ilgili nesne kimliğini ayarlar. Relatedobjectid, bu aktivite kaydının hangi ilgili kişi kaydı için oluşturulduğunu gösterir. Kodun, context.OutputParameters'ı kullanarak üst Kişi kaydının kimliğini aldığını ve bunu oluşturduğunuz Görev varlık kaydı ile ilişkilendirdiğini görebilirsiniz.

Step 5 - IServiceProvider nesnesini kullanarak IOrganizationServiceFactory nesnesini oluşturur.

Step 6 - IOrganizationServiceFactory nesnesini kullanarak IOrganizationService nesnesini oluşturur.

Step 7- Son olarak, bu hizmet nesnesinin Create yöntemini kullanarak. CRM'de kaydedilen takip aktivitesini oluşturur.

Eklenti Derlemesini İmzalama

Bu bölüm, yalnızca eklenti derlemenizi ilk kez kaydediyorsanız geçerlidir. Eklentiyi dağıtabilmek için derlemede bir anahtarla oturum açmanız gerekir. Çözüme sağ tıklayın ve Özellikler'e tıklayın.

Soldaki seçeneklerden İmzalama sekmesini seçin ve 'Montajı imzala' seçeneğini işaretleyin. Ardından, Kesin bir ad anahtarı dosyası seç seçeneğinden Yeni'yi seçin.

Anahtar dosya adını örnek eklentiler olarak girin (Bu, istediğiniz başka herhangi bir ad olabilir). Anahtar dosyamı bir parola ile koru seçeneğinin işaretini kaldırın ve Tamam'ı tıklayın. Kaydet'i tıklayın.

Son olarak çözümü oluşturun. Sağ tıklayın → Oluştur. Çözümün oluşturulması, bir sonraki bölümde bu eklentiyi kaydetmek için kullanacağımız derleme DLL'sini oluşturacaktır.

Eklentide Özel Durum İşleme

Çoğu zaman, eklenti mantığınızın çalışma zamanı istisnalarını ele alması gerekecektir. Eşzamanlı eklentiler için birInvalidPluginExecutionExceptionkullanıcıya bir hata iletişim kutusu gösterecek olan istisna. Hata iletişim kutusu, istisna nesnesinin Mesaj nesnesine ilettiğiniz özel hata mesajını içerecektir.

Kodumuza bakarsanız, catch bloğumuza InvalidPluginExecutionException istisnasını atıyoruz.

throw new InvalidPluginExecutionException(ex.Message);

Sonuç

Eklentiler, herhangi bir özel CRM uygulaması için kesinlikle çok önemlidir. Bu bölümde, olay çerçeve modelini, ardışık düzen aşamalarını, mesajları anlamaya ve örnek bir eklenti yazmaya odaklandık. Bir sonraki bölümde, bu eklentiyi CRM'ye kaydedeceğiz ve uçtan uca senaryodan çalıştığını göreceğiz.