Разработка
27
Сен
2

Светофор 3.1 (JS)

В прошлом посте (Светофор 3) мы рассмотрели, как с помощью плагина менять рисунок текущей записи, в зависимости от значения какого-либо поля. Но CRM был бы не CRM, если бы одну и ту же задачу нельзя было выполнить более чем одним способом. Поэтому посмотрим как тоже самое запилить с помощью JavaScript:

Приступим:

  • Создайте три PNG Веб-ресурса:
  • Создайте JS Веб-ресурс с таким кодом и подключите его к форме Интереса (в данном случае):
    // Срабатывает на обновление поля
    function LeadQualityCode_OnChange() {
        // Получаем GUID текущей записи и формируем имя PNG Веб-ресурса
        var leadId = Xrm.Page.data.entity.getId();
        var imageResourceName = "new_leadqualitycode" + Xrm.Page.getAttribute("leadqualitycode").getValue() + ".png";
    
        GetImage(leadId, imageResourceName, UpdateImage);
    }
    
    // Функция возвращает PNG Веб-ресурс
    function GetImage(leadId, imageResourceName, successCallback) {
        // Формируем строку URL OData запроса для PNG Веб-ресурса
        var oDataURI = Xrm.Page.context.getClientUrl() + "/XRMServices/2011/OrganizationData.svc/WebResourceSet?$filter=Name eq '" + imageResourceName + "'&$select=Name,Content";
     
        // Формируем и выполняем запрос для возвращения PNG Веб-ресурса
        var req = new XMLHttpRequest();
        req.open("GET", encodeURI(oDataURI), false);
        req.setRequestHeader("Accept", "application/json");
        req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
        req.onreadystatechange = function () {
            if (this.readyState == 4 /* complete */) {
                req.onreadystatechange = null; // Предотвращаем утечки памяти
                if (this.status == 200) {
                    // Передаем ответ функции UpdateImage
                    successCallback(leadId, JSON.parse(this.responseText).d);
                }
                else {
                    // Показываем сообщение об ошибке
                    Xrm.Utility.alertDialog("GetImage Error: не удается вернуть Вбе-ресурс <" + imageResourceName + ">.", function () { });
                }
            }
        };
        req.send();
    }
    
    // Функция Обновляет в текущей записи Интереса рисунок
    function UpdateImage(recordId, webResource) {
        // Записываем контент PNG Веб-ресурса в обект для обнолвения
        var lead = {};
        lead.EntityImage = webResource.results[0].Content; // Контент в виде byte[]
        var jsonContact = JSON.stringify(lead);
     
        // Формируем строку URL OData запроса для обнолвения Интереса
        var oDataURI = Xrm.Page.context.getClientUrl() + "/XRMServices/2011/OrganizationData.svc/LeadSet(guid'" + recordId + "')";
     
        // Формируем и выполняем запрос для возвращения PNG Веб-ресурса
        var req = new XMLHttpRequest();
        req.open("POST", encodeURI(oDataURI), false);
        req.setRequestHeader("Accept", "application/json");
        req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
        req.setRequestHeader("X-HTTP-Method", "MERGE");
        req.onreadystatechange = function () {
            if (this.readyState == 4 /* complete */) {
                req.onreadystatechange = null;
                if (this.status == 204 || this.status == 1223) {
                    // Обновлеяем страницу
                    window.location.reload(false);
                }
                else {
                    var errorMsg2 = "UpdateContactRecord Error: не получилосб обновить Интерес с <" + recordId + ">.";
                    // Показываем сообщение об ошибке
                    Xrm.Utility.alertDialog(errorMsg2, function () { });
                }
            }
        };
        req.send(jsonContact);
    }
    

    Тут у нас три функции:

    • LeadQualityCode_OnChange – вызывается при обновлении поля – формирует переменные и запрашивает рисунок;
    • GetImage – возвращает содержимое рисунка из PNG Веб-ресурса. Если операция прошла успешно, то содержимое рисунка передается в функцию UpdateImage;
    • UpdateImage – обновляет рисунок в текущей записи.
  • Повесьте на onChange поля Оценка вызов функции LeadQualityCode_OnChange.


Комментарии (2)
  • Eugene88 27.09.2014

    Подскажите пожалуйста, куда нужно вставить имя поля, при изменении информации в котором будет меняться цвет?

  • slivka_83 27.09.2014

    Срабатывание кода задается в последнем пункте.
    >Повесьте на onChange поля Оценка вызов функции LeadQualityCode_OnChange

*

code