示例:通过 Data 参数向 Web 资源传递多个值
发布日期: 2017年1月
适用于: Dynamics 365 (online),Dynamics 365 (on-premises),Dynamics CRM 2016,Dynamics CRM Online
一个 (HTML) Web 资源页只能接受一个名为 data 的自定义参数。 若要在数据参数内传递多个值,您需要对参数进行编码并在页面内对参数进行解码。
此处的页面显示了在单个参数内传递其他值,然后在您的 Web 资源内处理这些值的方法。 可从 sdk\samplecode\js\webresources\showdataparams.htm 处的 SDK 下载文件中获得此页面。
示例 HTML web 资源
以下 HTML 代码表示网页 (HTML) web 资源,包括用于定义三个函数的脚本:
getDataParam:从 body.onload 事件调用,此函数检索传递到页面的任何查询字符串参数并找到名为 data 的参数。
parseDataValue:从 getDataParam 接收数据参数并构建 DHTML 表来显示在 data 参数内传递的任何值。
备注
查询字符串中包括的所有字符将使用 encodeURIComponent 方法进行编码。 此函数使用 JavaScriptdecodeURIComponent 方法对传递的值解码。
noParams:在没有参数传递到页面时显示一条消息。
<!DOCTYPE html >
<html lang="en-us">
<head>
<title>Show Data Parameters Page</title>
<style type="text/css">
body
{
font-family: Segoe UI, Tahoma, Arial;
background-color: #d6e8ff;
}
tbody
{
background-color: white;
}
th
{
background-color: black;
color: White;
}
</style>
<script type="text/javascript">
document.onreadystatechange = function () {
if (document.readyState == "complete") {
getDataParam();
}
}
function getDataParam() {
//Get the any query string parameters and load them
//into the vals array
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("=");
}
//look for the parameter named 'data'
var found = false;
for (var i in vals) {
if (vals[i][0].toLowerCase() == "data") {
parseDataValue(vals[i][1]);
found = true;
break;
}
}
if (!found)
{ noParams(); }
}
else {
noParams();
}
}
function parseDataValue(datavalue) {
if (datavalue != "") {
var vals = new Array();
var message = document.createElement("p");
setText(message, "These are the data parameters values that were passed to this page:");
document.body.appendChild(message);
vals = decodeURIComponent(datavalue).split("&");
for (var i in vals) {
vals[i] = vals[i].replace(/\+/g, " ").split("=");
}
//Create a table and header using the DOM
var oTable = document.createElement("table");
var oTHead = document.createElement("thead");
var oTHeadTR = document.createElement("tr");
var oTHeadTRTH1 = document.createElement("th");
setText(oTHeadTRTH1, "Parameter");
var oTHeadTRTH2 = document.createElement("th");
setText(oTHeadTRTH2, "Value");
oTHeadTR.appendChild(oTHeadTRTH1);
oTHeadTR.appendChild(oTHeadTRTH2);
oTHead.appendChild(oTHeadTR);
oTable.appendChild(oTHead);
var oTBody = document.createElement("tbody");
//Loop through vals and create rows for the table
for (var i in vals) {
var oTRow = document.createElement("tr");
var oTRowTD1 = document.createElement("td");
setText(oTRowTD1, vals[i][0]);
var oTRowTD2 = document.createElement("td");
setText(oTRowTD2, vals[i][1]);
oTRow.appendChild(oTRowTD1);
oTRow.appendChild(oTRowTD2);
oTBody.appendChild(oTRow);
}
oTable.appendChild(oTBody);
document.body.appendChild(oTable);
}
else {
noParams();
}
}
function noParams() {
var message = document.createElement("p");
setText(message, "No data parameter was passed to this page");
document.body.appendChild(message);
}
//Added for cross browser support.
function setText(element, text) {
if (typeof element.innerText != "undefined") {
element.innerText = text;
}
else {
element.textContent = text;
}
}
</script>
</head>
<body>
</body>
</html>
使用此页面
使用示例代码创建一个名为“new_/ShowDataParams.htm”的网页 web 资源。
您要传递的参数是:first=First Value&second=Second Value&third=Third Value
备注
如果您正从窗体编辑器使用“Web 资源属性”对话框添加静态参数,则可以仅粘贴参数,而不将它们编码到 Custom Parameter(data) 字段中。 系统将为您对这些值编码,但是您仍需要对其进行解码并在您的页面中提取值。
对于代码中生成的动态值,对参数使用 encodeURIComponent 方法。 编码的值应为:
first%3DFirst%20Value%26second%3DSecond%20Value%26third%3DThird%20Value
打开将编码的参数作为数据参数值来传递的页面:
http://<server name>/WebResources/new_/ShowDataParams.htm?Data=first%3DFirst%20Value%26second%3DSecond%20Value%26third%3DThird%20Value
备注
如果您已经向窗体添加了 web 资源且已经将未编码的参数粘贴到 Custom Parameters(data) 字段中,则仅可以预览该窗体。
new_/ShowDataParams.htm 将显示动态生成的表:
参数
值
first
第一个值
second
第二个值
third
第三个值
工作原理
若要访问嵌入在数据查询字符串参数值内的值,在您的网页 web 资源中,可以提取该数据参数的值,然后使用代码将字符串分割成数组,从而您可以单独访问每个名称值对。
页面加载时将调用 getDataParam 函数。 该函数只是标识数据参数并将值传递到 ParseDataValue 函数。 如果没有发现数据参数,noParams 函数将向页面(而不是表)添加一条消息。
ParseDataValue 函数使用与 getDataParam 中相似的逻辑来定位自定义参数分隔符,以便创建名称值对的数组。 然后,它生成一个表并将其追加到其他空 document.body。
另请参阅
Microsoft Dynamics 365 的 Web 资源
示例:将文件作为 Web 资源导入
网页 (HTML) Web 资源
Silverlight (XAP) Web 资源
Microsoft Dynamics 365
© 2017 Microsoft。 保留所有权利。 版权