1. 概述
注:本文方案适用于 4.1.3 之前版本,4.1.3 及之后版本请参见:API取数-金蝶云星空销售报价单
1.1 应用场景
从 金蝶 k3Cloud 系统接口 进行分页报表取数时,接口中没有提供页码参数,因此不能使用API取数-按页数取数方案。
但是接口中会返回所取数据的总行数,且接口请求参数中有开始行索引参数(从哪一行开始取数)、返回行数限制参数。
1.2 实现思路
注:本文方案仅适用于新增数据。
1.4 任务展示
FineDataLink 中的数据处理过程,详情参见:https://demo.finedatalink.com/ 「API取数-以起始行数作为参数」。
2. 操作步骤
2.1 场景模拟
本文使用 数据服务发布的 API 接口,模拟从金蝶云星空接口中取数,该接口返回值中包含所取数据总行数:
且接口请求参数中有开始行索引参数(从哪一行开始取数)、返回行数限制参数:
本文场景:从接口中取 20 条数据,每次取 10 条。
2.2 获取来源端数据行数
本文使用 数据服务发布的 API 接口,模拟从金蝶云星空接口中取数。
1)新建定时任务,拖入「参数赋值」节点,从接口中取数。如下图所示:
点击「数据预览」,会看到返回结果中包含总行数。如下图所示:
2)将返回数据中的总页数,输出为参数 rows_source 。如下图所示:
2.3 获取目标表现有数据行
获取目标表现有数据行,并输出为参数 rows_goal 。如下图所示:
2.4 获取本次同步后所预期的目标数据量
由于后续我们将使用「循环容器」节点循环取出接口的数据,循环执行条件为:预期的目标数据量(本节获得该参数)>已有的目标数据量(2.5.3 节获得该参数)。
拖入「参数赋值」节点,将 2.1 节、2.2 节的参数值相加,获取本次同步后所预期的目标数据量,并输出为参数 totalrows(预期的目标数据量)。如下图所示:
2.5 循环取出接口数据
2.5.1 获取目标表数据行数、本次循环的起始行号
「循环容器」节点中拖入「参数赋值」节点,获取目标表的数据行数、本次循环的起始数据行号,并依次输出为参数 totalrows_goal、rows_start。如下图所示:
2.5.2 接口取数
根据 2.5.1 节输出的 rows_start ,从分页报表取数接口中取数。
1)拖入「数据转换」节点,进入「数据转换」节点后,拖入「API输入」节点进行取数,每次取 10 条数据。如下图所示:
本节使用 数据服务发布的 API 接口,模拟用户实际场景中接口取数。
2)点击「数据预览」。如下图所示:
3)拖入「DB表输出」算子,将数据输出到目标数据表,写入方式选择「追加写入数据」。如下图所示:
字段映射中,删除来源表字段:totalrows 。
4)点击右上角「保存」按钮。
2.5.3 获取目标表数据行数
拖入「参数赋值」节点,获取目标表数据行数(已有的目标数据量),输出参数 totalrows_goal 。如下图所示:
2.5.4 设置循环容器
「循环容器」节点循环方式选择「条件循环」,执行条件设置为:totalrows(预期的目标数据量,2.3节获得)>totalrows_goal(现实的目标数据量,2.5.3节获得)。如下图所示:
2.5 效果查看
点击「保存并运行」按钮,任务运行成功后,会看到目标数据表中被写入 20 条数据。
「循环容器」节点执行日志如下图所示:
可看出执行了两次循环,每次写入 10 条数据。