2015-04-17 60 views
1

我正在製作我的第一個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代碼中設置斷點,假設你可以找到腳本。 :)歡呼聲。 –

回答

0

最好的方法來調試時使用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)中。 –

0

如果屬性「new_codeid」是查找類型(正如我所設想的那樣),.getValue()返回一個對象數組。 (這是因爲少數查找字段能夠保存多個查找參考。)

因此,在您的過濾器中,只需要數組中第一項的id屬性。修改代碼的第一行是:

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

(不用說,這隻有在「new_codeid」實際上有一個值。)