无法通过 JS 访问相关实体的状态码或状态码
Cannot access statecode or statuscode of related Entity Via JS
各位专家大家好(总有一天,我会的!)
这是一个问题。
我想在报价实体中获取相关价格水平(价目表实体)的状态代码或状态代码。(相关的)
我在引用实体(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?
更新 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;
谢谢大家
Pricelevel 是引用中的查找,您可以使用 Xrm.Page.getAttribute("pricelevelid").getValue()[0]
获取该相关实体记录的 ID 和名称(显示文本)。对于任何其他属性 (ex.statecode),您必须进行 Web api 调用以使用 Id 键从数据库中获取它。
更新:
您可以使用 2011 compatible CRM REST Builder 来构建查询,测试和精确代码段可以在 CRM 表单 js 库中使用。在 Dev CRM 实例中下载并导入此托管解决方案并立即构建查询。
可以使用 OrganizationData.svc
并通过包装在 XMLHttpRequest
中检索必要的属性。 Read more
样本:
var pricelevelid = Xrm.Page.getAttribute("pricelevelid").getValue()[0].id;
var Odata = oDataPath + "/PriceLevelSet?$select=name,statecode&$filter=PriceLevelId eq guid'" + pricelevelid + "'";
Lookup 控件包含目标实体的 ID
和 Name
。
在您的情况下,Lookup 控件是 pricelevelid
控件
如果您想从相关价格水平记录中获取更多信息,您需要检索特定记录。
在 CRM 365 中执行此操作
这是关于如何使用此方法的 link 到 MSDN Article,但基本上你提供:
- 实体名称(在您的例子中
pricelevel
)
- 记录的 ID(您可以从查找控件中获取)
- 选项(强烈建议至少指定要检索的列)
- 操作成功时执行的函数
- 操作失败时执行的函数
应该是这样的:
var pricelevelid = Xrm.Page.getAttribute("pricelevelid").getValue()[0].id;
Xrm.WebApi.retrieveRecord(
"pricelevel",
pricelevelid,
"?$select=name,statuscode",
function(record) { alert (record.name); },
function(err) { alert(err); }
);
各位专家大家好(总有一天,我会的!) 这是一个问题。 我想在报价实体中获取相关价格水平(价目表实体)的状态代码或状态代码。(相关的) 我在引用实体(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?
更新 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;
谢谢大家
Pricelevel 是引用中的查找,您可以使用 Xrm.Page.getAttribute("pricelevelid").getValue()[0]
获取该相关实体记录的 ID 和名称(显示文本)。对于任何其他属性 (ex.statecode),您必须进行 Web api 调用以使用 Id 键从数据库中获取它。
更新:
您可以使用 2011 compatible CRM REST Builder 来构建查询,测试和精确代码段可以在 CRM 表单 js 库中使用。在 Dev CRM 实例中下载并导入此托管解决方案并立即构建查询。
OrganizationData.svc
并通过包装在 XMLHttpRequest
中检索必要的属性。 Read more
样本:
var pricelevelid = Xrm.Page.getAttribute("pricelevelid").getValue()[0].id;
var Odata = oDataPath + "/PriceLevelSet?$select=name,statecode&$filter=PriceLevelId eq guid'" + pricelevelid + "'";
Lookup 控件包含目标实体的 ID
和 Name
。
在您的情况下,Lookup 控件是 pricelevelid
控件
如果您想从相关价格水平记录中获取更多信息,您需要检索特定记录。
在 CRM 365 中执行此操作
这是关于如何使用此方法的 link 到 MSDN Article,但基本上你提供:
- 实体名称(在您的例子中
pricelevel
) - 记录的 ID(您可以从查找控件中获取)
- 选项(强烈建议至少指定要检索的列)
- 操作成功时执行的函数
- 操作失败时执行的函数
应该是这样的:
var pricelevelid = Xrm.Page.getAttribute("pricelevelid").getValue()[0].id;
Xrm.WebApi.retrieveRecord(
"pricelevel",
pricelevelid,
"?$select=name,statuscode",
function(record) { alert (record.name); },
function(err) { alert(err); }
);