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
。我该如何调试它?我做错了什么?
最好的方法来调试时使用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);
}
};
}
让我知道如何去。
oDataSelect是正确的,但是当涉及到$ .ajax错误时,我无法识别 –
我发现这篇文章https://community.dynamics.com/crm/b/crmmusings/archive/2011/12/01/odata-with-json-getting相关值从一个查找字段在crm 2011.aspx就像你一样,一步一步的结果。 –
@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”实际上有一个值。)
我有一个在CRM中为REST查询生成JavaScript的工具:https://crmrestbuilder.codeplex.com/ –
当您想要检查实际的http请求和响应时,Fiddler会非常有用。 –
F12 - IE:https://msdn.microsoft.com/library/gg589500(v=vs.85).aspx Chrome:https://developer.chrome.com/devtools ...它也适用于Firefox,可能Safari等。从这里你可以在你的JS代码中设置断点,假设你可以找到脚本。 :)欢呼声。 –