0

我看过几篇不同的文章,它们似乎都暗示了同样的事情:

“使用所需的查询参数创建一个 url,并使用这个新的 Url 设置目标 iFrame,并让这个新页面读取请求”

我想知道是否有一种方法可以在不使用自定义 ASPX 页面的情况下做到这一点?

本质上,我想根据表单上的某些值在 iFrame 或 html Web 资源中动态显示一些文本。

4

1 回答 1

4

SDK 中没有任何内容要求使用 ASPX。事实上,在 CRM 2011 中不鼓励这样做,因为您需要找到一些地方来托管您的 ASP.Net 页面。

使用基本 HTML 页面(在 CRM 中创建为 Web 资源),您可以在 HTML 文档的 HEAD 中声明一些 JScript(或者更好的是,引用 JScript Web 资源)。该 JScript 可以读取通过 iFrame 发送的查询字符串参数并从那里执行所需的任何操作。

请注意,SDK 声明任何自定义查询字符串参数本身必须经过编码并通过data参数发送。

<HTML xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>Example page</TITLE>
<META charset=utf-8></HEAD>
<BODY style="BACKGROUND-COLOR: #f6f8fa; MARGIN: 0px; FONT-FAMILY: Segoe UI" contentEditable=true onload="doStuff">
<SCRIPT type=text/jscript>

function doStuff(){
    getQueryStrings();
    alertOrganisationName();
}

function alertOrganisationName(){
    alert(window.parent.Xrm.Page.context.getOrgUniqueName());
}

function getQueryStrings() {
    var message = document.getElementById("myOutputArea");
    var dataParameterString, querystring;
    // get data from querystring
    if (window.location.search != "") {
        querystring = window.location.search.substr(1).split("&");
        for (var i in querystring) {
            querystring[i] = querystring[i].replace(/\+/g, " ").split("=");
        }
        //look for the parameter named 'data'
        for (var i in querystring) {
            if (querystring[i][0].toLowerCase() == "data") {
                dataParameterString = querystring[i][1];
                break;
            }
        }

        message.innerText += dataParameterString;

    } else {
        message.innerText = "No details were specified in the querystring.";
        alert("ERROR: " + message.innerText);
    }
}       
 </SCRIPT>
 <DIV id="myOutputArea"></DIV>
</BODY></HTML>
于 2012-05-24T11:31:02.030 回答