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 以某种方式返回原始结果? 我很困惑,如果它具有formattedValuevalue 之类的属性,我不明白它怎么会是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 高级报表

通过 javascript 在网格中检索 fetchxml

Dynamics CRM 2015/2016 Web API:聚合查询

Dynamics CRM 2015/2016 Web API:聚合查询