Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dynamics crm 何时指定PaginInfo.PagingCookie和PaginInfo.PageNumber_Dynamics Crm_Paging_Fetchxml_Query Expressions - Fatal编程技术网

Dynamics crm 何时指定PaginInfo.PagingCookie和PaginInfo.PageNumber

Dynamics crm 何时指定PaginInfo.PagingCookie和PaginInfo.PageNumber,dynamics-crm,paging,fetchxml,query-expressions,Dynamics Crm,Paging,Fetchxml,Query Expressions,虽然在网上阅读了大量可用资源,但我找不到一个明确的解释: 在什么情况下,需要同时分配PageInInfo.PageNumber和PageInInfo.PagingCookie的值 例如:考虑我们有10000个唯一的记录,我们想检索它们,但是每次记录200个。我们是否必须迭代页码50次,或者只使用PagingCookie就足够了 现在,我想分享我在在线资源中发现的内容: 首先,许多在线资源链接到FetchXML:、QueryExpression:、的官方MSDN示例,但对于这个问题没有直接的答案。

虽然在网上阅读了大量可用资源,但我找不到一个明确的解释:

在什么情况下,需要同时分配PageInInfo.PageNumber和PageInInfo.PagingCookie的值

例如:考虑我们有10000个唯一的记录,我们想检索它们,但是每次记录200个。我们是否必须迭代页码50次,或者只使用PagingCookie就足够了

现在,我想分享我在在线资源中发现的内容:

首先,许多在线资源链接到FetchXML:、QueryExpression:、的官方MSDN示例,但对于这个问题没有直接的答案。它们都在页码上迭代,但据我所知,一个页面总是有5000条记录,这可能是错误的

其次,我发现了使用PagingCookie的演示,从40条记录中获取6-10条记录:

然后,解释了将上述内容转换为以下SQL查询:

选择前6名新\u家长记录0.新\u名称作为新\u名称 ,new\u parentrecord0.new\u parentrecordId作为new\u parentrecordId ,new_childrecord1.new_childrecordId作为new_childrecord1.new_childrecordId ,new_childrecord1.new_名称为new_childrecord1.new_名称 从…起 新的\u parentrecord作为新的\u parentrecord0 将new_childrecord作为new_childrecord1加入new_parentrecord0.new_parentrecordId=new_childrecord1.new_ParentAId 哪里 new_parentrecord0.new_parentrecordId>“01DBB1AA-3A0F-E411-8189-005056B20097” 订购人 new\u parentrecord0.new\u parentrecordId asc 因此,正如我在本例中看到的,不需要使用页码,因为SQL查询中只使用分页cookie


如果能对这个问题有一个很好的澄清,那就太好了。

我的经验和我刚才做的额外研究表明,是的,我们确实需要对所有页面进行迭代。虽然页码永远不会进入SQL查询,但它控制SQL将在其筛选器中使用哪个ID

查询中没有页面:

分页cookie中的ID保持不变:

附页:

ID的更改:

还值得注意的是,如果在不更改页面或分页cookie中的ID的情况下推进页面

系统使用分页cookie的最后一个ID并展开SQL top参数以获取您请求的页数:

它必须对SQL记录集进行一些处理,因为它返回正确数量的记录(在本例中为20),ID为advanced:

PagingCookie是服务器已交付给客户端的结果集的只读标识符。其目的是优化数据检索,不应修改。PagingCookie基本上告诉服务器在哪里可以大致找到指定页面的开始和结束

我假设它使CRM服务器能够使用缓存的查询结果集。当使用分页cookie对结果集进行分页时,我注意到服务器只提交SQL查询一次,即当它接收到一个没有分页cookie的查询时,并尽可能从内存中传递后续页面

当检索同一结果集的另一页时,客户机只需将cookie复制到FetchXML或QueryExpression中

据我所知,在Dynamics CRM 2016 V8.2上进行测试时,这也适用于连接

我怀疑您显示的SQL查询实际上是篡改PagingCookie的结果:服务器无法在其缓存中找到cookie,假设原始结果集已刷新,并且在构建新的SQL查询时,它完全依赖cookie声明的边界的正确性。因此出现了意外的where子句

结论 始终使用页面属性FetchXML或PageInfo.PageNumber属性QueryExpression。永远不要修改PagingCookie,只需将其复制到后续页面请求中即可

如果未指定“页面大小计数”属性,则默认为最多5000行。当预期结果集大于该值时,需要迭代所有可用页面


当您使用Dynamics CRM内部部署时,可以使用PowerShell命令修改最大页面大小。

Aron,根据您的回答,PageNumber实际上等同于LINQ Skip函数,这是真的吗?如果是这样,则每页记录数是分配给PageNumber的值,对吗?每页记录数是fetch标头中的计数。PageNumber*Count是它跳过的记录数。那么,为什么在MSDN示例中将PageNumber初始化为1时会使用前X条记录呢?它不应该跳过1*Count记录吗?实际上它是PageNumber-1*Count,这就是为什么当Count=20和page=10时,它会提取181条记录。也许它拉181而不是180来获取下一个guid
页面cookie…很抱歉,我觉得我错过了一些东西:如果Count=20,PageNumber=10,那么不应该使用LINQ等效的Skip180.Take20并考虑它需要加1个记录:Skip180.Take21?