BOS运行时-WebAPI-单据查询接口分页取数原创
金蝶云社区-Howhy
Howhy
3人赞赏了该文章 670次浏览 未经作者许可,禁止转载编辑于2023年09月20日 14:18:14

星空提供了标准的单据查询接口,由于单据的数据量可能达到百万级别以上,不能一次性取数,需要通过分批取数。


分批取数依赖与设置的或者默认的排序字段,根据对应字段生成序号列,然后分页取数。由于webapi每次单据查询接口进行查询时,都是实时根据排序字段进行分页。在数据量大的情况下,查到后面分页时,性能会很差。


处理方案:

不依赖于默认"StartRow": 0,  "Limit": 2000参数进行分页取数,而是根据单据头或者单据体的主键进行分页取数。

星空单据的主键默认时十万开始,查询到当前数据主键最大值后,根据情况分批取数即可。

以下演示这个过程

1.按照单据头主键分批取数


image.png


对应JSON

{
    "FormId": "PUR_PurchaseOrder",
    "FieldKeys": "fid",
    "OrderString": "fid desc",
    "TopRowCount": 0,
    "StartRow": 0,
    "Limit": 1,
    "SubSystemId": ""
}


分页取数

image.png

对应JSON

{
    "FormId": "PUR_PurchaseOrder",
    "FieldKeys": "fbillno,fmaterialid",
    "FilterString": "FID>140000 AND FID<140284",
    "OrderString": "",
    "SubSystemId": ""
}


2.按照单据体主键分批取数

查询单据体主键的最大值,

FPOOrderEntry_FEntryID

生成的规则是,单据体的表示+下划线+单据体主键(需要根据不同的单据做调整)

image.png


image.png

对应JSON

{
    "FormId": "PUR_PurchaseOrder",
    "FieldKeys": "FPOOrderEntry_FEntryID",
    "OrderString": "FPOOrderEntry_FEntryID desc",
    "TopRowCount": 0,
    "StartRow": 0,
    "Limit": 1,
    "SubSystemId": ""
}


分批取数:

image.png

对应JSON

{
    "FormId": "PUR_PurchaseOrder",
    "FieldKeys": "fbillno,fmaterialid",
    "FilterString": "FPOOrderEntry_FEntryID>104000 and FPOOrderEntry_FEntryID<=104320 ",
    "OrderString": "",
    "SubSystemId": ""
}


赞 3