Home > c#.net, dynamics crm, dynamics crm sdk > MS Dynamics Crm Formunda Dinamik OptionSetSeçenek Kümesi Kullanımı

MS Dynamics Crm Formunda Dinamik OptionSetSeçenek Kümesi Kullanımı

Ms Dynamics Crm formlarında Seçenek KümesiOption Set seçenekleri içerisinde dinamik filtreleme yapabilmek, formda seçilen öğelere göre seçenekleri değiştirmek en sık karşımıza çıkan isteklerdendir. Bu isteği Crm 2011 altyapısının sunduğu imkanlarla kolay bir yapıya indirgemek mümkündür. Web Kaynağı olarak tanımlayacağınız bir xml, forma yapacağınız bir javascript özelleştirmesi filtreleme aşamasındaki bu kolaylığı sağlamak için yeterlidir.

Detaylara geldiğimizde;

Ana kampanya tipine göre kampanya cevaplarının filtreleneceği bir form senaryomuz olduğunu varsayalım. Ana kampanya tipine göre filtrenelecek xml’i tamamen taglerini bizim belirleyeceğimiz şekilde oluşturalım.

<CampaignFilter>
<CampaignStatus TypeValue=”1″ AnswerValue=”1″ />
<CampaignStatus TypeValue=”2″ AnswerValue=”2″ />
<CampaignStatus TypeValue=”2″ AnswerValue=”3″ />
<CampaignStatus TypeValue=”3″ AnswerValue=”4″ />
<CampaignStatus TypeValue=”3″ AnswerValue=”5″ />
<CampaignStatus TypeValue=”3″ AnswerValue=”6″ />
<CampaignStatus TypeValue=”3″ AnswerValue=”7″ />
</CampaignFilter>

Oluşturduğumuz bu xml dosyasını Türü Veri(XML) olacak şekilde web kaynağı olarak kaydedelim. Kaydettiğimiz bu xml dosyası üzerindeki TypeValue Kampanya tipinin “Seçenek KümesiOption Set” setine ait seçenek değerleri, AnswerValue’ysa cevaplara ait seçenek değerleridir. Bu değerler Crm Varlık alanlarında tutulan değerlere karşılık gelmektedir.

Dinamik xml’in okunarak formda işleneceği kısma geldiğimizdeyse, bu özelleştirmeyi kampanya tipinin seçildiği ana Seçenek KümesiOption Set’in OnChange OlayEvent’ine yazmamız gerekmektedir.

function OnChangeControlStatus()
{
var siteUrl = null;
var xmlDoc = new ActiveXObject(“MSXML.DOMDocument”);
xmlDoc.async = “false”;

siteUrl = Xrm.Page.context.getServerUrl();
if(siteUrl !=null)
{
xmlDoc.load(siteUrl +”/WebResources/XmlDosyaAdi”);
}

//CampaignFilter alınıyor
var typeRepository = xmlDoc.getElementsByTagName(“CampaignStatus”);
var typeCount = typeRepository.length;

//Secilen kampanya tipi alınıyor
var selectedTypeValue = Xrm.Page.getAttribute(“KampanyaOptionSetId”).getSelectedOption().value;

//Cevap seçeneklerinin tam listesi Crm sisteminden okunuyor.
var options = Xrm.Page.getAttribute(“CevapOptionSetId”).getOptions();

//Filtreleme işlemi başlıyor
if(selectedTypeValue != null)
{
Xrm.Page.ui.controls.get(“CevapOptionSetId”).clearOptions();
for (var i = 1; i <= options.length; i++) {
if (options[options.length – i].value != “null”) {
Xrm.Page.ui.controls.get(“CevapOptionSetId”).addOption(options[options.length – i], i-1);
}
}

//Loop through each value in the mappings file to ensure
for (var i = 0; i < typeCount; i++)
{
if (typeRepository[i].getAttribute(‘TypeValue’) != selectedTypeValue)
{
var answervalue = typeRepository[i].getAttribute(‘AnswerValue’);
Xrm.Page.ui.controls.get(“CevapOptionSetId”).removeOption(answervalue);
}
}
}
}

Dikkat edilmesi gereken ve genelde gözden kaçan bir hatayı ekleyerek bitirmek istiyorum; filtrelemede kullanılacak tüm alanların crm varlığında Seçenek KümesiOption Set’in dahilinde tanımlı olması gerekmektedir.

  1. No comments yet.
  1. No trackbacks yet.

Leave a comment