1

我正在尝试进行简单的 odata 查询并且调用成功,但结果始终未定义。我已将 URL 放入描述中,复制并粘贴它,它工作得很好。我已经测试了几十种不同的方法来查看对象是什么,结果是不确定的。我错过了什么??


更新:如下所述,部分问题是引用 data.d.results。当我引用 data.d.results[0] 时,我实际上收到了错误消息“无法获取未定义或空引用的属性 '0'”。我想在这里添加它,因为在搜索该错误消息时我发现几乎没有帮助。

最终答案是以下组合:

  • data.d 仅用于一个结果
  • 系统字段的正确套管;“resProd.Description”而不是“resProd.description”。

回到原来的问题:

下面是我正在使用的代码:

    function setOPDefaults() {
        // Create lookup
        var lookupItem = new Array(); 
        lookupItem = Xrm.Page.getAttribute("productid").getValue();

        if (lookupItem != null) 
        {
            var guid = lookupItem[0].id; 
        }

        var crmOrg = window.location.pathname.split('/')[1];
        var serverUrl = window.location.protocol + "//" + window.location.host + (crmOrg == 'userdefined' ? '' : '/' + crmOrg);
        var ODATA_ENDPOINT = "/XRMServices/2011/OrganizationData.svc";
        var ODATA_PREP  = serverUrl + ODATA_ENDPOINT;

        $.ajax({
            type: "GET",
            contentType: "application/json; charset=utf-8",
            datatype: "json",
            // Tried both of the following URLS (obviously not at the same time)
            url: ODATA_PREP + "/ProductSet(guid'" + guid + "')",
            url: "http://crm/<<orgname>>/XRMServices/2011/OrganizationData.svc/ProductSet(guid'67BA90A3-39D8-E211-8D1E-0050569A6113')",
            beforeSend: function (XMLHttpRequest) {   
                XMLHttpRequest.setRequestHeader("Accept", "application/json");
            },
            success: function (data, textStatus, XmlHttpRequest) {
                var resProd = data.d.results; 

                alert(resProd.length); // This is undefined
                // Below is where I load the URL into description just for testing.  
                // When I copy and paste this URL into the browser, it pulls up results with correct data
                Xrm.Page.getAttribute("description").setValue(ODATA_PREP + "/ProductSet(guid'" + guid + "')");
            },
            error: function (XmlHttpRequest, textStatus, errorThrown) {
                alert("Ajax call failed: " + textStatus + " - " + errorThrown + " || " + XmlHttpRequest.responseText);
            }
        });
    }
4

2 回答 2

1

您只访问了一条记录,因此请尝试输入以下内容:

data.d

data.d.results 用于多个结果。您可以做的另一件事来验证结果是将您的网址直接放在浏览器中。

于 2013-07-20T10:56:01.977 回答
0

在这种情况下,我使用Fiddler。您可以使用它来调试您的 http/https 流量。

或者。如果你有 crm 2011 RU 12,你可以使用内置的 Chrome 调试器。按 F12。在控制台选项卡中 - 右键单击​​ -> 记录 XMLHttpRequest

于 2013-07-22T08:30:31.220 回答