Selamlar ;
Crm üzerinde çalışırken hepimiz zaman zaman ekranda yer alan kontroller üzerinde daha esnek hareket edebilmek ve istediğimiz ayarı verebilmek isteriz.Bunun için her formun onload'ına yazılabilecek çoğu script olabileceği gibi bunları tek bir noktadan da rahatlıkla yönetebilmemiz söz konusudur.Her ne kadar çok Microsoft tarafından "unsupported" olarak nitelendirebileceğimiz bir geliştirme örneği olsada az sonra ifade edeceklerim biz developerları rahatlatıyor olduğu gerçeği kaçınılmazdır:)
Global.js'den bahsediyorum evet.CrmServer'in kurulumunun gerçekleştirildiği makinede Microsoft CRM Dynamics'in kurulu olduğu ve content'lerini barındırdığı _static\_common\scripts dizininde yer alan (C:\inetpub\wwroot olmakla birlikte bazen Program Files’ın Microsoft CRM
klasörü altındada olabiliyor) bu dosya bütün crm form'larına otomatik olarak register edildiğinden buraya yazdığınız biri fonksiyon tüm formlar tarafından rahatlıkla erişilebilir olmaktadır.
Not : ISV.config dosyasında yapılacak olan ciddi geliştirmeler bir çok js fonksiyonları içerebilir ( ki bu acı bir sonuç doğurmaktadır o dosyayı import etmek istediğinizde...bu durumda ilgili xml tabanlı customization dosyasının sorunlu olduğuna dair uyarılar alırsınız ki , çağrılacak olan bu fonksiyonların içerisindeki invalid olarak gorunen karakterleri bir şekilde değiştiriyor olmalısınız..Bunu yapsanız bile inanın bana bu tam olarak bu beladan kurtulduğunuz anlamına gelmiyor.)2 yöntem var çözüm için bunları daha sonra tips & tricksler dahilinde sizlerle paylaşıyor olacağım.
Aşağıda yer alan fonksiyonlar anlayacağınız üzere "crm field" bazlı yapılabilecek tüm değişiklikleri hemen hemen kapsamaktadır.
17 function CrmField( fieldId )
18 {
19 var crmField = this;
20
21 crmField.Id = fieldId;
22 if( crmField.Id == null || crmField.Id == "" ) return;
23
24 crmField.Field = document.getElementById(fieldId);
25 if( this.Field == null ) return;
26 //field'a erişemezsek metoddan çıkıyoruz!
27 crmField.InitValue = crmField.Field.DataValue;
28 crmField.LastValue = "";
29 crmField.Cell = document.getElementById(this.Field.id + "_d");//ilgili field'in cell'i
30 crmField.Label = document.getElementById(this.Field.id + "_c");//ilgili field'in label'i aşağıda ki testde kullanacağız.
31 crmField.Row = crmField.Cell.parentElement;
32 crmField.Disable = function(){ crmField.Field.Disabled = true; }
33 crmField.Enable = function(){ crmField.Field.Disabled = false; }
34 crmField.HideCell = function(){
35 crmField.Field.style.visibility = "hidden";
36 crmField.Cell.style.visibility = "hidden";
37 crmField.Label.style.visibility = "hidden";
38 }
39 crmField.HideRow = function(){ crmField.Row.style.display = "none"; }
40 crmField.ShowCell = function(){
41 crmField.Field.style.visibility = "visible";
42 crmField.Cell.style.visibility = "visible";
43 crmField.Label.style.visibility = "visible";
44 }
45 crmField.OnChange = function(fFunction){ crmField.Field.attachEvent(
"onchange",fFunction); }
46 crmField.ReLabel = function(txt){ crmField.Label.innerHTML = txt; }
47 }
yukarıda belirttiğimiz ve global.js'e eklediğimiz CrmField fonksiyonunun testi için aşağıdaki gibi bir test yapabiliriz.
58 //Test - contact form
59 var firstname;
60 function OnCrmPageLoad()
61 {
62 firstname = new CrmField("firstname");
63 firstname.ReLabel("İsim Giriniz!");
64 firstname.OnChange( OnFirstnameChange )
65 }
66
67 function OnFirstnameChange()
68 {
69 firstname.Alert();
70 }
71
72 OnCrmPageLoad();
gördüğünüz gibi form onload olduğunda global.js 'deki ilgili CrmField fonksiyonuna giderek field bazında yapılan değişikliği sisteme anında yansıtacak.Bizde böylelikle bir çok fonksiyon yazmak ve en önemlisi bunu farklı farklı formlar altında ifade etme zorunluluğundan kurtulmuş olacağız :)
Sevgiler
E2
Thanks To : Adi Katz