【问题标题】:MS CRM: Paging cookie bug?MS CRM:分页 cookie 错误?
【发布时间】:2018-06-16 15:38:10
【问题描述】:

根据article,在 Microsoft CRM 中管理分页 cookie 的方式存在严重错误。简而言之,当尝试以一对多关系检索超过 5000 条记录时,就会出现该错误。作者指出,由于父实体不包含唯一的 guid,因此分页 cookie 也不会是唯一的,这可能导致在检索下一页记录时会丢失大量记录。

有人遇到过这个错误吗?你是怎么解决的?

当然,一种方法是将查询转为使用子实体作为主要实体。这样,每条记录都将是独一无二的。但这也不是最佳解决方案,因为我必须在代码中手动将其改回。

我注意到的另一种方式是,当我像这样指定子实体的顺序时:linkedEntity.Orders.Add(OrderType.Ascending),那么分页 cookie 将始终为空。这消除了记录丢失的问题,但据我了解,这会导致 SQL 的大量开销。

如果有任何方法可以使分页 cookie 同时包含父记录和子记录,那么最好的方法当然是。但我还没有找到任何方法来做到这一点。有什么想法吗?

【问题讨论】:

    标签: sql-server cookies dynamics-crm


    【解决方案1】:

    我经历过。

    我通过不使用分页 cookie 解决了这个问题,没有它你仍然可以正确分页。

    例如:

    int fetchCount = 3;
    int pageNumber = 1;
    int recordCount = 0;
    
    QueryExpression pagequery = new QueryExpression("account");
    
    while (true)
    {
        EntityCollection results = _serviceProxy.RetrieveMultiple(pagequery);
    
        if (results.Entities != null)
        {
            foreach (Account acct in results.Entities)
            {
                Console.WriteLine(acct.Id);
            }
        }
    
        if (results.MoreRecords)
        {
            pagequery.PageInfo.PageNumber++;
    
            //pagequery.PageInfo.PagingCookie = results.PagingCookie; <-- Don't add the paging cookie here
        }
        else
        {
            break;
        }
    }
    

    【讨论】:

    • 您最多可以获得 5000 个结果。之后,您将收到服务器错误“尝试在任何高页面上检索一组记录时需要分页 cookie。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    相关资源
    最近更新 更多