示例:通过 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>

使用此页面

  1. 使用示例代码创建一个名为“new_/ShowDataParams.htm”的网页 web 资源。

    您要传递的参数是:first=First Value&second=Second Value&third=Third Value

    备注

    如果您正从窗体编辑器使用“Web 资源属性”对话框添加静态参数,则可以仅粘贴参数,而不将它们编码到 Custom Parameter(data) 字段中。 系统将为您对这些值编码,但是您仍需要对其进行解码并在您的页面中提取值。

  2. 对于代码中生成的动态值,对参数使用 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) 字段中,则仅可以预览该窗体。

  3. 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。 保留所有权利。 版权