Блог

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");
	}
}

Комментариев нет

Ваш комментарий