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.