【发布时间】:2018-07-29 11:23:11
【问题描述】:
您好所有专家(我会在某一天,很快!) 这是一个问题。 我想在报价实体中获取相关价格级别(价目表实体)的状态码或状态码。(相关一个) 我已经在引用实体(OnLoad)中尝试过 JS:
var priceLevelStatusCode=Xrm.Page.getAttribute("pricelevelid").getValue()[0].statuscode;
alert(priceLevelStatusCode );
但它在警告框中显示我未定义! 但是当我尝试这个时:
var priceLevelStatusCode=Xrm.Page.getAttribute("pricelevelid").getValue()[0].name;
alert(priceLevelStatusCode );
它在报价单中给了我正确的价目表名称。 问题是什么?如何获取 Pricelist 的 statecode 或 statuscode?p>
更新 1:
我知道应该调用OData,所以我这样做了:
function autoAlarm() {
var pricelevelid = Xrm.Page.getAttribute("pricelevelid").getValue()[0].id;
oDataPath = Xrm.Page.context.getClientUrl() + "/XRMServices/2011/Organizationdata.svc"
var Odata = oDataPath + "/PricelevelSet?$select=name,statecode&$filter=PricelevelId eq guid'" + pricelevelid + "'";
try {
var retrieveReq = new XMLHttpRequest();
retrieveReq.open("GET", Odata);
retrieveReq.setRequestHeader("Accept", "application/json");
retrieveReq.setRequestHeader("Content-Type", "application/json; charset=utf-8");
retrieveReq.onreadystatechange = function () {
retrieveReqCallBack(this);
}
retrieveReq.send();
}
catch (err) {
var text = "There was an error on this page.\n\n";
text += "Error description: " + err.message + "\n\n";
text += "Click OK to continue.\n\n";
alert(text);
}
}
function retrieveReqCallBack(retrieveEntityReq) {
var PrefixText = ""
if (retrieveEntityReq.readyState == 4) {
retrieveEntityReq.onreadystatechange = null;
alert(retrieveEntityReq.status);
if (retrieveEntityReq.status == 200) {
var retrievedEntity = JSON.parse(retrieveEntityReq.responseText).d;
alert(retrievedEntity.hasOwnProperty("statuscode"));
alert(retrievedEntity.statuscode);
}
}
}
但现在它给了我错误 404(我认为找不到!)。 我哪里做错了?
更新 2:
我解决了错误号 404。
这是因为区分大小写。
现在当我要检索值时,它会显示我Undefined。
这是我的新代码:
function autoAlarm() {
var pricelevel = Xrm.Page.getAttribute("pricelevelid").getValue()[0].id;
var pricelevelid = pricelevel.replace("{","").replace("}","");
oDataPath = Xrm.Page.context.getClientUrl() + "/XRMServices/2011/OrganizationData.svc"
var Odata = oDataPath + "/PriceLevelSet?$select=Name,StateCode&$filter=PriceLevelId eq guid'" + pricelevelid + "'";
try {
var retrieveReq = new XMLHttpRequest();
retrieveReq.open("GET", Odata);
retrieveReq.setRequestHeader("Accept", "application/json");
retrieveReq.setRequestHeader("Content-Type", "application/json; charset=utf-8");
retrieveReq.onreadystatechange = function () {
retrieveReqCallBack(this);
}
retrieveReq.send();
}
catch (err) {
var text = "There was an error on this page.\n\n";
text += "Error description: " + err.message + "\n\n";
text += "Click OK to continue.\n\n";
alert(text);
}
}
function retrieveReqCallBack(retrieveEntityReq) {
var PrefixText = ""
if (retrieveEntityReq.readyState == 4) {
retrieveEntityReq.onreadystatechange = null;
alert(retrieveEntityReq.status);
if (retrieveEntityReq.status == 200) {
var retrievedEntity = JSON.parse(retrieveEntityReq.responseText).d;
alert(retrievedEntity.hasOwnProperty("StateCode"));
alert(retrievedEntity.StateCode);
}
}
}
它首先显示false(代码:alert(retrievedEntity.hasOwnProperty("StatusCode"));
然后显示undefiend。
当我在浏览器中访问Odata URL 时,我看到了关于状态和状态代码的信息:
<d:StateCode m:type="Microsoft.Crm.Sdk.Data.Services.OptionSetValue">
<d:Value m:type="Edm.Int32">0</d:Value>
</d:StateCode>
<d:OrganizationId m:type="Microsoft.Crm.Sdk.Data.Services.EntityReference">
<d:Id m:type="Edm.Guid">f52acfb9-78de-402a-a9c2-8229836f0b7e</d:Id>
<d:LogicalName>organization</d:LogicalName>
<d:Name>xxxxx</d:Name>
</d:OrganizationId>
<d:StatusCode m:type="Microsoft.Crm.Sdk.Data.Services.OptionSetValue">
<d:Value m:type="Edm.Int32">100001</d:Value>
</d:StatusCode>
有人可以帮忙吗?
(已解决)更新 3:
我终于可以得到statecode,这是代码:
function autoAlarm() {
var pricelevel = Xrm.Page.getAttribute("pricelevelid").getValue()[0].id;
var pricelevelid = pricelevel.replace("{","").replace("}","");
oDataPath = Xrm.Page.context.getClientUrl() + "/XRMServices/2011/OrganizationData.svc"
var Odata = oDataPath + "/PriceLevelSet?$select=Name,StateCode&$filter=PriceLevelId eq guid'" + pricelevelid + "'";
try {
var retrieveReq = new XMLHttpRequest();
retrieveReq.open("GET", Odata);
retrieveReq.setRequestHeader("Accept", "application/json");
retrieveReq.setRequestHeader("Content-Type", "application/json; charset=utf-8");
retrieveReq.onreadystatechange = function () {
retrieveReqCallBack(this);
}
retrieveReq.send();
}
catch (err) {
var text = "There was an error on this page.\n\n";
text += "Error description: " + err.message + "\n\n";
text += "Click OK to continue.\n\n";
alert(text);
}
}
function retrieveReqCallBack(retrieveEntityReq) {
var PrefixText = ""
if (retrieveEntityReq.readyState == 4) {
retrieveEntityReq.onreadystatechange = null;
if (retrieveEntityReq.status == 200) {
var retrievedEntity = JSON.parse(retrieveEntityReq.responseText).d;
var priceLevelStateCode=retrievedEntity.results[0].StateCode.Value;
alert(priceLevelStateCode);
}
}
}
我的错误是得到Json Array,真正的方法是这样的:
var priceLevelStateCode=retrievedEntity.results[0].StateCode.Value;
谢谢大家。
【问题讨论】:
标签: javascript dynamics-crm dynamics-crm-2011 crm