Разработка
08
Май
0

Подстановка Шаблона электронной почты скриптом

Подписи – обычный функционал для пользователей Outlook. Также, зачастую они автоматически подставляются при создании или ответе на письмо.

Подгоним возможности CRM-ной почты под «стандарты» Outlook.

Как:

  • Создайте Шаблон электронной почты (для данного Примера подойдет и глобальный), содержащий Вашу подпись;
  • Создайте JS Веб-ресурс с таким кодом:
    function AddSignatureToEmail() {
        // Приверяем, что тип форма - Создание
        if (Xrm.Page.ui.getFormType() != 1) { return; }
    
        // GUID шаблона с подписью
        var emailTemplateToLoad = "0cf66728-07f5-e411-80ba-000c291afb9d";
    
        // Проверяем, что поле Описание пусто
        var drawSignature = false;
        var theDescription = Xrm.Page.getAttribute("description").getValue();
        if (theDescription == null || theDescription == undefined || stripHTML(theDescription) == "" || stripHTML(theDescription).length < 10) {
            drawSignature = true;
        }
    
        if (drawSignature) {
            // Возвращяем детали Шаблона
            var command = new RemoteCommand("EmailTemplateService", "GetInstantiatedEmailTemplate");
            command.SetParameter("templateId", emailTemplateToLoad);
            // Если шаблон используется для определенного объекта, то вместо текущего пользователя нужно передать запись этого объекта
            command.SetParameter("objectId", Xrm.Page.context.getUserId());
            command.SetParameter("objectTypeCode", 8);
    
            var result = command.Execute();
    
            if (result.Success) {
                var o = new Object();
                o.EmailBody = "";
                o.EmailSubject = "";
                if (typeof (result.ReturnValue) == "string") {
                    // Переводим в XML формат возвращенные данные
                    oXml = CreateXmlDocument(result.ReturnValue);
                    o.EmailBody = oXml.lastChild.lastElementChild.textContent;
    
                    // Подставляем Шаблон в поле Описание
                    Xrm.Page.getAttribute("description").setValue(o.EmailBody);
                }
            }
        }
    }
    
    function stripHTML(signature) {
        var tmp = document.createElement("DIV");
        tmp.innerHTML = signature;
        return tmp.textContent || tmp.innerText;
    }
    
    // Функция создает XML формат из данных возвращенного шаблона
    function CreateXmlDocument(signatureXmlStr) {
        var parseXml;
    
        if (window.DOMParser) {
            parseXml = function (xmlStr) {
                return (new window.DOMParser()).parseFromString(xmlStr, "text/xml");
            };
        }
        else if (typeof window.ActiveXObject != "undefined" && new window.ActiveXObject("Microsoft.XMLDOM")) {
            parseXml = function (xmlStr) {
                var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM");
                xmlDoc.async = "false";
                xmlDoc.loadXML(xmlStr);
    
                return xmlDoc;
            };
        }
        else {
            parseXml = function () { return null; }
        }
    
        var xml = parseXml(signatureXmlStr);
        if (xml) {
            return xml;
        }
    }
    

    Подставьте в переменную emailTemplateToLoad GUID созданного Шаблона.
    Что тут у нас имеется:

    • Две служебные функции, которые нужны для распарсивания данных;
    • Основная функция AddSignatureToEmail:
      • Проверяет что тип текущей формы – Создание;
      • Проверяет, что поле Описание не заполнено;
      • Запрашивает Шаблон и передает ему текущего пользователя;
      • Подставляет возвращенные данные в поле Описание.
  • Добавьте JS Веб-ресурс к Электронной почты и вызовите на onLoad функцию AddSignatureToEmail.



Примечание: в данном примере использовался Глобальный Шаблон электропочты. Но ничего Вам не мешает задействовать специализированный – для определенного объекта. В этом случае необходимо в коде, при вызове метода GetInstantiatedEmailTemplate, передавать ему код объекта и GUID записи.

Комментарии (0)

*

code