Dynamics CRM 365: Загрузка шаблона Word по кнопке
- Алексей
- Комментариев нет
В системе есть возможность подготавливать шаблоны Word для выгрузки, однако, чтобы в дальнейшем его сформировать пользователю будет нужно сначала нажать кнопку «Шаблоны Word», после чего выбрать нужный шаблон из списка, который включает в себя кнопки для формирования новых шаблонов и прочее не нужные пользователю вещи. Это не всегда удобно и быстро, а в данной статье мы рассмотрим метод, который мы сможем вызывать в отдельной кнопке и сразу формировать нужный нам шаблон.
В ниже представленный метод нам нужно передать следующие параметры:
- wordtemplateid – идентификатор шаблона Word
- entitytypecodeint – код сущности для которой используем шаблон
- ids – массив идентификаторов выгружаемых сущностей, или идентификатор одной сущности
- templatetype – тип шаблона (глобальный или личный), по-умолчанию глобальный
- fieldforfilename – имя поля из которого сформируется название файла
- filenameoverride – параметр который позволяет задать своё название файла
function executeWordMerg(wordtemplateid, entitytypecodeint, ids, templatetype, fieldforfilename, filenameoverride) { try { Xrm.Page.ui.clearFormNotification("worderror"); var funcpath = Xrm.Page.context.getClientUrl() + "/_grid/print/print_data.aspx"; if (typeof ids !== "object") { var tids = ids; ids = new Array(); ids.push(tids); } var wordTemplateId = wordtemplateid; var currentEntityTypeCode = entitytypecodeint; var templateType = (templatetype || 9940); //9940 глобальные и 9941 личные var fieldForFileName = (fieldforfilename || ""); var formdata = "exportType=MergeWordTemplate&selectedRecords=" + encodeURIComponent(JSON.stringify(ids)) + "&associatedentitytypecode=" + currentEntityTypeCode + "&TemplateId=" + wordTemplateId + "&TemplateType=" + templateType; var req = new XMLHttpRequest(); req.open("POST", funcpath, true); req.responseType = "arraybuffer"; req.setRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"); req.setRequestHeader("Accept-Language", "en-US,en;q=0.8"); req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); req.onreadystatechange = function () { if (this.readyState == 4) { req.onreadystatechange = null; if (this.status >= 200 && this.status <= 299) { var mimetype = (2 === 2) ? "application/vnd.openxmlformats-officedocument.wordprocessingml.document" : "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; var blob = new Blob([req.response], { type: mimetype }); var fileNameTemplate = req.getResponseHeader('content-disposition').split('filename=')[1].replace(/'/g, ""); var dloadurl = URL.createObjectURL(blob); var filename = (fieldForFileName !== "" && Xrm.Page.getAttribute(fieldForFileName) !== null && Xrm.Page.getAttribute(fieldForFileName).getValue() !== "") ? Xrm.Page.getAttribute(fieldForFileName).getValue() : fileNameTemplate; filename = filenameoverride || filename; if (navigator.msSaveOrOpenBlob) { navigator.msSaveOrOpenBlob(blob, filename); return; } else if (window.navigator.msSaveBlob) { window.navigator.msSaveBlob(blob, filename); return; } var a = document.createElement("a"); document.body.appendChild(a); a.style = "display: none"; a.href = dloadurl; a.download = filename; a.click(); URL.revokeObjectURL(dloadurl); } else { Xrm.Page.ui.setFormNotification("Произошла ошибка при создании документа Word. Если проблема не устранена, обратитесь в службу поддержки.: " + this.status, "ERROR", "worderror"); } } }; req.send(formdata); } catch (err) { Xrm.Page.ui.setFormNotification("Произошла ошибка при создании документа Word. Если проблема не устранена, обратитесь в службу поддержки.: " + err.message, "ERROR", "worderror"); } }
Комментариев нет