14 Mart 2010 Pazar

Ms crm formlarını javascript ‘le özelleştirmek 4


Merhaba arkadaşlar bugün tekrar özelleştirmeyle ilgili scriptlere devam edeceğim. Geliştiricilerin işlerine çok yarayacak ve ayrıca hiç zorlanmadan birçok özelleştirmeyi scriptlerle nasıl yapabileceklerini  çeşitli örneklerle göstereceğim.
Global.js dosyası nasıl kullanılır ve içine nasıl javascript kodları yazılır:
Varlık  formundaki alanların içine yazdığımız javascriptlerin bazı durumlarda sonradan okunamadığını,  kayboldunu hepimiz biliriz. Bunun için javascript yazılması istenen alanlar  ve ya fomlar  için External(harici)  bir js dosyasında kullanabileceğimizi ve bunu sadece  fonksyionun adını yazarak yazdığımız scriptleri çağıracağımızı göreceksiniz.  Böylece uzun ve ya karmaşık scriptleri crm formlarına yazmamış olacağız. Bu da bize bir ide kullanarak kolay bir şekilde kod yazmamızı  ve ms crm i daha az meşgul ederek hızlı ve daha effective kullanmamızı sağlayacaktır.
Bunun için yapmamız gereken yöntem ise Ms crm’in kurulduğu yerden ( C:\inetpub\wwroot olmakla birlikte bazen Program Files’ın Microsoft CRM klasörü  altındada olabiliyor.  _static\_common\scripts\Global.js) dosyasına açarak  aşağıdaki kod satırını eklemeliyiz. Birden fazla js  dosyasıda  isteniyorsa ayrı ayrı ekleyebiliriz ve istediğimiz fonksiyonları çağırabiliriz. Aşağıda gördüğünüz kodu global.js  dosyası içine eklerseniz kendi yazdığınız js dosyasının fonksiyonlarını ms crm formları içinden fonksiyon adlarını yazarak çağırabilirsiniz.
src='../../../_static/_common/scripts/Kullanmakistediğinizjavascriptdosyaadı.js' type='text/javascript'
document.write("Yukarıdaki kodu buraya script taglarıla yazarsanız.  Kaydetiğimiz js dosayasındaki fonksiyonları Ms crm üzerinden çağırabilirsiniz.");
Formdaki tüm alanların disable edilmesi:
Formun onLoad() olayına aşağıdaki kodu yazarsanız bütün alanları disable ve ya readonly yapabilirsiniz.
for (var index in crmForm.all)
{
    var control = crmForm.all[index];
    if (control.req && (control.Disabled != null))
    {
        control.Disabled = true;
    }
}
Formun açılış  boyutunu belirlemek için aşağıdaki kodu formun onLoad() olayına yazarız.
window.moveTo(0,0);
window.resizeTo(screen.availWidth, screen.availHeight);
window.resizeTo(600, 400);


formun onLoad olayına aşağıdaki kod yazılır.

function CreateEmail(emailAddress)
{
    return function()
    {
        if (emailAddress != null && emailAddress.value.length > 0)
        {
            window.navigate("mailto:" + emailAddress.value);
  }
    }
}
crmForm.all.emailaddress1.attachEvent('ondblclick', CreateEmail(crmForm.all.emailaddress1));
crmForm.all.emailaddress2.attachEvent('ondblclick', CreateEmail(crmForm.all.emailaddress2));
crmForm.all.emailaddress3.attachEvent('ondblclick', CreateEmail(crmForm.all.emailaddress3));
kodu yazdıktan sonra oluştura basıp deneyebilirsiniz. Ayrıca burada farkındaysanız  çift tıklama event’i içinde bir örnek vermiş olduk.
Crm formundan picklist alanlarından option silmek  ve ya default değer vermek , stilini değiştirmek:
Picklist option larını silmek ve ya  değer atamak için aşağıdaki kodu yazarız. 
crmForm.all.new_alanadi.DeleteOption(4);
crmForm.all.new_alanadi.DataValue=1;
Picklist option larının background ve text rengini değiştirmek.
var list = crmForm.all.new_alanadi;
var option = list.options[0];

//Set the background color to red.
option.style.backgroundColor = "#FFEEEE";

//Set the text color to white.
option.style.color = "#FF4563";


Look up’ın Guid almak:
var deger = new Array();
deger = crmForm.all.new_lookupalan.DataValue;
var Guid = deger[0].id;
Checkbox bir alanın onLoad() dan tetiklenmesi:
Bazılarınız karşılaşmışsınızdır.  Ms  crm 4.0 da checkbox yapılan bir bit alanın change olayında hiçbir event’in  tetiklenmediğiyle.  Aşağıdaki örnek kodu formuzun onload una  yazarsanız. Dinamik bir şekilde event’i tetikleyebileceksiniz.
// Bu örneğimizde checkbox tıkladığımız zaman  bilgisayaradedi adında bir alan görünür olacaktır. Unchecked olayında ise bu alan tekrar kaybolacaktır.
crmForm.all.new_checkboxalan.onclick = function()
{
if ( crmForm.all.new_ checkboxalan.checked )
{
crmForm.all.new_bilgisayaradedi.style.display='inline';
crmForm.all.new_bilgisayaradedi_c.style.display='inline';
}
else
{
crmForm.all.new_bilgisayaradedi.style.display='none';
crmForm.all.new_bilgisayaradedi_c.style.display='none';;
}
}
Ms crm 4.0 da form üzerinden istenilen section ve ya section ların gizlenmesi ve ya gösterilmesi:
Aşağıdaki kodu formun onLoad’una yazarsanız ve tab’ın indeksini,section’ın indeksini ve sectionı gizlemek için displayType nı “none” ve ya gizli bir sectionı göstermek istemek için “inline” yazarsınız.
HideSection( 0 , 3 , "none" );  // gizlemek için.
HideSection( 0 , 3 , "inline" );  // gösterme için.
function HideSection( tabIndex , sectionIndex , displayType )
{
      var tab2Hide = document.getElementById( "tab" + tabIndex );

           tab2Hide.childNodes[0].rows[ sectionIndex ].style.display = displayType;
}
Gelecek yazımda görüşmek dileğiyle......

Ercan Top | CRM Software Developer
 +90 534 335 6873

5 Mart 2010 Cuma

Teklif Ürünü-Sipariş Ürünü-Fatura Ürünü arasındaki alanların ilişki haritası(Relationship mappings: quotedetail to salesorderdetail to invoicedetail)

Merhabalar,

CRM 4.0'da teklif, sipariş, fatura varlıkları üzerinde geliştirme yapmış veya analiz etmiş olanlar bilebilir ancak biraz uğraş gerektiren bir bilgiyi paylaşmak istiyorum. 4.0'da Teklif Ürünü --> Sipariş Ürünü --> Fatura Ürünü arasındaki ilişki haritasını CRM arayüzünden bulmanız mümkün değil.
CRM 3.0'da bunu sisteme bir güncelleme paketi kurarak düzeltebiliyorduk (http://support.microsoft.com/kb/914921).

Örneğin teklif ürünü üzerinde açtığınız bir alanı sipariş ürünü üzerinede açtınız ve bu alanları eşleştirmek istiyorsunuz, bunu arayüzden direk olarak yapmanız mümkün değil. Aradaki ilişki database tarafında tutuluyor olsada arayüzde direk olarak görünmemekte, bunun için aşağıdaki adımları izleyerek bu ilişki haritası tablosuna ulaşabiliyoruz.

1- SQL arayüzünden ilgili sorguyu çalıştırıyoruz (ORGANIZATION_MSCRM database)

Select * from entitymapbase where targetentityname ='salesorderdetail'

2- Sorguda dönen satırlar içinden SourceEntityName "quotedetail" olan satırı buluyoruz. (Teklif ürünü satırı)



3- İlgili satırın EntityMapId kolonunu bulup Guid'i alıyoruz.

http://yourservernamehere/Tools/SystemCustomization/Relationships/Mappings/mappingList.aspx?mappingId=*EntityMapId

* EntityMapId Guid'i buraya yapıştırıyoruz

Sonuç olarak ilgili url'den karşımıza teklif ürünü ile sipariş ürünü arasıdaki ilişki harita tablosu çıkyor ve bu tablodan istediğimiz ilişkiyi belirtip kurabiliyoruz.

Not : Fatura ürün ilişkisi için sorgumuzu
Select * from entitymapbase where targetentityname = 'invoicedetail' olarak güncelliyoruz ve böylece sipariş ürünü ile fatura ürünü arasıdaki ilişki haritasına ulaşıyoruz.

Faydalı olması dileği ile,,


İyi çalışmalar
Göktuğ - crmAkademi

20 Şubat 2010 Cumartesi

Ms crm formlarını javascript ‘le özelleştirmek 3


Merhaba arkadaşlar geçen yazımda  Ms  crm’de Genel  değişkenler, Genel  metotlar  ve  Genel  olaylardan bahsetmiş ve bazı örnekler vermiştim. Bu yazımda ise geçen derste ki yarım kalan konuları tamamlayıp, örnekler vereceğim.
all.:  Form daki bütün alanlara all özelliğini kullanarak ulaşırız. Bu özellik form nesnelerinin kolleksiyon özelliğidir.
crmForm.all. propertyname(özellik Adı) :
DataValue:Bu özellikle  alanların değerini okuyabilir  ya da yazabiliriz(set/get).
Bu örneğimizde bir checkbox True ve ya False değerine göre işlem yapıyoruz:
crmForm.all.new_mybitfield.DataValue = true;
crmForm.all.new_mybitfield.DataValue = false;
if (crmForm.all.new_mybitfield.DataValue)
{
    // DataValue’nun değeri true ise, Birşeyler yap.
}
else
{
    // DataValue’nun değeri false ise, Birşeyler yap.
}

Disabled:  Form üzerinde belirlediğiniz alana veri girişini engelleyebilirsiniz ve ya sadece okunabilir(read only) yapabilirsiniz.
Aşağıdaki  iki özellikde bize aynı sonucu verir.
crmForm.all.new_alanadi.disabled = true;
crmForm.all.new_alanadi.readOnly = true;
 yada bir bit alanı  ve ya bir lookup alanı disable edebiliriz.
crmForm.all.new_bitalanadi.disabled = true;
crmForm.all.new_alanadilookupid.disabled = true;

IsDirty: Bize boolean bir değer döner ve alan üzerinde değişiklik yapılıp yapılmadığını kontrol  eder.
ForceSubmit:  Crm sadece değişen  özellikleri kaydeder. Form üzerinde  disabled alanlar varsa CRM kaydetmez. Bu sebeple ForceSubmit özelliği disabled  olan alanların database kaydedilmesini sağlar.
Min: Bize sayısal olarak en küçük değeri verir.
Max: Bize sayısal olarak en büyük değeri verir.
RequiredLevel: Gereksinim seviyesini verir(  Gereksinim düzeyi yok(No constraint)=0,  Önerilen(  Business Recommended)=1 , Gerekli (Business Required)=2)
Bu örneğimizde bir if else döngüsü içerisinde gereksinim değerine göre karşılaştırma yapıyoruz:
var CRM_REQUIRED_LEVEL_NORMAL = 0;
var CRM_REQUIRED_LEVEL_RECOMMENDED = 1;
var CRM_REQUIRED_LEVEL_REQUIRED = 2;
var oField = crmForm.all.new_gereksinimalan;
 
if(oField.RequiredLevel== CRM_REQUIRED_LEVEL_NORMAL)
{
      alert("Bu alan gereksinimi olmayan bir alandır.");
      
}
 else if(oField.RequiredLevel==CRM_REQUIRED_LEVEL_RECOMMENDED)
{
     alert("Bu alan önerilen bir alandır.");
}
 
 Else if(oField.RequiredLevel==CRM_REQUIRED_LEVEL_REQUIRED)
{
      alert("Bu alan gerekli bir alandır.");
      
}
SetFocus:  Mouse İmlecini Formadaki bir alana göndermek için kullanılır.
crmForm.all.your_field.ForceSubmit = true;
FireOnChange: Alanın onChange  olayını tetiklemek  için kullanılır.
Buraya kadar işlediğimiz konularda genel olarak metotlardan ve ya özelliklerden bahsetik birazda örneklere yoğunlaşalım.
Crm’de alanların gizlenmesi ve ya gizli alanların gösterilmesi:
Alanın görünmez yapmak için aşağıda gösterdiğim yolu kullanabilirsiniz.
crmForm.all.<alanadı>.style.display = 'none';
görünür hale getirmek için ise

crmForm.all. <alanadı>.style.display = 'inline';
ve ya
crmForm.all. <alanadı>.style.display = 'block';
kullanılabilir.
Alan eğer Lookup ise Lookup’ın label kısmınında saklanması için gerekli kod aşağıdaki gibidir:
crmForm.all. <alanadı>.style.visibility = 'hidden';
crmForm.all. <alanadı>_c.style.visibility = 'hidden';
crmForm.all. <alanadı>_d.style.visibility = 'hidden';
NavBar’da  gizlemek için ise iki entity arasındaki ilişkinin adı verilir.
var tabset=’1-N yapılan ilişkinin adı’;
var navItem = window.document.getElementById( 'nav_' + tabSet);
navItem.style.display=”none”;
Text alanın değerinin tüm harflerini  büyük ve ya küçük Yapmak (Uppercase/Lowercase):
Girilen Text alanın değerinin tüm harflerini  büyük ve ya küçük Yapmak için alanın onChange olayına aşağıdaki kodları yazarız.
crmForm.all.name.DataValue = crmForm.all.name.DataValue.toUpperCase();  //Girilen harfleri  büyük harfe çevirir.
crmForm.all.name.DataValue = crmForm.all.name.DataValue.toLowerCase(); //Girilen harfleri  küçük harfe çevirir.
Formun arka rengini değiştirmek ve ya alanların label’ların renklerini ve font’larını  değiştirmek :   
Formun arka rengini değiştirmek için form’un onLoad() olayına aşağıdaki kodu yazarız.
document.all.areaForm.style.backgroundColor = 'pink';
Alana ait label’ınn( varchar)  font özellkleri ve rengini değiştirmek için aşağıdaki yolu izleriz.
alanının label’nın özelliklerinin değişmesi için alan adının sonuna (_c) yazarız.
  crmForm.all._c.style.fontWeight = 'Arial'; // Yazı tipini değiştiririz.
  crmForm.all._c.style.fontSize = '15px'; // Yazı Boyutunu değiştiriz
  crmForm.all._c.style.color = '#ef0000';  //Yazı rengini değiştiririz. 
Son olarak aşağıdaki JavaScript kod örneğini veriyorum. Harfleri kontrol eder ve saçma olan geçersiz karakterleri  bir alt çizgi ile yer değiştirir.

// ilk önce alana saçma bir değer verelim
crmForm.all.<alanadı>.DataValue = "Benim?adım/\ Ercan";

if (crmForm.all.<alanadı>!= null)
{
              
               var replaceChar = "_";
               var reg = new RegExp('[,/\:*?""<>|]', 'g');
               var sonuc = crmForm.all. <alanadı>.DataValue.replace(reg, replaceChar);
               alert(sonuc);
// Bize sonuç olarak “Benim_adım_Ercan” gibi bir değer döner.
}


Bu yazımında sonuna geldik. Gelecek yazımda sizlere faydalı olacak javascript kod örnekleri vereceğim. Gelecek yazımda görüşmek üzere.....

Ercan Top | CRM Software Developer
' : +90 212 320 2332 | Å : +90 534 335 6873


16 Şubat 2010 Salı

CRM 4.0 için yeni güncelleme paketi Roolup 9 ilan edildi. (Update Rollup 9 for Microsoft Dynamics CRM 4.0 is available)

Microsoft Dynamics CRM 4.0 için Güncelleştirme Roolup 9'u yayınladı. Güncelleştirme hata düzeltmeleri(hotfixes) ve mevcut Roolup ları içerir.Ayrıca bu güncelleştirme ms crm 4.0 destekleyen her dil için geçerli. Aşağıdaki link'den indirebilirsiniz.
http://support.microsoft.com/kb/977650

14 Şubat 2010 Pazar

Ms crm formlarını javascript ‘le özelleştirmek 2


Daha önceki makalede sizlere crm formlarına nasıl javascript yazılacağını göstermiştim. Bu yazımda ise  iş hayatında kullanacağımız javascript  kod örneklerini vereceğim. Ayrıca yazdığımız kodları nasıl derlendiğine  beraber bakacağız.  Bu kodları yazdıkdan sonra bir hata varsa onu nasıl bulabilirim diyenler vardır. Bu sorunun cevabı çok basit.Yazdığımız kodun içine debugger; diye bir kod yerleştiriyoruz , bu kod bize javascript kodlarımızı derlememiz için yardımcı oluyor böylelikle  yazdığımız scriptlerin çalışıp çalışmadığını visual stadio yardımıyla öğrenebiliyoruz (tabiki tek yol bu değil derlemeye yadımcı olan başka yolar da var daha sonraki makalelerde bunlara da değineceğim).


Bu arada unutmamız gereken bir konuda  internet explorer sayfamızın debugging özelliğini enable etmemizdir. Aksi takdirde kodlarımız debugging olmayacakdır.

Debugging özelliğini enable ettikden sonra aşağıda gösterdiğim şekildeki gibi otomotikmen debug olacakdır.

İsterseniz birazda Ms crm deki mevcut bulunan alanları script içinde nasıl kullanacağımıza birlikde bakalım ve daha sonra örneklere geçelim.
Genel Değişkenler (Global Variabler of ms crm 4.0)
SERVER_URL: Organizasyon Url sini(http,https) verir örneğin http://myserver/myorg
USER_LANGUAGE_CODE: Kullanıcını dil kodunu verir (örnek : 1033)
 ORG_LANGUAGE_CODE: Organizasyonun dil kodunu ve aynı zamanda kurulumda seçtiğimiz default  dili verir.
 ORG_UNIQUE_NAME: Organizasyonun adını döndürür.
Genel Değişkenlerle ilgili bir code örneği aşağıda verilmiştir.
İf(ORG_LANGUAGE_CODE!=USER_LAGUAGE_CODE)
{
Alert(‘Bu kullanıcının seçtiği dil kodu ’+ USER_LAGUAGE_CODE);
}
  Genel Metotlar  
IsOnline: Kullanıcı online olarak sistemi kullanıyorsa bize dönen değer true olacaktır.
 IsOutlookClient: Kullanıcı Microsoft Dynamics CRM for Outlook ile sistemi kullanıyorsa bize dönen değer true olacakdır.
 IsOutlookLaptopClient: Microsoft Dynamics CRM Outlook için çevrimdışı olup olmadığını denetler.
if (IsOutlookLaptopClient())
{
alert("You are using Microsoft Dynamics CRM for Outlook with Offline Access");
}
else
{
alert("You are not using Microsoft Dynamics CRM for Outlook with Offline Access");
}

 Genel Olaylar  
 OnLoad: Form Browser'a yüklendiğinde gerçekleşen olaydır.
 OnSave:   Save ya da Save and Close  düğmelerine tıkladığında çalışan olaydır. onSave olayı kullanıcının giridiği alanlar sunucuya  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.
onChange :   Formda istediğimiz alanlar (Field) üzerinde işlem yapıldığında çalışacak olan olaydır yani değişme olayıdır.


crmForm Özellikler:  
*Form özelliklerine  crmForm.propertyname(özellik Adı) ile erişilebilir.
 All: Form nesneleri kolleksiyonu
 IsDirty: Formda değişiklik yapılıp yapılmadığını kontrol etmenizi sağlar.
FormType :Formun açılış biçimini gösterir.

 
ObjectTypeName: Görüntülenen nesnenin adı döner.
ObjectId: Değiştirdiğimiz alanın id ‘si anlamına gelmektedir. Yani nesne anahtarı demektir.Bize kaydın Guid’ ini verir. Bu özellik çok kullanacağımız bir özellik olacaktır. İlerde yapacağımız örneklerde daha detaylı olarak kullanacağız bu özellik  başka bir sayfaya yada bir button aracılığıyla bazı işlemler yapmamıza yardımcı olacaktır.
ObjectTypeCode    : Özelliği   görüntülenen varlık türü kodu içerir.
//Bu örneğimizde ise varlık türü kodunun Account(firma) veya Contact(ilgili kişi) olduğunu öğreniyoruz.



var CRM_ENTITY_ACCOUNT = 1;
var CRM_ENTITY_CONTACT = 2;

switch (crmForm.ObjectTypeCode)
{
   case CRM_ENTITY_ACCOUNT:
      alert("This is an Account form.");
      break;

   case CRM_ENTITY_CONTACT:
      alert("This is a Contact form.");
      break;
}

EntityTypeCode     :  Varlık türünün ne olduğunu bize verir(EntityTypeCode).Aşağıdaki tablolarda bazı varlık kodları(EntityTypeCode) verilmiştir.
 
 
 

                                                                                                              
 
Yukarıda anlatmış olduğum özellikler için genel bir örnek yapalım.Daha sonraki dersimizde işinize çok yarayacak kod örneklerini vereceğim.

var CRM_FORM_TYPE_CREATE = 1;
var CRM_FORM_TYPE_UPDATE = 2;

// Bu örnek de formun formtype nı öğreniyoruz eğer form update olmuşsa formun objectId’sini buluyoruz veya formtype değeri create ise bir alert verecekdir.
switch (crmForm.FormType)
{
   case CRM_FORM_TYPE_CREATE:
      alert("This is a create form.");
      break;

   case CRM_FORM_TYPE_UPDATE:
      alert("This is an update form, the ID is " + crmForm.ObjectId + ".");
      break;
}

Bu dersimizin de sonuna geldik. Gelecek yazıda görüşmek dileğiyle......
Ercan Top | CRM Software Developer
ercantp@gmail.com
+90 534 335 6873 


12 Şubat 2010 Cuma

CRM NEDİR? NEDEN GEREKLİ?

CRM, eskiden birebir olan müşteri ilişkilerinin; günümüz işletmelerine yansımasıdır. CRM programları da bu yansımayı sağlayan aynadır.

Peki böyle bir aynaya neden ihtiyaç var ?

Düşünün, eskiden her işin ustası vardı. Şimdi de var. Peki fark nerde? Örneğin, Eskiden terziler vardı. Müşteri dükkana gelir, çay içilip sohbet edilir; daha sonra müşteri isteğini söyler, istediği kıyafete göre ölçüsünü verir. Bi ara provaya gelir; daha sonra kıyafeti tamamlandığında onu almaya gelir. Daha bitmedi. Boş zamanlarında da çay içmeye gelirdi. Çünkü o, terzinin müşterisi olmaktan çıkıp arkadaşı olurdu. Ama artık değişen dünya ile isteklerin artması hayat şartlarının ağırlaşması; ve bu ağırlık altında insanların ezilmeme çabaları; birde bunun yanında gelişen teknoloji , bu değerlerimizi yok etti. İnsanlar kıyafet için terziye gitmek yerine, daha çok çeşitin bulunduğu ve daha kısa zamanda halledebilecekleri giyim mağzalarına gitmeyi seçtiler. Böylelikle terzinin işleri azaldı. Bunun üzerine terzi, dükkanını büyüttü; yeni makineler aldı; yeni elemanlar aldı. Daha önce müşterisinin ölçülerine göre üretim yapan terzi, şimdi belirli kalıplara göre farklı bedenlerde üretim yapmaya başladı. Gerçek satış dükkanları yetersiz kaldı. Yanına internet üzerine sanal dükkanlar açıldı. Daha önce müşterisinin bedenini bilen terzi, şimdi yüzünü görse tanıyamaz oldu. ”Maaşı alınca verirsin” sözü tarih oldu. Yerini “kredi kartlarına birçok avantajımız var.” sözü aldı. İşte biz böyle kaybettik terzimizi , muhabbetimizi, sadakatimizi...

Kaybettiğimiz değerleri tekrar kazanmalıyız. Yoksa ayakta durmayı geçtim, piyasa da var olamayız.

Peki nasıl olacak bu, tekrar bir terzinin ilk hali gibi, küçülecek miyiz? Yoksa o terzinin müşteriye karşı davranışlarını günümüze mi uyarlayacağız?

Terzi için en önemli şey müşterisinin memnuniyetiydi. Her şeyi onun için yapıyordu. Korkusu onu kaybetmek değildi terzinin. Tek korkusu “ya memnun edemessem” düşüncesiydi. Aslında o farkına varmasa da müşteri memnuniyetini gözeterek,müşterinin sürekliliğini sağlıyordu.

İşte bizde CRM’i uygulayarak terzi gibi müşteri memnuniyetini sağlayacağız. Memnun olan müşteriyi kendimize bağlamış olacağız.Kendimize bağladığımız müşterinin çevresine yaptığı reklamla yeni müşterilere kavuşacağız...

Yapmamız gereken en önemli faktör kullandığımız aynayı iyi seçmek. Biz buyüzden Microsoft dynamics CRM‘i seçtik...

ERDEM CÖMERT
erdem.comert@crmakademi.net

10 Şubat 2010 Çarşamba

Ms crm formlarını javascript ‘le özelleştirmek

Javascript Kodlarıyla crm form larında küçük özelleştirmeler yapacağımızı daha önceki yazımda kısaca bahsetmiştim. Bu yazımda ise form içerisine nasıl JavaScript yazabiliriz, basit örneklerle anlatacağım. Öncelikle Ms crm 4.0 ayarlar (settings) kısmına tıklayarak özelleştirmek istediğim varlığı seçiyorum
( daha önceki makalemde bu konulardan bahsetmiştim bu yüzden kısaca geçiyorum.)
Daha sonra özelleştir(customization) linkine tıklıyorum ve özelleştirmek istediğimi varlığı(entity) seçiyorum . son olarak altaki resimde gördüğünüz gibi form özelliğine tıklıyorum ve özelleştirmek istediğim formu getiriyorum.






Şimdi ise normal özelleştirme standartların biraz dışına çıkarak normalde desteklenmeyen fakat developerların ve kullanıcıların ihtiyaçları doğrultusunda kullanıcılar için esnek özellikleri ve ekranları hazırlayabiliriz. Özellikle bu ekranları hazırlarken komplike kod blokları yazmaya gerek kalmadan işimizi javascript kodlarıyla halledebileceğimizi göreceğiz.
Form üzerinde üç farklı olay(event) için JavaScript yazabiliriz bu olaylar onLoad(yüklendiğinde),onSave(kaydedildiğinde),onChange(değiştiğinde). Öncelikle bu olayları birlikte inceleyelim ve daha sonra form içinde nerelere kod yazacağımızı göreceğiz.

onLoad: Form açıldığında çalışacak olan JavaScript Kodunu bu olaya yazarız.
onSave: Form kaydedildiğinde çalışacak olan JavaScript Kodunu bu olaya yazarız.
onLoad ve onSave için Form Properties butonuna tıklanarak açılan ekrandan seçili event için Edit denir.






Önce onLoad için penceremizi açalım ve ilk örneğimize başlayalım. İlk örneğimiz sayfa ilk yüklendiğinde crm formunda ok/cansel şeklinde Message Box’lar oluşturmak olsun.

var cevap = window.confirm("işleme devam etmek için tamam(OK) basın,işlemi iptal etmek için iptale(Cansel) basın.");
if (cevap) {
//kullanıcı tamama basarsa kodu burada işleyecektir.
}
else {
//kullanıcı iptale basarsa kodu burada işleyecektir.
}



Bu ekranda olay etkindir seçeneğini işaretlemediğimiz zaman yazdığımız scriptleri çalıştırmayacaktır bu yüzden bu seçeneği unutmamalıyız.

Daha sonra Form Properties penceresini de kapatalım. Üst menüden Preview>Create Form seçeneği ile form test penceresini açarak test edelim.



Bu örneği formun onSave olayı içinde uygulaya biliriz.
onChange: alanlar (Field) üzerinde işlem yapıldığında çalışacak olan JavaScript Kodunu bu olaya yazarız.
onChange için alan (Field) üzerine çift tıklanır.


Açılan pencerede Events tabında Edit ‘e tıklarız.

onChange için ilk örneğimize başlayalım bu örneğimiz telefon(mask) formatı olsun. Yeni başlayanlar için biraz uzun bir örnek olabilir fakat bazı projelerde kullandığım için sizlerle paylaşmak istedim. Ayrıca mevcut alanlar ve sonradan eklenen (custom) alanlarıda nasıl kullanacağımızı gelecek dersde göreceğiz.

var objField = crmForm.all.telephone1;//telefon alanımızın alan ismini objfield değişkenine atıyorum
var sText=objField;
try {
if (objField.DataValue == null)//telefon alanımın text’i yani içindeki değer boş ise geri dönüyorum
return true;

var str = objField.DataValue;

// bosluklari kaldir
str = str.replace(/ /g, "");

// eger ilk karakter + ise geri kalanlar için numerik kontrolü yap
if (str.charAt(0) == '+') {
if (!IsNumeric(str.substr(1)))
{
// Hata
alert("Please use only numeric charecters at this field.");
objField.DataValue ="";
return false;
}
str = str.substr(0, 1) +' ' + str.substr(1, 2) + '( ' + str.substr(3, 3) + ') ' + str.substr(6, 3) + ' ' + str.substr(9, 2) + ' ' + str.substr(11, 2);
}
else {
// bosluklar silindikten sonra numerik kontrolü yap
if (!IsNumeric(str.substr(1))) {
// Hata
//alert("Please use only numeric charecters at this field.");
objField.DataValue ="";
return false;
}
else {
// 10 veya 11 karakterse uygun formata sok
if (str.length == 10 || (str.length == 11 && str.charAt(0) == '0')) {
// Formata sok
if (str.length == 10) {
str = "0" + str;
}
str = str.substr(0, 1) + '( ' + str.substr(1, 3) + ') ' + str.substr(4, 3) + ' ' + str.substr(7, 2) + ' ' + str.substr(9, 2);
}
else // 10 veya 11 karakter degilse hata mesaji ver
{
// Hata
alert("Please for domestic phone numbers use only '0 212 444 05 35' or '212 444 05 35' format at this field. for Overseas phone numbers put a '+' sign at the beginnig of Number.");
objField.DataValue ="";
return false;
}
}
}
objField.DataValue = str;
}
catch (err) {
txt = "(initialize) There was an error on this function.\n\n";
txt += "Click OK to continue.\n\n";
alert(txt);
}
function IsNumeric(sText)
{
var ValidChars = "0123456789";
var Char;
for (i = 0; i < sText.length; i++) {
Char = sText.charAt(i);
if (ValidChars.indexOf(Char) == -1) {
txt = " Please enter only numeric charecters at this field. \n\n";
txt += "Click OK to continue.\n\n";
objField.DataValue ="";
alert(txt);
return false;
}
}
return true;
}


Üst menüden Preview>Create Form seçeneği ile form test penceresini açarak test edelim.



Son olarak save and close tuşuna basıp kaydedip kapatıktan sonra form’un üst tarafında bulunan publish buttonuna basarak özelleştirmiş olduğumuz özellikleri yayımlarız. Crm form larında javascript le ilgili örnek kodlar yazmaya diğer makalelerimde devam edeceğim görüşmek dileğiyle....


Ercan Top | CRM Software Developer
ercan.top@crmakademi.net
+90 534 335 6873