如何实现表格到表格的逐条数据传递
一.场景&疑惑
「Q-Robot添加数据」能不能直接向表格中添加一条数据?
需求:要将应用A子表格数据中筛选出某几条,传递到B应用的子表格中。
场景1:订单中的产品清单根据产品供应商分别生成多个采购单
场景2:订单中的产品清单根据存储仓库位置生成多个发货单
二.整体处理思路
首先用「Q-Robot·自动添加数据」将应用A子表格中每行数据都拆分出,到中间转换应用C,使表格A中的子表格都拆分成常规字段在应用C中。
然后通过应用C向应用B添加数据并添加表格行,在流程中需要两个「Q-Robot·自动更新数据」节点,第一个负责创建一条数据,第二个负责向刚创建的数据的子表格中添加新行数据。
第一个节点,查找到数据,如果查找到什么都不做,如果查不到就添加一条数据。
第二个节点,是一定能查到目标数据的,负责在目标数据的子表格中添加新行。
三.详细设置方法
销售订单(A)发起后,通过流程中的「Q-Robot·自动添加数据」,将产品清单中的子表格数据拆分到应用(C)以常规字段形式存储数据。


销售订单(A)和订单-产品清单拆分(C)中记录的数据差别在于一个聚合一个拆分。
系统在流程中的分支判断时,以单条数据为最小单位来做判断。
当把子表格字段的数字作为分支中的筛选条件时,由于系统以单条数据为最小单位做判断,会将表格该字段的所有值,组合成一个数组,来参与筛选条件做判断,而不是对子表格中数据逐条判断。
把子表格中的数据才分成多个单条数据,系统对拆分后的每条数据逐条处理,就间接实现了对应用A中子表格内数据进行对逐条处理。

应用C的流程中第一个「Q-Robot·自动更新数据」节点负责向应用B创建一条数据。查找到数据就将校验字段更新为1,查不到就添加一条新数据。

应用C的流程中第二个「Q-Robot·自动更新数据」节点,负责向应用B的子表格中添加新行。这个节点是一定能查找的对应数据的,因为已经前面第一个节点已经添加过。节点会根据更新规则向应用B的子表格中添加新行。
从应用A到应用B,按照这样的设计即可实现子表格中数据的逐条拆分和汇总,最终实现效果如下。

如果应用(A)的子表格数据拆分后汇总时需要满足条件才能被传入目标应用(B),可以在中间应用C的流程中添加分支条件做判断。如下图,只有申请人柒元,提交的数据才进行传递汇总,其他人提交的都不会做传递汇总。

四.理解系统原理
轻流的系统中,每一个应用都是一个数据的容器,这个容器中会存储很多条数据。如果应用中使用了子表格,那么应用的每条数据中还会包含很多条子表格数据。
我们把一个应用比做一栋高楼,每一条数据就是酒店的一层楼,数据中的子表格就是每层楼里的一个个房间。把数据中的字段比做楼层和房间的属性。
在一栋大楼中找房间,首先要找到房间所在的楼层,然后才能找到具体的房间。
系统在应用中查找表格中数据,首先要找到某一条数据,然后才能找到子表格中的数据。
「Q-Robot·自动添加数据」
「Q-Robot·自动添加数据」在执行时,首先找到某个应用(楼宇名字),然后向应用中添加一条数据(将这栋楼加盖一层),根据创建规则填充数据内字段(根据规则设置该楼层属性值),并不对子表格中数据进行操作(建楼层但不操作楼层房间)。

「Q-Robot·自动更新数据」
「Q-Robot·自动更新数据」在执行时,首先找到某个应用(楼宇名字),然后向应用中根据筛选条件查找一条或几条数据(在这栋楼找到一层或几层),然后根据更新规则修改应用中的一个或几个字段(修改楼层某条或某几条属性值)。
「Q-Robot·自动更新数据」是可以更新子表格内的数据的,关于筛选和更新子表格数据有两种情况:
1.筛选条件已经指定到应用某条数据(筛选某栋楼的某楼层)
这时的操作对象是这条数据中的字段和子表格中的某条数据(操作对象是楼层属性和楼层中的房间)。
对这条数据子表格只能添加一条或几条数据(找到了某个楼层,可以新建一个房间,或者把某个其他楼栋的房间形态复制过来一份)
2.筛选条件已经指定到应用某条数据中子表格内数据(筛选某栋楼某楼层中的指定房间)
这时的操作对象是这条数据中的字段和子表格中的某条数据中的字段(操作对象是楼层属性和房间的属性)。
对子表格数据,只能修改筛选出的这条子表格数据中的字段(已经找到了指定房间,接下来就只能改这个房间的某些属性)

「Q-Robot·自动更新数据」在执行时,在某个应用(楼宇名字),根据筛选条件查找一条或几条数据时,也可能找不到任何数据。「Q-Robot·自动更新数据」节点在找不到数据时,允许转而执行「Q-Robot·自动添加数据」。
