Подстановка Шаблона электронной почты скриптом
Подписи – обычный функционал для пользователей 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 записи.