使用html作为参数的动态365 CRM openEntityForm或windows.open

时间:2017-11-21 15:00:58

标签: javascript dynamics-crm crm

我有电子邮件模板,我'解析'并将(从当前的Lead表单)作为参数发送到新的电子邮件表单(来自JavaScript)。

var parameters = {};
parameters["subject"] = 'Subject name';
parameters["description"] = '<font face="Tahoma, Verdana, Arial" size=2 style="display:inline;"><br></font>';

Xrm.Utility.openEntityForm("email", null, parameters);

let serverUrl = "https://companyname.crm4.dynamics.com";

let extraqs = "subject=Subject name";
extraqs += '&description=<font face="Tahoma, Verdana, Arial" size=2 style="display:inline;"><br></font>';

let targetUrl = serverUrl.replace(/\/$/, "") + "/main.aspx?etn=email&pagetype=entityrecord&extraqs=" + encodeURIComponent(extraqs);
parent.open(targetUrl);

let serverUrl = "https://companyname.crm4.dynamics.com";

let extraqs = 'subject=' + encodeURIComponent('Subject name');
extraqs += '&description=' + encodeURIComponent('<font face="Tahoma, Verdana, Arial" size=2 style="display:inline;"><br></font>');

let targetUrl = serverUrl.replace(/\/$/, "") + "/main.aspx?etn=email&pagetype=entityrecord&extraqs=" + extraqs;
parent.open(targetUrl);

每次我想发送任何类似html标签的内容时,我都会收到错误(任何内容都包含'&lt;'或'&gt;'符号)。

是否有可能通过参数发送我的html标记,这有什么安全问题吗?

2 个答案:

答案 0 :(得分:4)

这可以通过encodeURIComponent / decodeURIComponent像这样解决:

parameters["description"] = encodeURIComponent('<html here>');

另一方面:

var description = decodeURIComponent(incomingParameterHere);

以这种方式,您的HTML将作为一个简单的字符串传递。这可以(应该?)应用于通过JS传递的所有字符串。

答案 1 :(得分:0)

我发现要包含html标记的描述内容,需要定义pId和pType值(如果这是设计使然或错误,那么会更好)

var entityFormOptions = {
    entityName: "email"
};

var emailFormParams = {
    subject: "subject",
    description:"<p1>html here</p1>",
    //sets the regarding - needed for description to be html
    pId:"{GUID}",
    pType:112 //objectTypeCode for the party
};

Xrm.Navigation.openForm(entityFormOptions, emailFormParams);