Dynamics CRM - 如何获取超过5000个元素的fetchXml查询的第二页?

时间:2016-05-11 09:58:32

标签: dynamics-crm fetchxml

我在Dynamics CRM 2016和fetchXml上遇到了一个小问题。在CRM中,我有大约35,000个用户。由于看起来动态仅限于每轮检索最多5000个元素,我需要使用pagingCookie功能来检索第二页,依此类推。例如,要检索这些记录的第二页(从用户5001到10000),我必须先检索1到5000的用户,获取分页cookie并使用此cookie重新启动进程。

我的问题是:这需要总共10000个用户,而我可能只想获得第二页,而不是第一页。有没有直接的方法来获得没有pagingCookie的第二页结果?

谢谢

1 个答案:

答案 0 :(得分:1)

嗨,要获得所有结果,您需要在每次调用crm后增加页数并添加到列表中。我不知道你编写的语言是什么,但我在.net中给你一个例子,我测试过并且正在工作。如果你需要在javascript中使用相同的方法。

 public IEnumerable<Account> GetAllClients()
        {
            List<Account> listAccounts = new List<Account>();
            int pageIndex = 1;
            int pageSize = 1000;


            while (true)
            {
                // FETCH CLIENTES
                var Fetch = "<fetch version='1.0' page='" + pageIndex + "' count='" + pageSize + "' output-format='xml-platform' mapping='logical' distinct='true'>";
                Fetch += "<entity name='account'>";
                //Attributes
                Fetch += "<attribute name='accountid' />";
                Fetch += "<attribute name='name' />";
                Fetch += "<attribute name='accountnumber' />";
                Fetch += "<attribute name='accountid' />";
                Fetch += "<order attribute='name' descending='false' />";
                Fetch += "</entity>";
                Fetch += "</fetch>";

                EntityCollection resultClient = this.crmService.RetrieveMultiple(new FetchExpression(Fetch));

                foreach (Account c in resultClient.Entities)
                {
                    listAccounts.Add(c);
                }
                if (resultClient.MoreRecords)
                {
                    // Increment the page number to retrieve the next page.
                    pageIndex++;
                }
                else
                {
                    // If no more records in the result nodes, exit the loop.
                    break;
                }
            }

            return listAccounts;
        }

干杯