CRM FetchXML activitytypecode 结果没有枚举 int 值
Posted
技术标签:
【中文标题】CRM FetchXML activitytypecode 结果没有枚举 int 值【英文标题】:CRM FetchXML activitytypecode Result doesn't have enum int value 【发布时间】:2018-08-09 02:17:31 【问题描述】:我有一个 JS 项目,我想从中提取 CRM 活动类型,让用户选择然后使用所选活动类型执行另一个 fetchxml 查询。
我可以使用简单的 FetchXML 获得不同的活动类型代码列表
<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="true">
<entity name="activitypointer" >
<attribute name="activitytypecode" />
</entity>
</fetch>
result.attributes["activitytypecode"].formattedValue; //Returns name - 'Phone Call'
result.attributes["activitytypecode"].value; //Returns string - phonecall
我想要的是枚举的 Int32 值(例如:电话呼叫的 4210),例如,当我再次使用 FetchXML 进行查询时,我需要 int32 值。
我似乎无法从 javascript 中的 FetchXML 结果中获取它,但如果我使用 XrmToolbox - 我可以看到 int32 值.. 我错过了什么?
formattedValue 似乎 = 名称 而 value 是文本表示而不是 int32
这里是函数的完整代码:
function GetActivityTypes()
var fetchXML = '<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="true">';
fetchXML += '<entity name="activitypointer" >';
fetchXML += '<attribute name="activitytypecode" />';
fetchXML += '</entity>';
fetchXML += '</fetch>';
var results = XrmServiceToolkit.Soap.Fetch(fetchXML);
if (results != null)
for (index = 0; index < results.length; index++)
var a = results[index].attributes["activitytypecode"].formattedValue; //returns activity type name - Phone Call
var b = results[index].attributes["activitytypecode"].value; //returns string - phonecall
我想要的是活动类型的数值 - 即:电话 = 4120
我正在使用 XrmServiceToolKit 的最新 2.2.1 版本。我也在那里四处寻找,并注意到在“获取”方法中,随着结果的建立,它们会被“反序列化”。
从 Fetch 方法的 doRequest 内部
var entity = new businessEntity();
entity.deserialize(fetchResult.childNodes[ii]);
fetchResults.push(entity);
我想知道在 XrmServiceToolkit 中是否还有另一种方法可以使用...我什至尝试在我自己的 FetchRAW 方法中进行黑客攻击以不“反序列化”结果但我对 JS 真的不够强大..我肯定在做出了点问题.. 我已经成功地将 Fetch 方法用于其他实体数据,
【问题讨论】:
result.attributes["activitytypecode"]
的值和类型是什么?
它似乎是一个字符串。我正在使用 XrmServiceToolkit 在 JS 函数中检索结果。我刚刚查看了 XrmToolbox(我设计提取查询的地方)。如果我将结果设置为“原始提取结果”,我可以看到实际值 - 4210 但如果我将其保留为默认值(序列化 - 显式XML),我得到一个字符串结果 - phonecall - 我想我需要看看如何让 XrmServiceToolkit 以某种方式返回原始结果?
我很困惑,如果它具有formattedValue
和value
之类的属性,我不明白它怎么会是string
。如果您发布您正在使用的代码可能会有所帮助 - ***.com/help/mcve
干杯詹姆斯,我已经编辑了原始解决方案并粘贴了函数和响应示例。
【参考方案1】:
您可以使用 WebAPI (Odata) 并使用名称 Prefered 在调用标题中包含 odata.include-annotations=OData.Community.Display.V1.FormattedValue。
function retrieveEntity(entityName, Id, columnSet)
var serverURL = Xrm.Page.context.getClientUrl();
var Query = entityName + "(" + Id + ")" + columnSet;
var req = new XMLHttpRequest();
req.open("GET", serverURL + "/api/data/v8.0/" + Query, true);
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.setRequestHeader("Prefer", "odata.include-annotations=OData.Community.Display.V1.FormattedValue");
req.onreadystatechange = function()
if (this.readyState == 4 /* complete */ )
req.onreadystatechange = null;
if (this.status == 200)
var data = JSON.parse(this.response);
if (data != null
alert(data["_primarycontactid_value@OData.Community.Display.V1.FormattedValue"]); //for lookup text
alert(data["paymenttermscode@OData.Community.Display.V1.FormattedValue"]); //for optionset text
else
var error = JSON.parse(this.response).error;
alert(error.message);
;
req.send();
https://docs.microsoft.com/en-us/dynamics365/customer-engagement/developer/webapi/query-data-web-api#include-formatted-values
http://himbap.com/blog/?p=2077
希望它有所帮助 - M.Acosta.D
【讨论】:
以上是关于CRM FetchXML activitytypecode 结果没有枚举 int 值的主要内容,如果未能解决你的问题,请参考以下文章
Dynamics CRM2016 Web API之Use custom FetchXML
使用FetchXML制作Dynamics CRM Online 高级报表
使用FetchXML制作Dynamics CRM Online 高级报表