xml - 您如何处理 fetchxml 结果数据?

标签 xml data-structures dynamics-crm data-manipulation fetchxml

我一直避免使用 fetchxml,因为我不确定调用 crmService.Fetch(fetchXml) 后处理结果数据的最佳方式。在一些情况下,我使用带有 LINQ 的 XDocument 从该数据结构中检索数据,例如:

XDocument resultset = XDocument.Parse(_service.Fetch(fetchXml));
if (resultset.Root == null || !resultset.Root.Elements("result").Any())
{
    return;
}
foreach (var displayItem in resultset.Root.Elements("result").Select(item => item.Element(displayAttributeName)).Distinct())
{
    if (displayItem!= null && displayItem.Value != null)
    {
        dropDownList.Items.Add(displayItem.Value);    
    }
}

处理fetchxml结果数据的最佳方式是什么,以便于使用。将这些记录传递到 ASP.NET 数据网格等应用程序将非常有用。

最佳答案

我喜欢 FetchXML 的灵 active ,因此我开发了以下函数来返回用于绑定(bind)到网格和中继器等的数据表。

        /// <summary>
    /// Takes a CRM FetchXML query and returns a DataTable
    /// </summary>
    /// <param name="fetchXml">The FetchXML query</param>
    /// <param name="requiredFields">A array of columns you'd expect returned. This is required as if there is no data for a field/column CRM will not return it which could impact databinding</param>
    /// <returns>A datatable containing the results of the FetchXML</returns>
    public static DataTable FetchXML2DataTable(string fetchXml, string[] requiredFields)
    {
        CrmService tomService = new CrmService();
        tomService = CrmWebService;

        string result = tomService.Fetch(fetchXml);
        DataSet ds = new DataSet();

        System.IO.StringReader reader = new System.IO.StringReader(result);
        ds.ReadXml(reader);

        DataTable dt = ds.Tables[1];

        //check all required columns are present otherwise add them to make life easier for databinding at the top level
        //caused by CRM not returning fields if they contain no data
        foreach (string field in requiredFields)
        {   //Check for column names and nested tables
            if ((dt.Columns.IndexOf(field) < 0) && (dt.DataSet.Tables.IndexOf(field) <0))
            {                    
                //Add column to datatable even though it is empty for reason stated above
                dt.Columns.Add(new DataColumn(field));
            }
        }            

        return dt;
    }

requiredFields 字符串数组在那里,因为如果您的结果集不包含该列的数据,则不会返回列,但是出于绑定(bind)到数据网格等的确切原因,我可能希望该列就位。

CrmService 是一个启动网络服务的单例类。

希望对你有用。

关于xml - 您如何处理 fetchxml 结果数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1210075/

相关文章:

xml - 如何使用 go 创建 xml 的 CDATA 节点?

c# - XML反序列化问题(带有命名空间的属性)

c# - 从 xmlDocument 中选择特定的 xml 节点,然后更改 xml 节点的属性

python - 如何在不使用希尔伯特索引的情况下沿希尔伯特曲线对点进行排序?

java - 我将如何管理 HashMap 中的队列?

.net-core - 如何从 CRM 2016 填充的 Microsoft.Azure.ServiceBus 队列中读取

java - 如何在元素级别而不是属性上区分XML?

arrays - 这里使用什么数据结构

dynamics-crm-2011 - 在 mscrm Dynamics 2011 中注册期间的装配位置

javascript - Dynamics 365。字段值 (javascript)