如何使用Javascript-CRM获取URL参数?

时间:2016-08-23 09:33:33

标签: javascript dynamics-crm-2011

我正在使用Microsoft Dynamics CRM。该页面打开一个带有webresource的弹出窗口。我传递URL的参数,我需要让他们使用javascript。 有代码:

function open() {
   var dataItemValue = Xrm.Page.data.entity.getId();
   Xrm.Utility.openWebResource("xpto_/ShowDataParams.htm", dataItemValue, 300,300);    
}

console.log(parameters)正在运作。在另一个功能我需要访问parameters。 感谢的。

2 个答案:

答案 0 :(得分:0)

关键是参数不可用。将参数传递给表单的正确方法是将其传递给url:

var addParams = "Param1=" + param1 + "&Param2=" + param2;
var webresourceurl = "/webresources/new_/webresource.htm?Data=" + encodeURIComponent(addParams);

本文提供了详细说明 - http://butenko.pro/2014/06/dynamics-crm-2013-step-by-step-creating-dialog-windows/

答案 1 :(得分:0)

我发现将GET个参数发送到自定义WebResources无法正常工作的情况。不知何故,它可能会破坏CRM核心中的内部URL重写。

通常它显示为错误500而不是您预期的网络内容。原因是,正如我所提到的,您的GET参数会混淆标准的CRM URL重写机制。添加自定义参数时,URL不再匹配重写规则和CRM爆炸,错误为500

在这种情况下,您可以使用hash-bang字符串。它们可以传递给URL,但前缀为#!个符号。这个技巧使它们对于服务器端操作是不可见的,因为URL中的#符号之后的所有内容都是指页面内的锚点(本地链接),这就是为什么它被普通服务器端跳过的原因代码。

但你可以在客户端解码它。

例如,您的网址可能如下所示:

xpto_/ShowDataParams.htm#!name1=value1&name2=value2

您可以使用以下函数从您的网络资源中的网址获取名称 - 值对:

function ExtractParameters() {
    var url = window.location.href;
    var pairs = {};
    var hashes = url.slice(url.indexOf('#!') + 2).split('&');

    for(var i = 0; i < hashes.length; i++) {
        var hash = hashes[i].split('=');

        if(hash.length > 1) {
            pairs[hash[0]] = hash[1];
        } else {
            pairs[hash[0]] = null;
        }   
    }

    return pairs;
}

附注:没有必要使用#! #很重要,但我更喜欢使用更复杂的符号组合以达到详细目的,因此它赢得了#39; t与其他任何东西混合。