回写公式详解
在第10章,我们学习过回写公式,它可以在保存一份表单的同时,同步更新其它表单中的数据,这是回写公式最常用的一种情况,此外,回写公式还有其他类型,本章逐一举例介绍。
22.2.1 “新建表单”公式
这种回写公式的作用是,保存一份表单的同时,自动新建一份其他的表单。这种类型的回写公式应用十分广泛,例如:
- 输入订单的时候,如果订单的客户尚未在“客户登记表”中登记过,则保存订单的同时,自动填报一份“客户登记表”
- 保存库存“调拨单”的同时,自动产生一张出库单(从调出仓库出库)和一张入库单(向调入仓库入库)
- 保存库存“调价单”的同时,自动产生一张出库单(按旧价格出库)和一张入库单(按新价格入库)
- ……
本节以上述第一个例子为例,说明“新建表单”公式的使用。
请读者先回顾第6章对于订单模板的设计。我们在订单模板上的“客户名称”处设置了填写规范,使得输入订单的时候,可以从一个下拉列表中选择客户名称,这就要求在输入订单之前,先把客户信息登记到“客户登记表”中。但是实际业务中,有可能一个新客户要订货,来不及事先登记客户信息,需要马上输入订单,这就要求我们的订单模板做改进,能够支持以下两点:
- 输入订单时,已有的客户名称,从下拉列表中选择,新客户的名称,直接输入
- 如果是新客户的订单,能够自动把新客户名称登记到“客户登记表”中。
设置订单中“客户名称”字段可手工输入
- 以设计者身份登录系统,设计栏目中【数据规范】-【下拉列表】中新建“客户名称列表”如下:
2.打开“订单“模板的管理数据表中【客户名称】字段的数据规范设置窗口,勾选【填报时允许手工输入】。
设置后,若客户名称不在下拉列表中,就可以直接输入客户名称。
定义“新建表单”公式
- 打开订单模板,进入设计状态
- 选择菜单【表间公式】
- 在左侧选择公式类型“回写-新建报表”,点击【新建】按钮。
- 输入公式名称为“自动产生新客户”,应用时机为“办理保存时”,切换到“工作流任务”标签下,选择任务名称为“制单”,如图。
5.点击【1.选择模板】,在弹出的窗口下,选择要新建的模板名称。选择好后点击【确定】。回到上一层窗口。
6.点击【2.筛选条件】按钮,弹出“输入条件”窗口,设置条件为“本报表.订单_主表.客户名称 有值 并且 本报表.订单_主表.客户编号 无值”,如图,点击【确定】
解释一下,为什么要输入这样的筛选条件呢?大家可以回顾第6章,我们在订单模板上定义了一条表间公式,当选择客户名称后,会自动从客户登记表中查出该客户的编号。所以,只要客户编号有值,说明这个客户的信息在客户登记表中是存在的,只有“客户编号无值”的时候,才是一个新客户,才需要自动添加到客户登记表中去。
7.点击【3.填充方式】按钮,弹出“填充方式”窗口,依次选择用本报表的哪些字段填充新表单的对应字段,如图,最后点击【确定】。
8.回到上级窗口,完整的公式如下:
9.在“新建表单公式”的窗口上,还有一个按钮【高级】,点击此按钮,出现下面的子窗口,在此窗口上,可以设置新表单的填报人。
在这里我们设置新表单的填报人和本表单的填报人相同,也就是说,假如张三填报了一张订单,并输入的新的客户名称,则保存订单的时候,同时存了一份客户登记表,这分客户登记表也相当于张三填的。
另一种可能情况是,公司有专门的行政人员录入订单,所以张三的订单不是本人录入的,是录入员录入的,可是在录入订单的时候新增加的客户登记表,还应该是张三名下的客户,回忆第5章,我们设置了销售员对客户登记表的查阅权限是“本人填报的”,也就是说,我们希望录入订单时新增的客户登记表,“视同”张三填的,而不是录入员填的,这时,我们需要选择新表单的填报人为“来自本表单数据字段:订单_主表.销售员”,也就是说,不管是谁在录入订单,只要订单上的“销售员”那一栏写的是张三的名字,则同时新增的客户登记表就算是张三填的。
设好之后点【确定】,回到“新建表单公式”窗口。
10. 点击【保存】,回到“表间公式”窗口,点击【关闭】
11.关闭模板。
说明:若本报表中提取的数据表为明细表且明细数据有重复时,新建的表单又不能有重复数据时,应该如何设置新建表单公式呢?我们可以如下图所示,选择【高级】选项卡,勾选【从本报表细表提数据时过滤重复项】。解决重复数据的问题。
应用“新建表单”公式
新建一份订单,直接输入一个下拉列表中没有的客户名称, 继续输入其他内容,保存订单。
到我的工作台中查看“客户登记表”,会看到新客户的信息已产生。
练习题
利用本节的“新建表单”公式,可以做到在保存订单的同时,自动针对新客户填报一份客户登记表,而且,这个新客户的客户编号也自动产生了。这就带来一个问题:当输入订单的时候,因为是新客户,所以没有客户编号;保存订单之后,新客户编号自动产生了,所以还需要把这个自动产生的新编号回写到订单上,做法是:
- 打开客户登记表模板,进入设计状态。
- 定义一条回写公式,如图:
现在重新填报一份订单,输入下拉列表中不存在的客户名称,保存。然后到我的工作台中查看“客户登记表”,观察新产生的客户信息;再查看“订单”,看新客户编号是否已被更新到订单上。
通过“新建表单”表间公式可以新建Excel表单,那能不能通过表间公式新建word表单呢?是可以的,可通过“回写(新建word)”公式实现。定义与操作同“新建表单”公式类似。
22.2.2“补充明细”公式
“补充明细”公式的作用是:保存一份表单的同时,向另外的已有表单的明细表中追加记录,例如,我们在第20章举过“员工信息卡”模板的例子,第22章举过“请假单”模板的例子,现在假设我们要在“员工信息卡”上增加一个明细表“考勤记录”,每请假一次,就在员工考勤记录上登记一笔,则需要用到“补充明细”公式。因为这时不需要产生一张新的“员工信息卡”,只需要在已有的“员工信息卡”上补充一条明细记录。示意如下:
定义“补充明细”公式
- 打开“请假单”模板,进入设计状态。
- 右键选择菜单【表间公式】,打开表间公式窗口,左侧选择公式类型“回写-补充明细”,点击【新建】按钮。
- 弹出“回写公式”窗口,输入公式名称为“记录考勤”,选择应用时机为“办理保存时”,切换到“工作流任务”标签下,任务名称选择“审批”。如图。
4. 点击【回写数据表】,弹出“选择数据表”窗口,在左侧树型中选择要回写的模板名称“员工信息卡”,右侧数据表列表中双击选择表名“考勤记录”。
5.因为“员工信息卡”有很多张,所以还需指明要把明细记录补充到具体哪一(些)张“员工信息卡”上。在“选择数据表”窗口的下半部分,选择“满足以下条件的”,设置条件为“员工表 . 姓名 = 本报表 . 请假单 : 请假人”,即,把明细记录补充到请假人的员工信息卡上。点击【确定】,回到“回写公式”窗口。
6. 点击【筛选条件】按钮,输入条件为“本报表 . 请假单 : 上级意见 =' 同意 ' ”
7.点击【回写数据项】按钮,弹出“定义回写数据项”窗口,输入如下,点击【确定】
8.定义完整的回写公式如下,点击【保存】
9.关闭模板。
前面的例子中“请假单”要回写的数据项为单一数据项,若要回写的数据项为重复数据项(如:从“请假单”模板提取的数据项设计为重复数据项),并且用户想要将数据按顺序补充到回写数据表。我们应该如何设计呢?
操作步骤同之前的定义“补充明细”公式相同。仅在第7步中“定义回写数据项”窗口中需设置排序字段。
如下图所示:此时补充的数据会按“本报表.请假单.起始日期”升序顺序补充到对应的员工信息卡的考勤记录表中。
应用“补充明细”公式
请读者自行练习,
1) 用张三的帐户登录,填报一张请假单。
2) 用肖亮的帐户登录,审批请假单,审批同意。
3) 用admin的帐户登录,到我的工作台中查看张三的员工信息卡,看其考勤记录中是否已经增加了这一次请假的信息
22.2.3“新建消息”公式
“新建消息”公式的作用是:没有工作流的表单也可生成发送消息,并且补充了原工作流完成后系统自动生成的消息,使得消息的构造更加方便灵活。下面我们以“客户登记表”为例来说明如何应用“新建消息”公式。
定义“新建消息”公式
前提条件:用户想要应用“新建消息”公式需要在“系统管理台”中先开启【消息提醒】服务。
1)设计状态下选中“客户登记表”模板右键点击【表间公式】。
2)点击【新建】按钮
3)选择【回写(新建消息)】类型后,点击【确定】。弹出如下窗口:勾选“新建保存时”。
4)输入公式名称:“发送消息”
填充数据项内容中输入表达式内容如下图所示:
5)完成后的表间公式如下图所示:
6)选中【高级】选项卡,可选择发送消息途径:客户端、微信、钉钉。
7)当新建完成一份客户登记表,销售员登录时将会收到对应的消息提醒。
22.2.4“设置用户”公式
前面我们了解了,系统中新建用户有两种方式:系统管理员新建;用户自注册。
系统中普通用户也可以通过执行“设置用户”表间公式来新建、修改系统用户。
下面以“员工信息卡”为例说明如何设置、应用“设置用户”公式。
1.设计栏目中选中“员工信息卡”模板,右键点击【表间公式】。
2.选中“设置用户”类别,点击【新建】按钮。
3.首先打开“设置用户属性”窗口,对用户属性进行赋值,默认完成了快速匹配。
4.点击【继续】,返回设置用户表间公式窗口。
5.输入公式名称,设置应用时机,点击【保存】,完成表间公式定义。
6.填报员工信息卡,输入必填信息,【保存】。
7.完成表单填报后,可在系统管理下的用户中查看到新建的“李四”新用户。
8.【高级】选项卡中“当系统用户存在”选项,默认选择“更新系统用户”。即新建用户若存在(姓名、登录名、手机号、电子邮箱、企业微信账号、钉钉UserID中任意一项相同视为同一个用户),则系统中用户信息则会更新。
当企业用户在第三方平台(如钉钉等)进行管理时,还可通过后面将要讲解的 WebApi 将用户信息填写到模板上,在执行模板上的表间公式完成对系统用户的创建。
通过“设置用户”表间公式创建的系统用户仅默认拥有 Everyone 角色,其它角色依然需由系统管理员另行分配。
22.2.5 执行存储过程/函数公式
此表间公式与“存储过程/函数查询”公式类似,不同的是应用时机以及执行存储过程/函数后不会返回结果。