CRM Odata和Javascript

问题描述:

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

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。我该如何调试它?我做错了什么?

+0

我有一个在CRM中为REST查询生成JavaScript的工具:https://crmrestbuilder.codeplex.com/ –

+0

当您想要检查实际的http请求和响应时,Fiddler会非常有用。 –

+0

F12 - IE:https://msdn.microsoft.com/library/gg589500(v=vs.85).aspx Chrome:https://developer.chrome.com/devtools ...它也适用于Firefox,可能Safari等。从这里你可以在你的JS代码中设置断点,假设你可以找到脚本。 :)欢呼声。 –

最好的方法来调试时使用IE浏览器来设置您的浏览器以允许脚本调试,选项>高级>取消勾选'禁用脚本调试'。

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

BTW>查一下你的第二个去,你使用的是被称为PostCodeId.Replace变量并赋予它CodeId,什么是PostCodeId的价值,并在尝试覆盖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); 
     } 
    }; 
} 

让我知道如何去。

+0

oDataSelect是正确的,但是当涉及到$ .ajax错误时,我无法识别 –

+0

我发现这篇文章https://community.dynamics.com/crm/b/crmmusings/archive/2011/12/01/odata-with-json-getting相关值从一个查找字段在crm 2011.aspx就像你一样,一步一步的结果。 –

+0

@Hristo - 抱歉,做JSON jQuery调用这种方式包括jquery库和json库作为您的解决方案\ web资源的webresources。 jquery1.4.1.min.js和json2.js文件位于crm 2011 sdk(\ sdk \ samplecode \ js \ restendpoint \ jqueryrestdataoperations \ jqueryrestdataoperations \ scripts)中。 –

如果属性“new_codeid”是查找类型(正如我所设想的那样),.getValue()返回一个对象数组。 (这是因为少数查找字段能够保存多个查找参考。)

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

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

(不用说,这只有在“new_codeid”实际上有一个值。)