Instantly share code, notes, and snippets.
Created
November 14, 2023 03:49
-
Star
0
(0)
You must be signed in to star a gist -
Fork
0
(0)
You must be signed in to fork a gist
-
Save heliconho/03458e79894972cd4736dde6b553bcf1 to your computer and use it in GitHub Desktop.
D365 button utility
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function getSelectedProducts(selectedRecords) { | |
"use strict"; | |
var templateId = "" //from document template entity | |
var query = [] | |
var tc; | |
var entity = "" | |
var keyCol = entity + "id" | |
for(var x = 0; x < selectedRecords.length; x++) { | |
console.log(selectedRecords[x]); | |
query.push(keyCol + " eq " + selectedRecords[x].Id + " ") | |
tc = selectedRecords[x].TypeCode; | |
} | |
var finalQuery = | |
query.length > 1 ? query.map(function(item, index) { if (index !== query.length - 1) {return item + " or ";} else {return item;}}).reduce(function(accumulator, currentValue) {return accumulator + currentValue;}, "") | |
: | |
query[0] | |
Xrm.WebApi.retrieveMultipleRecords(entity, "?$select=dacrm_donationtransactionid,_dacrm_donorname_value&$filter=("+finalQuery+")").then( | |
function success(results) { | |
console.log(results); | |
for (var i = 0; i < results.entities.length; i++) { | |
var result = results.entities[i]; | |
// Columns | |
var dacrm_donationtransactionid = result["dacrm_donationtransactionid"]; // Guid | |
var dacrm_donorname = result["_dacrm_donorname_value"]; // Lookup | |
var dacrm_donorname_formatted = result["[email protected]"]; | |
var dacrm_donorname_lookuplogicalname = result["[email protected]"]; | |
console.log({ | |
dacrm_donationtransactionid : dacrm_donationtransactionid, | |
dacrm_donorname : dacrm_donorname, | |
dacrm_donorname_formatted : dacrm_donorname_formatted, | |
dacrm_donorname_lookuplogicalname : dacrm_donorname_lookuplogicalname, | |
}) | |
var fileName = "Thank You Letter - "+dacrm_donorname_formatted +".docx" | |
console.log(fileName) | |
ExecuteWordMerge(templateId,tc,dacrm_donationtransactionid,9940,fileName,fileName) | |
} | |
}, | |
function(error) { | |
console.log(error.message); | |
} | |
); | |
} | |
function ExecuteWordMerge (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;//"f1f7b994-543b-e711-8106-c4346bac2908" test data; | |
var currentEntityTypeCode = entitytypecodeint;//"10063" test data; | |
var templateType = (templatetype || 9940); //9940 is global and 9941 is personal | |
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) {/* complete */ | |
req.onreadystatechange = null; | |
if (this.status >= 200 && this.status <= 299) {//200 range okay | |
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; | |
//new code, prevent IE errors | |
if (navigator.msSaveOrOpenBlob) { | |
navigator.msSaveOrOpenBlob(blob, filename); | |
return; | |
} | |
else if (window.navigator.msSaveBlob) { // for IE browser | |
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); | |
//window.location = dloadurl;//we can use just this instead of creating an anchor but we don't get to the name the file | |
} | |
else { | |
Xrm.Page.ui.setFormNotification("An Error occurred generating the word document, please contact support if the issue persists,code: " + this.status, "ERROR", "worderror"); | |
} | |
} | |
}; | |
req.send(formdata); | |
} | |
catch (err) { | |
Xrm.Page.ui.setFormNotification("An Error occurred generating the word document, please contact support if the issue persists. " + err.message, "ERROR", "worderror"); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment