BOS运行时-WebAPI-单据查询接口分页取数原创
4人赞赏了该文章
1,114次浏览
编辑于2023年09月20日 14:18:14
星空提供了标准的单据查询接口,由于单据的数据量可能达到百万级别以上,不能一次性取数,需要通过分批取数。
分批取数依赖与设置的或者默认的排序字段,根据对应字段生成序号列,然后分页取数。由于webapi每次单据查询接口进行查询时,都是实时根据排序字段进行分页。在数据量大的情况下,查到后面分页时,性能会很差。
处理方案:
不依赖于默认"StartRow": 0, "Limit": 2000参数进行分页取数,而是根据单据头或者单据体的主键进行分页取数。
星空单据的主键默认时十万开始,查询到当前数据主键最大值后,根据情况分批取数即可。
以下演示这个过程
1.按照单据头主键分批取数
对应JSON
{ "FormId": "PUR_PurchaseOrder", "FieldKeys": "fid", "OrderString": "fid desc", "TopRowCount": 0, "StartRow": 0, "Limit": 1, "SubSystemId": "" }
分页取数
对应JSON
{ "FormId": "PUR_PurchaseOrder", "FieldKeys": "fbillno,fmaterialid", "FilterString": "FID>140000 AND FID<140284", "OrderString": "", "SubSystemId": "" }
2.按照单据体主键分批取数
查询单据体主键的最大值,
FPOOrderEntry_FEntryID
生成的规则是,单据体的表示+下划线+单据体主键(需要根据不同的单据做调整)
对应JSON
{ "FormId": "PUR_PurchaseOrder", "FieldKeys": "FPOOrderEntry_FEntryID", "OrderString": "FPOOrderEntry_FEntryID desc", "TopRowCount": 0, "StartRow": 0, "Limit": 1, "SubSystemId": "" }
分批取数:
对应JSON
{ "FormId": "PUR_PurchaseOrder", "FieldKeys": "fbillno,fmaterialid", "FilterString": "FPOOrderEntry_FEntryID>104000 and FPOOrderEntry_FEntryID<=104320 ", "OrderString": "", "SubSystemId": "" }
赞 4
4人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读