crm 2016 javaScript 通过 Fetch 获取查找名称
crm 2016 javaScript Get lookup name by Fetch
我尝试从实体中获取查找字段(无论类型如何)
使用 fetchXml 但我没有得到查找文本的结果;
例如(账户实体,所有者字段):
var fetchXml = "<fetch mapping='logical'>" +
"<entity name='account'>" +
"<all-attributes />" +
"<filter>" +
"<condition attribute='accountid' operator='eq' value='{475B158C-541C-E511-80D3-3863BB347BA8}' />" +
"</filter>" +
"</entity></fetch>";
var fetchResult = XrmServiceToolkit.Soap.Fetch(fetchXml);
var owner = fetchResult[0].attributes["ownerid"];
结果 [logicalName 缺失]:
我找到了使用 linkEntity 的解决方案,但这对我来说不是一个好的解决方案,因为我需要一个通用函数
如果我直接从表单中获取该字段,我将获得所有信息:
Xrm.Page.getAttribute("ownerid").getValue()[0]
我看到您正在使用 XrmServiceToolkit 和 CRM 2016。我在使用这种工具组合时遇到了同样的问题
我发现其他人(不是我)已经报告并解决了这个问题。参考this bug
似乎从 CRM 返回的 XML 已更改为包含 2 个新节点,这打破了 XrmServiceToolkit 读取选项集值的方式。
错误报告包括一个可能的修复。我把它放在这里以供将来参考
原来的XrmServiceToolkit有这段代码
case "a:EntityReference":
entRef = new xrmEntityReference();
entRef.type = sType.replace('a:', '');
var oChildNodes = tempNode.childNodes;
entRef.id = getNodeText(oChildNodes[0]);
entRef.logicalName = getNodeText(oChildNodes[1]);
entRef.name = getNodeText(oChildNodes[2]);
obj[sKey] = entRef;
break;
您可以看到它明确指代 oChildNodes[0]
; oChildNodes[1]
;和 oChildNodes[2]
- 这是导致您遇到的错误的原因。
更新后的代码是:
case "a:EntityReference":
entRef = new xrmEntityReference();
entRef.type = sType.replace('a:', '');
var oChildNodes = tempNode.childNodes;
for (var n = 0; n < oChildNodes.length; n++) {
var currentNodeName = oChildNodes[n].nodeName;
switch (currentNodeName) {
case "a:Id":
entRef.id = getNodeText(oChildNodes[n]);
break;
case "a:Name":
entRef.name = getNodeText(oChildNodes[n]);
break;
case "a:LogicalName":
entRef.logicalName = getNodeText(oChildNodes[n]);
break;
}
}
obj[sKey] = entRef;
break;
我尝试从实体中获取查找字段(无论类型如何) 使用 fetchXml 但我没有得到查找文本的结果;
例如(账户实体,所有者字段):
var fetchXml = "<fetch mapping='logical'>" +
"<entity name='account'>" +
"<all-attributes />" +
"<filter>" +
"<condition attribute='accountid' operator='eq' value='{475B158C-541C-E511-80D3-3863BB347BA8}' />" +
"</filter>" +
"</entity></fetch>";
var fetchResult = XrmServiceToolkit.Soap.Fetch(fetchXml);
var owner = fetchResult[0].attributes["ownerid"];
结果 [logicalName 缺失]:
我找到了使用 linkEntity 的解决方案,但这对我来说不是一个好的解决方案,因为我需要一个通用函数
如果我直接从表单中获取该字段,我将获得所有信息:
Xrm.Page.getAttribute("ownerid").getValue()[0]
我看到您正在使用 XrmServiceToolkit 和 CRM 2016。我在使用这种工具组合时遇到了同样的问题
我发现其他人(不是我)已经报告并解决了这个问题。参考this bug
似乎从 CRM 返回的 XML 已更改为包含 2 个新节点,这打破了 XrmServiceToolkit 读取选项集值的方式。
错误报告包括一个可能的修复。我把它放在这里以供将来参考
原来的XrmServiceToolkit有这段代码
case "a:EntityReference":
entRef = new xrmEntityReference();
entRef.type = sType.replace('a:', '');
var oChildNodes = tempNode.childNodes;
entRef.id = getNodeText(oChildNodes[0]);
entRef.logicalName = getNodeText(oChildNodes[1]);
entRef.name = getNodeText(oChildNodes[2]);
obj[sKey] = entRef;
break;
您可以看到它明确指代 oChildNodes[0]
; oChildNodes[1]
;和 oChildNodes[2]
- 这是导致您遇到的错误的原因。
更新后的代码是:
case "a:EntityReference":
entRef = new xrmEntityReference();
entRef.type = sType.replace('a:', '');
var oChildNodes = tempNode.childNodes;
for (var n = 0; n < oChildNodes.length; n++) {
var currentNodeName = oChildNodes[n].nodeName;
switch (currentNodeName) {
case "a:Id":
entRef.id = getNodeText(oChildNodes[n]);
break;
case "a:Name":
entRef.name = getNodeText(oChildNodes[n]);
break;
case "a:LogicalName":
entRef.logicalName = getNodeText(oChildNodes[n]);
break;
}
}
obj[sKey] = entRef;
break;