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
的变量并将其分配给 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);
}
};
}
让我知道进展如何。
我正在制作我的第一个 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
的变量并将其分配给 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);
}
};
}
让我知道进展如何。