Dynamics 365 Javascript etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Dynamics 365 Javascript etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

Dynamics 365 Javascript - Arama Alanına Filtre Ekleme (Add Pre-Search Filters For Lookup)

Çoğu zaman, doğada dinamik olan bazı diğer değer / koşullara dayanarak arama için arama sonuçlarını filtrelememiz gereken bir durumla karşı karşıyayız.

Örneğin, bir fırsat üzerinde "Birincil Satış Temsilcisi"  adında arama alanı olsun . Daha sonra bu alanda yalnızca Satış Ekibinin bir parçası olarak bulunan üyeleri göstermek için “Birincil Satış Temsilcisi” aramasına filtre ekleyebiliriz.

CRM 2013 ile birlikte gelen bu özellik sayesinde  bu filtreler OnLoad () olayında javascript web kaynağına dinamik olarak eklenebilir.

Bu özelik sayesinde birden fazla varlık seçilen alanlar için aşağıdaki gibi filtreleme eklenebilir.

Örneğin , Randevu formunda Katılımcıların girildiği alanda sadece İlgili Kişi kayıtlarının gelmesin istiyorsak aşağıdaki gibi alana filtreleme ekleyebiliriz.









Dynamics CRM Javascript - String Karakter Büyük Harf (CRM Text Field ToUppercase)

Aşağıdaki javascript metotlarını kullanarak girilen kelimenin sadece ilk harfini veya tamamını büyük harfe çevirebilirsiniz. Bu metotları text alanın onchange kısmında çağırmanız gereklidir.
CRM de alanın onchange ini tanımlarken parametreler ile alanın adını göndermeniz yeterlidir.


function FirstCharacterToUpperCase(fieldName) {
    try {
        var name = GetValue(fieldName);

        if (name != null) {

            var dizi = name.split(" ");
            var sonHal = "";

            for (i = 0; i < dizi.length; i++) {
                var text = dizi[i];
                if (text != null && text.length != 0) {
                    var ilkKarakter = text.substring(0, 1);
                    var devami = text.substring(1, text.length);

                    if (i != 0) {
                        sonHal += " " + ToUpperCaseStr(ilkKarakter) + devami.toLowerCase();
                    }
                    else {
                        sonHal += (ilkKarakter == "i" ? "İ" : ToUpperCaseStr(ilkKarakter)) + devami.toLowerCase();
                    }
                }
            }

            SetValue(fieldName, sonHal);
        }
    }
    catch (e) {
        CommonAlert("An error occured in FirstCharacterToUpperCase Function.\nError: " + e.message);
    }
}

function FullToUpperCase(fieldName) {
    try {
        var name = GetValue(fieldName);

        if (name != null && name.length != 0) {
            var sonHal = "";

            for (var i = 0; i < name.length; i++) {
                sonHal += (name[i] == "i" ? "İ" : name[i].toUpperCase());
            }

            SetValue(fieldName, sonHal);
        }
    }
    catch (e) {
        CommonAlert("An error occured in FullToUpperCase Function.\nError: " + e.message);
    }
}


function GetValue(field) {
    var attribute = GetAttribute(field);
    if (attribute != null) {
        return attribute.getValue();
    }
    return null;
}

function SetValue(field, value) {
    var attribute = GetAttribute(field);
    if (attribute != null) {
        return attribute.setValue(value);
    }
    return null;
}

Dynmics 365 Javascript - Formdaki Zorunlu Alan Kontrolü

Formdaki gerekli olan alanların dolu olup olmadığını kontrol etmek için aşağıdaki script metodunu kullanabilirsiniz. Getiye dönüş olarak True veya false değer dönecektir.


Javascript

function CheckMandatoryFields() {
    var populated = true;
    Xrm.Page.getAttribute(function (attribute, index) {
        if (attribute.getRequiredLevel() == "required") {
            if (attribute.getValue() === null) {
                populated = false;
            }
        }
    });
    return populated;
}

Dynamics 365 Javascript - Email Format Script



function EmailFormat(field) {
    try {
        var fieldName = field.getEventSource().getName();
        var email = GetValue(fieldName);

        if (email != null) {
            email = ReplaceFromTurkishChar(email);

            SetValue(fieldName, email);
        }
    }
    catch (e) {
        CommonAlert("An error occured in EmailFormat Function.\nError: " + e.message);
    }
}

function ReplaceFromTurkishChar(text) {

    var normal = new Array("i", "s", "u", "c", "o", "g", "C", "S", "O", "U", "G", "I");
    var turkish = new Array("ı", "ş", "ü", "ç", "ö", "ğ", "Ç", "Ş", "Ö", "Ü", "Ğ", "İ");

    for (var i = 0; i < text.length; i++) {
        for (var j = 0; j < 12; j++) {
            if ((text.charAt(i)) == turkish[j]) {

                text = text.replace((text.charAt(i)), normal[j]);
            }
        }
    }

    return text;
}

NOT
Email alanımıza functionımızı eklerken Pass execution context as first parameter checkboxını seçmemiz gerekecektir.



Dynamics 365 Javascript - Telefon Formatlama Örnek Script


Aşağıdaki örnek kod üzerinde hem Türkiye hem de Türkiye dışındaki ülkeler için telefon formatlama yöntemini bulabilirsiniz.


function TelephoneFormat(fieldName, ulkefieldname,ulkekoduname) {
    try {
        var langId = Xrm.Page.context.getUserLcid();
        if (langId != 1055)
            langId = 1033;

        var oField = GetAttribute(fieldName);

        if (GetValue(fieldName) != null && GetValue(fieldName) != "") {
            var ulke = GetValue(ulkefieldname);
            var _ulkeid = null;

            if (ulke != null && ulke[0] != null && ulke[0].id != null)
                _ulkeid = ConverttoStringFromGuid(ulke[0].id);

            if (_ulkeid != null) {
                var sTmp = oField.getValue().replace(/[^0-9]/g, "");

                if (_ulkeid == GetTurkiyeId()) {
                    switch (sTmp.length) {
                        case 13:
                            oField.setValue("+" + sTmp.substr(0, 3) + " " + sTmp.substr(3, 3) + " " + sTmp.substr(6, 7));
                            break;
                        case 12:
                            oField.setValue("+" + sTmp.substr(0, 2) + " " + sTmp.substr(2, 3) + " " + sTmp.substr(5, 7));
                            break;
                        case 11:
                            oField.setValue("+9" + sTmp.substr(0, 1) + " " + sTmp.substr(1, 3) + " " + sTmp.substr(4, 7));
                            break;
                        case 10:
                            oField.setValue("+90 " + sTmp.substr(0, 3) + " " + sTmp.substr(3, 7));
                            break;
                        case 7:
                            oField.setValue("+90 232 " + sTmp.substr(0, 3) + sTmp.substr(3, 4));
                            break;
                        default:
                            alert('2324440011 şeklinde en az 10 haneli bir telefon numarası giriniz.');
                            SetValue(fieldName, null);
                            break;
                    }
                }
                else {
                    TelephoneFormat2(fieldName, ulkekoduname);
                }
            }
            else {
                if (langId == 1055)
                    CommonAlert("Telefon numarası girmek için ilk önce ülke seçilmelidir.");
                else
                    CommonAlert("Please , firstly select country.");


                setTimeout(function () {
                    SetValue(fieldName, null);
                }, 200);
             
            }
        }
    }
    catch (e) {
        CommonAlert("An error occured in TelephoneFormat Function.\nError: " + e.message);
    }
}

function TelephoneFormat2(fieldadi, ulkekoduname) {
    try {
        var value = GetValue(fieldadi);

        if (typeof (value) != "undefined" && value != null) {
            value = FormatPhoneNumber(value, ulkekoduname);
        }

        SetValue(fieldadi, value);
    }
    catch (e) {
        alert('TelephoneFormat2 error');
    }
}

function FormatPhoneNumber(phoneNo, ulkekoduname) {
    var formattedPhone = phoneNo;
    var ulkekodu = GetValue(ulkekoduname);
    ulkekodu = ulkekodu != null ? ulkekodu : "";

    if (phoneNo.length < 5) {
        if (langId == 1055)
            CommonAlert("Telefon numarası 5 karakterden az girilemez");
        else if (langId == 1055)
            CommonAlert("PhoneFormat error.");

        formattedPhone = "";

        return formattedPhone;
    }

    if (phoneNo.length == 5)
        formattedPhone = phoneNo.replace(/(\d{3})(\d{2})/, "+" + ulkekodu + ' $1 $2');
    else if (phoneNo.length == 6)
        formattedPhone = phoneNo.replace(/(\d{3})(\d{3})/, "+" + ulkekodu + ' $1 $2');
    else if (phoneNo.length == 7)
        formattedPhone = phoneNo.replace(/(\d{3})(\d{4})/, "+" + ulkekodu + ' $1 $2');
    else if (phoneNo.length == 8)
        formattedPhone = phoneNo.replace(/(\d{3})(\d{3})(\d{2})/, "+" + ulkekodu + ' $1 $2$3');
    else if (phoneNo.length == 9)
        formattedPhone = phoneNo.replace(/(\d{3})(\d{3})(\d{3})/, "+" + ulkekodu + ' $1 $2$3');
    else if (phoneNo.length == 10)
        formattedPhone = phoneNo.replace(/(\d{3})(\d{3})(\d{4})/, "+" + ulkekodu + ' $1 $2$3');
    else if (phoneNo.length == 11)
        formattedPhone = phoneNo.replace(/(\d{2})(\d{3})(\d{3})(\d{3})/, "+" + ulkekodu + '$1 $2 $3$4');
    else if (phoneNo.length > 11)
        formattedPhone = phoneNo.replace(/^\(?([0-9]{2})?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})?([0-9]*)$/, "+" + ulkekodu + " $1($2) $3-$4 x$5");

    return formattedPhone;
}

function SetValue(field, value) {
    var attribute = GetAttribute(field);
    if (attribute != null) {
        return attribute.setValue(value);
    }
    return null;
}

function GetValue(field) {
    var attribute = GetAttribute(field);
    if (attribute != null) {
        return attribute.getValue();
    }
    return null;
}

function GetAttribute(field) {
    return Xrm.Page.getAttribute(field);
}

Dynamics 365 Javascript - İki Kere Alert Verme Sorunu

Bazı durumlarda alan kontrolü yaparken kullanıcıya uyarı veririz ve alanın değerini de null yaparız. Bu gibi durumlarda ekrana verilen uyarının iki kere geldiğini görürüz . Javascript kodumuzu debug ettiğimizde düzgün çalıştığını ama normal durumda iki kere alert verdiğini farkederiz.

Örnek vermek gerekirse ,  telefon alanları için formatlama yapalım . Belli durumlar haricinde ekrana "2124440011 şeklinde en az 10 haneli bir telefon numarası giriniz" alertini verelim ve  telefon alanının değerine null atayalım. İşte bu durumda  ekrana verilen "2124440011 şeklinde en az 10 haneli bir telefon numarası giriniz" alerti 2 kere görünecektir..

Örnek Kod Parçası

 alert('2324440011 şeklinde en az 10 haneli bir telefon numarası giriniz.');
 Xrm.Page.getAttribute("fieldname").setValue(null);

function TelephoneFormat(fieldName, ulkefieldname) {
    try {
        var langId = Xrm.Page.context.getUserLcid();
        if (langId != 1055)
            langId = 1033;

        var oField = GetAttribute(fieldName);

        if (GetValue(fieldName) != null && GetValue(fieldName) != "") {
            var ulke = GetValue(ulkefieldname);
            var _ulkeid = null;

            if (ulke != null && ulke[0] != null && ulke[0].id != null)
                _ulkeid = ConverttoStringFromGuid(ulke[0].id);

            if (_ulkeid != null) {
                var sTmp = oField.getValue().replace(/[^0-9]/g, "");

                if (_ulkeid == GetTurkiyeId()) {
                    switch (sTmp.length) {
                        case 13:
                            oField.setValue("+" + sTmp.substr(0, 3) + " " + sTmp.substr(3, 3) + " " + sTmp.substr(6, 7));
                            break;
                        case 12:
                            oField.setValue("+" + sTmp.substr(0, 2) + " " + sTmp.substr(2, 3) + " " + sTmp.substr(5, 7));
                            break;
                        case 11:
                            oField.setValue("+9" + sTmp.substr(0, 1) + " " + sTmp.substr(1, 3) + " " + sTmp.substr(4, 7));
                            break;
                        case 10:
                            oField.setValue("+90 " + sTmp.substr(0, 3) + " " + sTmp.substr(3, 7));
                            break;
                        case 7:
                            oField.setValue("+90 232 " + sTmp.substr(0, 3) + sTmp.substr(3, 4));
                            break;
                        default:
                            alert('2324440011 şeklinde en az 10 haneli bir telefon numarası giriniz.');
                            SetValue(fieldName, null);
                            break;
                    }
                }
                else {
                    TelephoneFormat2(fieldName);
                }
            }
            else {
                if (langId == 1055)
                    CommonAlert("Telefon numarası girmek için ilk önce ülke seçilmelidir.");
                else
                    CommonAlert("Please , firstly select country.");

                SetValue(fieldName, null);
            }
        }
    }
    catch (e) {
        CommonAlert("An error occured in TelephoneFormat Function.\nError: " + e.message);
    }
}


Çözüm 

Çözüm için alanın değerini null yaptığımız satırı setTimeout ile kullanalım . Bu şekilde ekrana uyarı 1 kere gelecektir.

 alert('2324440011 şeklinde en az 10 haneli bir telefon numarası giriniz.');
 setTimeout(function () {
                    Xrm.Page.getAttribute("fieldname").setValue(null);
                }, 200);