We use encodeURIComponents to pass parameters to a html web resource. We use decodeURIComponent in the HTML web resource to get the string and we split it to an array at the & chars (26). This works fine in the old legacy UI but when testing in the ne Unified Interface the chars '25' are getting added to the string parameter after each '%' char. In the old UI the parameter looks like this after we pass it to the function decodeURIComponent:
- Phil%20Crocker%26test%2640472B11-122B-EA11-A810-000D3A86A78C
but in the Unified Interface the string looks like this after it is passed to the same function:
- Phil%2520Crocker%2526null%2526B184FA94-0E2B-EA11-A810-000D3A86AD25 (ignore the 25 at the end of the GUID - it is a coincidence)
I am using Xrm.Navigation.openWebResource to open the web resource and pass the string parameter. The string parameter is built up like this:
- var params = currentUserName + "&" + resolveComments + "&" + caseId;
Here is the code used:
This opens the web resource and passes the string parameter:
//Open Resolve case form
function OpenResolveCaseForm(caseId, currentUserName, resolveComments)
{
debugger;
var params = currentUserName + "&" + resolveComments + "&" + caseId;
var customParameters = encodeURIComponent(params);
var windowOptions = { height: 200, width: 500 }
Xrm.Navigation.openWebResource("pol_ResolutionForm", windowOptions ,customParameters);
}
This converts the string to an array and should contain 3 seperate string objects:
- System User name
- Text for text box
- Case record ID
function getDataParam() {
debugger;
var vals = new Array();
if (location.search != "") {
vals = location.search.substr(1).split("&");
for (var i in vals) {
vals[i] = vals[i].replace(/\+/g, " ").split("=");
}
var found = false;
for (var i in vals) {
if (vals[i][0].toLowerCase() == "data") {
parseDataValue(vals[i][1]);
found = true;
break;
}
}
}
}
function parseDataValue(datavalue) {
debugger;
if (datavalue != "") {
var vals = new Array();
vals = decodeURIComponent(datavalue).split("&");
for (var i in vals) {
vals[i] = vals[i].replace(/\+/g, " ").split("=");
}
document.getElementsByName("ResolvedBy")[0].value = vals[0];
if (vals[1] == null || vals[1] == "" || vals[1] == undefined || vals[1] == "null") {
document.getElementsByName("comment")[0].value = "";
}
else {
document.getElementsByName("comment")[0].value = decodeURIComponent(vals[1]);
}
caseId = vals[2];
}
}
Anyone else experiencing this behaviour or have an idea why this functionality has changed with the Unified Interface
Thanks
Phil