Web uygulamalarının istemci (client) tarafında birtakım işlemleri gerçekleştirmesi sunucunun (server) daha rahat çalışmasını sağlayacaktır. Dynamics CRM'de bir web tabanlı bir mimariye sahip olduğu için bu durum onda da geçerli. DOM nesne modelinde her HTML elemanı bir nesne olduğu için DHTML programlama teknikleri ile CRM'in formlarına ve nesnelerine erişip işlemler gerçekleştirebilirsiniz.
CRM'in SDK'sı içerisinde "Client Extensions and Scripting" bölümü altında detaylı bilgilerini bulabileceğiniz metot, olay ve nesneleri bir arada bulabileceğiniz bir yazı hazırladım size.
| 1 |
Genel Değişkenler |
| |
Değişken |
Açıklama |
| SERVER_URL |
CRM Web Server'ın URL'sini döndürür |
| USER_LANGUAGE_CODE |
Kullanıcının dil kodunu döndürür |
| ORG_LANGUAGE_CODE |
Organizasyonun dil kodunu döndürür |
| ORG_UNIQUE_NAME |
Organizasyonun adını döndürür |
| 2 |
Genel Metotlar |
| |
Metot |
Açıklama |
| IsOnline |
Eğer kullanıcı online olarak sistemi kullanıyorsa true döndürür (Outlook client ile ofline kullanma özelliği mevcuttur) |
| IsOutlookClient |
Kullanıcı Microsoft Dynamics CRM for Outlook ile sisteme ulaşıyorsa true döndürür |
| IsOutlookLaptopClient |
Kullanıcı Microsoft Dynamics CRM for Outlook with Offline Access ile sisteme ulaşıyorsa true döndürür |
| 3 |
Genel Olaylar |
| |
Olay |
Açıklama |
| OnLoad |
Form Browser'a yüklendiğinde icra edilir. Bu olayı kullanrak form üzerinde kullanıcının karşısına gelmeden istediğiniz değişikliği yapabilrsiniz |
| OnSave |
Kullanıcı Save, Save and Close ya da Save and New düğmelerine tıkladığında çalışan olaydır. Bu olay form servera gönderilmeden çalışır ve eğer istemediğiniz bir değer varsa form üzerinde, servera gidişi iptal edebilirsiniz. Eğer kaydetme işlemini iptal etmek istiyorsanız event.returnValue = false; kodunu çalıştırmalısınız. |
Genel değişkenler ve metotları gördükten sonra şimdi nesnelerimizi içinde barındıran crmForm isimli formumuza ait neler varmış bir bakalım.
| 1 |
crmForm Özellikler |
| |
Özellik |
Açıklama |
| All |
Form nesneleri kolleksiyonu |
| IsDirty |
Formda değişiklik yapılıp yapılmadığını kontrol etmenizi sağlar. Değer atanabilir. |
| FormType |
Formun açılış biçimi. Alabileceği değerler: |
| 0 = Tanımlanmamış Form Tipi |
| 1 = Yeni Kayıt |
| 2 = Kayıt Güncelleme |
| 3 = Sadece Okunabilir Form |
| 4 = DevreDışı Bırakılmış Form |
| 5 = Hızlı Yeni Kayıt |
| 6 = Toplu Güncelleme |
| ObjectId |
Açılmış olan kaydın GUID cinsinden ID'sini döndürür. Yeni Kayıt olarak açılmış formda null döner. |
| ObjectTypeName |
Görüntülenen nesnenin adı döner |
| 2 |
crmForm Metotlar |
| |
Metot |
Açıklama |
| Save() |
Formu kaydeder |
| SaveAndClose() |
Formu kaydeder ve kapatır |
| SetFieldReqLevel(sField, bRequired) |
Bir alanı gerekli ya da gereksiz olarak işaretler |
Aşağıdaki tabloda crmForm.all.<alanadi> ile erişilebilir alanların ortak özellik ve metotlarını bulabilirsiniz.Burada unutulmamsı gereken nokta lookup ve picklist alanların aslında birer dizi olduklarıdır. İçlerinden birden fazla veri tutabildikleri gibi kullanıcının gördüğü ile veritabanına yazılanların farklı olmasıdır. (lookup için GUID, picklist için ise seçilenin integer değeri yazılır).
| 1 |
crmForm.all Özellikler |
| |
Özellik |
Açıklama |
| Precision |
currency veri float veri tiplerinde virgülden sonraki digit sayıını verir. |
| DataValue |
Veri okunan ve yazılan özellik. picklist ve lookup için ek parametreler almaktadır. |
| Disabled |
Kullanıcı girişini açmanızı veya kapamanızı sağlar. |
| ForceSubmit |
Bu özellik disabled edilmiş olan alanların veritabanına kaydedilmesini sağlar. Standartta disabled alanları CRM kaydetmez. |
| IsDirty |
Alan üzerinde değişiklik yapılıp yapılmadığını kontrol etmenizi sağlar. |
| Min |
currency, float ve integer değer türlerinde erişilebilir en küçük değeri verir. |
| Max |
currency, float ve integer değer türlerinde erişilebilir en büyük değeri verir. |
| MaxLength |
string ya da memo alanlarının en büyük değerini verir. |
| RequiredLevel |
Gereksinim seviyesini verir |
| 0 = Gereksinim düzeyi yok |
| 1 = Business Recommended (Önerilen) |
| 2 = Business Required (Gereken) |
| 2 |
crmForm.all Metotlar |
| |
Metot |
Açıklama |
| SetFocus() |
Mouse işaretçisini formda o alana gönderir. |
| FireOnChange() |
Alanın OnChange() olayını çalıştırır. |
| 3 |
crmForm.all Olaylar |
| |
Olay |
Açıklama |
| OnChange |
Kullanıcı bir alan içerisindeki değeri değiştirdiğinde çalışan olaydır. |
Ek olarak bilinmesi gereken PartyList ve email aktivitesi To alanı birden fazla değer almaktadır. Diğer Lookupların yapıları da bir dizi olmasına karşın tek değer alırlar.Yani sadece 0. indis doludur.
Lookup alanları daha derinlemesine inceleyelim. Lookup alanların yukarıdaki özelliklere ek olarak aşağıdaki üç özelliği bulunmaktadır.
| crmForm.all.<lookupfiled> Özellikler |
| Özellik |
Açıklama |
| Id |
GUID değeri taşır. Okunabilir ve yazılabilir. |
| TypeName |
Referans edilmiş entity'nin adı. Okunabilir ve yazılabilir. |
| Name |
GUID'in değerinin Form'da gösterilecek olan ismi. Okunabilir ve yazılabilir. |
Örneklerle konuyu pekiştirelim. Lookup veri alanından değer okumak ile ilgili örnek;
Bu örnekte bir primarycontactid isimli alandaki değeri öğreniyoruz.
varlookupItem = newArray;
//primarycontactid alanndaki veriyi okuyoruz.
lookupItem = crmForm.all.primarycontactid.DataValue;
//eğer veri var ise gösteriyoruz.
if(lookupItem[0] != null) {
// metin
alert(lookupItem[0].name);
// GUID
alert(lookupItem[0].id);
// entity ad.
alert(lookupItem[0].typename);
}
Lookup veri alanına veri yazmakla ilgili örnek;
Bu örnekte parentaccountid isimli alana değer atıyoruz.
//bir Array oluturuyoruz.
varlookupData = newArray();
//Object nesnesi ekliyoruz.
varlookupItem = newObject();
//Object nesnemizde id, typename ve name zelliklerini dolduruyoruz.
lookupItem.id = '{1AAC1363-01A1-DB11-8432-0003FF9CE217}';
lookupItem.typename = 'account';
lookupItem.name = 'A Bike Store';
// Object nesnemizi Array'a veriyoruz.
lookupData[0] = lookupItem;
// Array' parentaccountid alanna veriyoruz.
crmForm.all.parentaccountid.DataValue = lookupData;
| 1 |
crmForm.all.<picklistfiled> Özellikler |
| |
Özellik |
Açıklama |
| DataValue |
Seçilmiş olan alanın integer değeri. Okunabilir ve yazılabilir. |
| SelectedText |
Seçilmiş olan alanın text değeri. |
| GetSelectedOption |
Seçilmiş olan değerin option cinsinden değeri. |
| Options |
Picklist içerisindeki öğelerin Array cinsinden değerini verir, ayrıca array içerisinde yeni bir değer var ise bu da gösterilmiş olacaktır. Okunabilir ve yazılabilir. |
| 2 |
crmForm.all.<picklistfiled> Metotlar |
| |
Metot |
Açıklama |
| AddOption(Name, DataValue) |
Picklist Array'ına yeni öğeler ekler. Name ve DataValue geçerli değişkenler olmalıdır. |
| DeleteOption(value) |
Integer değeri verileren öğeyi picklistten kaldırır |
Picklist alanlar ile örneğimize geçelim;
Bu örnekte categorytype isimli alan içerisindeki değerlerle oynuyoruz.
varoField = crmForm.all.categorytype;
// 4. öğeyi alyoruz.
varoOption = oField.Options[4];
// kaç tane öğe olduğunu öğreniyoruz.
alert("Original length :"+ oField.Options.length);
// birinci öğeye değer atıyoruz.
oField.DataValue = 1;
// birinci öğenin adını alıyoruz.
alert(oField.SelectedText);
// 4. öğeyi siliyoruz.
oField.DeleteOption(4);
// kaç tane öğe olduğunu öğreniyoruz.
alert("New length :"+ oField.Options.length);
// 4. öğeyi yeniden ekliyoruz.
oField.AddOption(oOption.Text, oOption.DataValue);
// kaç tane öğe olduğunu öğreniyoruz.
alert("Restored length :"+ oField.Options.length);
Form üzerinde JavaScript kodu ile yukarıdaki anlattıklarımı birleştirerek her şeyi yazmanız mümkün.
Daha önceki JavaScript ile ilgili makalelerimden başka örnekler de bulabilirsiniz:
http://www.cub-e.net/post/CRM-icerisinden-Java-Script-kullanarak-web-sayfasc4b1-cagc4b1rmak.aspx
http://www.cub-e.net/post/Microsoft-CRM-30-Navigation-Bar-Ogelerini-Form-Icinde-IFrame-Ile-Gostermek.aspx
http://www.cub-e.net/post/OnSave()-Events-on-Dynamics-CRM-javascipt.aspx
http://www.cub-e.net/post/OnSave()-Events-on-Dynamics-CRM---Part-II.aspx
http://www.cub-e.net/post/Ascentium-CrmService-JavaScript-Library.aspx
http://www.cub-e.net/post/Use-JavaScript-executecalllaunch-Dynamics-CRM-40-Workflow.aspx
http://www.cub-e.net/post/CRM-workflow-date-update-includes-saturdays-sundays.aspx
http://www.cub-e.net/post/Microsoft-Dynamics-CRM-JScript-Export-Tool-JavaScript.aspx
Bir makalemizin daha sonuna geldik. Umarım anlattıklarım faydalı olmuştur. Hepinize iyi çalışmalar.
Barış KANLICA | Dynamics CRM MVP
Microsoft Certified Business Management Solution Specialist
brsk@e-kolay.net| www.cub-e.net|