cub-e.net

just coding...

Plug-in Registration Tool’u Kullanmak

Ilk plug-in’imizi yazdıktan sonra geldi onu CRM içerisine eklemeye. Bu işlem için Plugin Registration Tool dediğimiz CRM SDK içerisinden cikan bir uygulamayi kullanacagiz. Bu uygulama sayesinde hem plug-in hem de custom workflow’lari CRM içerisine ekleyebilmekteyiz.

 

SDK\Tools\PluginRegistration\PluginRegistration.exe yolu ile ulaşabileceğiniz uygulamayi calistirdiginizda sizden bağlanmak istediğiniz server ile ilgili bilgileri isteyecektir.

 

Dynamics CRM Online için Online’i seçebilirsiniz ama unutmayin ki Office 365 hesabi kullaniyorsaniz Office 365’i seçmeniz gerekmekte. Ikisi de Online ama yetki mekanizmaları farkli.

 

Eger On-Premises yani Microsoft disinda host edilen bir CRM’e erişmek istiyorsaniz o zaman On-Premises seçeneğini seçmeniz gerekmekte. IFD’ler için de bu seçeneği kullanabilirsiniz.


 

Eger “Always display list of available orgs” seçeneğiniz seçerseniz bağlanmak istediğiniz kullanici ile erişebileceğiniz organizasyonlarin listesini görüntüleyebilirsiniz.

Basarili bir sekilde giriş yaptiginizda asagidaki gibi bir ekran karsiniza gelecektir.


 

1.       Plug-in’i sisteme kayit edebilmek için yukarıdaki “Register” düğmesine tikliyoruz ve ardindan “Register New Assembly” ‘ ye tikliyoruz.

2.       Step#1 bolumundeki … düğmesine tikliyarak kayit ettirmek istediğimiz .dll’i seçiyoruz.


          


3.       Step#2 bolumunde kaydetmek istediğimiz plug-in class’ini seçiyoruz.

4.       Step#3 bolumunde 2 tane seçeneğimiz bulunmakta;

a.       Sandbox : Bu seçeneği seçer isek plug-in bir Sandbox içerisinde calisacak yani dis ortamdan izole edilecek. Boylece bu plugin sistem içerisinde calisacak ama sisteme zarar veremeyecek ve izlenebilir olacak. Kisacasi yazdiginiz bir plug-in production ortamina tasimadan once test etmek için bu senecegi kullaniyoruz.

b.      None : hiçbir kisitlama olmadan .dll içerisindeki kodlar icra edilir.

5.       Step#4 bolumunde ise plug-in nerede duracagini seçmemizi istemekte.

a.       Database: tavsiye edilen yöntem budur. Boylece dll işletim sistemi kaynakli sorunlardan izole edilir. Veritabani yedeklendikçe dll de içinde olduğundan yedeklenecektir ve herhangi bir durumda geriye dönmenizi sağlar.

b.      Disk: Sistemin varsayilan dll yerleştirme yeri olan CRM Kurulum Yolu\Server\bin\assembly klasörü içerisinden dll’i okur.

c.       GAC: Global Assembly Cache üzerinden dll’leri okur.


Bu noktada bir not ileteyim eger server üzerinde calisan kodu debug etmek isterseniz yine server\bin\assembly klasörüne .pdb uzantili debug symbol’lerinizi yerleştirmeniz gerekmekte.

 

Ikinci bir not da eger serverda custom code execution kapaliysa açmak için server üzerinde powershell ile su kodlari calistirmaniz gerekmekte:

 

Add-PSSnapin Microsoft.Crm.PowerShell

$setting = get-crmsetting customcodesettings

$setting.AllowExternalCode="True"

 

Degerleri kontrol etmek için bu komutlari calistirabilirsiniz :

set-crmsetting $setting

get-crmsetting customcodesettings

 

Ayarlari tersine çevirmek için “AllowExternalCode”’a “False” değerini vermeniz yeterli.


Butun bu adimlari tamamladıktan sonra “Register Selected Plugin” düğmesine tikliyoruz. Plug-in kaydetmediki ilk adimi gerçekleştirmiş olduk sira diğer adimlarda :)

 

Bu noktada plug-in’i hangi event(ler) için yazdiysak onun için adim(lar) eklememiz gerekiyor. Plug-in anlatirken hep bir olay olduğunda yani veritabanina bir kayit eklendiğinde, silindiğinde ya da bir alani güncellendiğinde tetiklenebilir gibi orneklerle anlatıyoruz ama aslinda olay bundan daha derin gelin simdi custom entity’ler için yani bizim oluşturduğunuz varliklar için sistem üzerinde nasil olaylarin tetiklenmelerini yakalayabiliyoruz. Literaturde bu konu message olarak geçmekte yani CRM eventlarina mesaj adi verilmekte.

 

Message Name

Ownership Type

Message Availability

Entity Supported Deployment

Assign

User-owned entities only

Server

Server

Create

User-owned and organization-owned entities

Both

Server

Delete

User-owned and organization-owned entities

Both

Server

GrantAccess

User-owned entities only

Server

Server

ModifyAccess

User-owned entities only

Server

Server

Retrieve

User-owned and organization-owned entities

Both

Server

RetrieveMultiple

User-owned and organization-owned entities

Both

Server

RetrievePrincipalAccess

User-owned entities only

Both

Server

RetrieveSharedPrincipalsAndAccess

User-owned entities only

Both

Server

RevokeAccess

User-owned entities only

Server

Server

SetState

User-owned and organization-owned entities

Both

Server

SetStateDynamicEntity

User-owned and organization-owned entities

Both

Server

Update

User-owned and organization-owned entities

Both

Server

 

Listede de yer aldigi gibi Retrieve, RetrieveMultiple yani veritababindna sorgulama ya da SetState yani bir kaydin durumun değişmesi gibi birçok farkli mesaj için plug-in’i tetikletebilmekteyiz.

 

Lutfen sunu unutmayin yukarıdaki liste sadece custom entity’ler için campaign, campaignactivity, list gibi entity’ler için farkli mesajlar da mevcut tum listeye SDK içindeki “Message-entity support for plug-ins.xlsx” isimli dosyadan ulaşabilirsiniz.

 

Simdi yeni bir adim ekleyerek bir mesaj için plug-in’imizin tetiklenmesini saglayalim. Bunun için plug-in üzerinde sag tuşa tıklayarak ya da yukarıdaki “Register” düğmesine tıklayarak acilan menüden “Register New Step”’e tikliyoruz. Karsimiza asagidaki gibi bir pencere cikacak:


 

Message:  Yukarida bahsettigim mesajlardan birini buraya yazabilirsiniz. Hangi mesaji yazarsaniz plug-in bu olay icin calisacak. Create/Update gibi mesaj isimleri yazarken otomatik olarak tamamlamaya calistigini göreceksiniz. Her bir mesaj icin ayri step’ler tanimlaniz gerekmektedir.

Primary Entity: Bu plug-in hangi entity yani varlik üzerinde calisacak. Buraya account, contact gibi bir varlik adi yazabilirsiniz.

Secondary Entity: Bu plug-in’i ikinci bir varlik icin tanıtacaksak buraya yazabiliriz.

Event Pipeline Stage of Execution: Bu kisimda plug-in’i pre yani veri veritabanina gitmeden mi calistiracagiz yoksa post yani kaydedildikten sonra mi calistiracagiz bunu seçiyoruz.

Execution Mode: (sadece post da ikisinden birini seçebilmekteyiz) kod senkron yani sistemde kullanici ile etkileşimli ayni anda mi hareket etsin yoksa asenkron yani kullanicidan bagimsiz arka tarafta sessizce mi calissin bunu seciyoruz.

Deployment: Bu kod server da mı calissin yoksa Outlook client gibi offline modda da calissin seçeneğidir.

 

Bu yukarida acikladigim bolumler standart ayarlar. Yani her plug-in step’i tanimladigimizda mutlaka bakmamiz gereken ayarlar. Ekranda bir de farkli ayarlar var onlara da bakalim.


Event Handler: Bu kodun calismaya baslayacagi class’in seçildiği yerdir. Cok değişik bir hareket yapmadiginiz surece zaten plugin registration tool otomatik bir sekilde “Execute” metodunu görecek ve orayi seçecektir.

Name: Sistem bu step icin otomatik bir atamakta ama değiştirmek isterseniz buradan yapabilirsiniz.

Run in User’s Context: Belki dokunmaniz gereken noktalardan biri olabilir. Bu kodu hangi kullanici yetkileriyle calistirmak istiyorsaniz onu seçebilirsiniz. Standartta ayari “Calling User” yani hangi kullanici bu işlemi yaparsa seçilidir.

ExecutionOrder: eger ayni varlik içinde ve ayni mesaj icin başka bir plug-in daha varsa buraya sira numaralari vererek hangisini once-sonra calisacagini belirleyebilirsiniz.

 

Unsecure ve Secure Configuration’larin ne ise yaradigina zaten “Plug-in Yapici Metodlari” basligi altinda değinmiştim.

 

Butun gerekli ayarlamalari yaptıktan sonra en allta bulunan “Register New Step” düğmesine tıklayarak işlemi tamamlıyoruz.  Artik plug-in’i test edebilirsiniz.

Loading