1. 概述编辑
1.1 应用场景
从 金蝶 k3Cloud 系统接口 进行分页报表取数时,接口中没有提供页码参数,因此不能使用API取数-按页数取数方案。
但是接口中会返回所取数据的总行数,且接口请求参数中有开始行索引参数(从哪一行开始取数)、最大返回行数限制参数。


1.2 接口简介
1)接口地址
http://{服务器地址}/k3cloud/Kingdee.K3.SCM.WebApi.ServicesStub.StockReportQueryService.GetReportData,Kingdee.K3.SCM.WebApi.ServicesStub.common.kdsvc
2)接口说明
根据传入条件从 金蝶云星空接口 中获取分页报表数据。
请求参数如下所示:
{
"FORMID": "报表FORMID",
"FSCHEMEID": "过滤方案ID",
"QuicklyCondition": [/*对应于过滤框中的快捷页签以及选项页签中的条件*/
{
"FieldName": "快捷过滤字段绑定属性1",
"FieldValue": "具体数值"
},
{
"FieldName": "快捷过滤字段绑定属性2",
"FieldValue": "具体数值"
}
],
"MoreCondition": [/*高级过滤条件,对应于过滤框中【条件】、【高级】条件*/
{
"Left": "左括号(,有则填,无则留空",
"FieldName": "字段名,【条件】或【高级】页签中的字段标识",
"Compare": "比较符,如=、>、<",
"FieldValue": "过滤值",
"Right": "右括号)",
"Logic": "逻辑词,AND或者OR"
},
{
"Left": "左括号(,有则填,无则留空",
"FieldName": "字段名",
"Compare": "比较符,如=、>、<",
"FieldValue": "过滤值",
"Right": "右括号)",
"Logic": "逻辑词,AND或者OR"
}
],
"StartRow": "开始行索引,从0开始",
"Limit": "最大返回行数,最大10000",
"CurQueryId": "本次查询标识ID,在间隔时间比较短且进行分页查询时使用,根据查询返回的CurQueryId进行填写",
"FieldKeys":"设置返回字段,多个字段使用英文逗号分隔"
}
1.3 实现思路
注:本文方案仅适用于新增数据。
1.4 任务展示
2. 操作步骤编辑
2.1 获取来源端数据行数
本文使用 数据服务发布的 API 接口,模拟从金蝶云星空接口中取数,返回值中包含所取数据总行数。
1)新建定时任务,拖入「参数赋值」节点,从接口中取数。如下图所示:

点击「数据预览」,会看到返回结果中包含总行数。如下图所示:

2)将返回数据中的总页数,输出为参数 rows_source 。如下图所示:

2.2 获取目标表现有数据行
获取目标表现有数据行,并输出为参数 rows_goal 。如下图所示:

2.3 获取本次同步后所预期的目标数据量
由于后续我们将使用「循环容器」节点循环取出接口的数据,循环执行条件为:预期的目标数据量(本节获得该参数)>现实的目标数据量(后续步骤获得该参数)。
拖入「参数赋值」节点,将 2.1 节、2.2 节的参数值相加,获取本次同步后所预期的目标数据量,并输出为参数 totalrows(预期的目标数据量)。如下图所示:

2.4 循环取出接口数据
2.4.1 获取目标表数据行数、本次循环的起始行号
「循环容器」节点中拖入「参数赋值」节点,获取目标表的数据行数、本次循环的起始数据行号,并依次输出为参数 totalrows_goal、rows_start。如下图所示:

2.4.2 接口取数
根据 2.4.1 节输出的 rows_start ,从分页报表取数接口中取数。
1)拖入「数据转换」节点,进入「数据转换」节点后,拖入「API输入」节点,进行取数。如下图所示:
本节使用 数据服务发布的 API 接口,模拟用户实际场景中接口取数。

2)点击「数据预览」。如下图所示:

3)拖入「DB表输出」算子,将数据输出到目标数据表,写入方式选择「追加写入数据」。如下图所示:

4)点击右上角「保存」按钮。
2.4.3 获取目标表数据行数
拖入「参数赋值」节点,获取目标表数据行数(现实的目标数据量),输出参数 totalrows_goal 。如下图所示:

2.4.4 设置循环容器
「循环容器」节点循环方式选择「条件循环」,执行条件设置为:totalrows(预期的目标数据量,2.3节获得)>totalrows_goal(现实的目标数据量,2.4.3节获得)。如下图所示:


