CRM Odata 和 Javascript

CRM Odata and Javascript

我正在制作我的第一个 CRM 项目 - 它是来自其他实体的自动更新字段。我读了一点,试了一下。我有:

var Code = Xrm.Page.getAttribute("new_codeid").getValue();
var oDataPath = Xrm.Page.context.getServerUrl() + "/xrmservices/2011/organizationdata.svc" ;

var Query = "/new_codesSet?" +
    "$select=new_city" + 
    "&$filter=new_code eq '" + Code + "'" + 
    "&$top=1";

var Record_Request = new XMLHttpRequest();
Record_Request.open("GET", oDataPath + Query, true);    
Record_Request.setRequestHeader("Accept", "application/json");
Record_Request.setRequestHeader("Content-Type", "application/json; charset=utf-8");
Record_Request.onreadystatechange = function () 
{
    var Value = "";
    if (this.readyState == 4) 
    {
        if (this.status == 200) 
        {
            var RecordSet = JSON.parse(Record_Request.responseText).d;
            if(RecordSet.results.length > 0)
            {
                Value = RecordSet.new_city;
        }       
    }
}; 
Xrm.Page.getAttribute(address1_city).setValue(Value);

我得到 Unknown Error。我该如何调试它?我做错了什么?

如果属性 "new_codeid" 是查找类型(如我所想),则 .getValue() returns 对象数组。 (这是因为一些查找字段能够保存多个查找引用。)

因此,在您的过滤器中,您只需要数组中第一项的 ID 属性。将代码的第一行修改为:

var Code = Xrm.Page.getAttribute("new_codeid").getValue()[0].id;

(不用说,这仅在 "new_codeid" 实际具有值时有效。)

使用 IE 进行调试的最佳方法是将浏览器设置为允许脚本调试,选项 > 高级 > 取消勾选 'disable script debugging'。

在你的 Jscript 中使用调试器;断点您的代码,这将允许您使用 visual studio 跳转到您的代码。

顺便说一句 > 只需检查一下你的第二步,你正在使用一个名为 PostCodeId.Replace 的变量并将其分配给 CodeIdPostCodeId 的值是多少,你是否试图覆盖CodeId有吗?

我冒昧地将您的代码编写如下:

var CodeId = Xrm.Page.getAttribute("new_codeid").getValue();
debugger; //inseting a breakpoint as explained.
if (CodeId != null) {
    var serverURL = Xrm.Page.context.getClientUrl();
    var oDataSelect = serverURL +
            "/xrmservices/2011/OrganizationData.svc/new_codeSet?" +
            "$select=new_city" +
            "&$filter=new_code/Id eq guid'" + CodeId[0].id + "'" +
            "&$top=1"; //make sure this is correct by testing this build url in you browser

    $.ajax({
        type: "GET",
        contentType: "application/json; charset=utf-8",
        datatype: "json",
        url: oDataSelect,
        beforeSend: function (XMLHttpRequest) {
            XMLHttpRequest.setRequestHeader("Accept", "application/json");
        },
        success: function (data, textStatus, XmlHttpRequest) {
            ReturnCity(data); ;

        },
        error: function (XmlHttpRequest, textStatus, errorObject) {
            alert("OData Execution Error Occurred");
        }
    });

    function ReturnCity(data) {
        if (data.d != null) {                 
            var value = data.d.results[0].new_city;
            Xrm.Page.getAttribute("address1_city").setValue(value);
        }
    };
}

让我知道进展如何。