生单规则
2 分钟阅读
使用场景
在制作应用的过程中,可以使用生单规则来描述上游实体数据变化之后,对其他下游实体数据的影响;也可以描述下游实体数据变化之后,反过来对上游实体数据的影响。
设计流程
创建生单规则关系图
路径:规则 >> 生单规则 >> 新建图标(+)
创建生单规则
进入生单规则关系图,左侧会列出所有支持参与生单规则的实体,从左侧拖入需要配置生单规则的实体到关系图中,鼠标放在上游实体上,出现四个小圆圈,选中一个作为连线的起点,然后拖动鼠标到下游实体上,建立两个实体的关系,箭头的方向,即为数据的流向。点击连线中的加号(+),进入生单规则配置界面。
录入生单规则的显示名称,编码自动生成可自己修改,编码要求应用内唯一,应用发布生成代码时,会用这个编码。
触发点&前置条件配置
触发点分手工触发和事件订阅。手工触发类型,需要和页面配合使用,在页面中通过按钮或者其他控件绑定事件,选择指定的生单规则;事件订阅类型,只能选择应用内的实体预置的新增事件(操作后)、更新事件(操作后)、删除事件(操作前)之一,选择的事件,可以不是当前生单规则中来源实体下的事件。
手工触发
来源实体过滤条件,可选配置。没有配置时,那么运行态选择的所有数据都会执行该生单规则;配置之后,会根据该条件过滤所有运行态选择的数据,不满足条件的跳过,满足条件的继续执行生单规则。
注:过滤条件可选择当前来源实体主子孙实体字段作为条件【2.8及之后版本】。
事件订阅
首先选择事件,可选事件范围如上描述。然后事件过滤条件,选配,未配置时,事件过来的数据直接执行生单规则;配置了之后,根据事件过滤条件判断是否满足条件,满足执行,不满足就跳过。事件过滤条件中,可选的字段为所选事件所属实体的主实体字段。最后配置来源实体查找条件,必需配置,用于通过该条件来查询当前生单映射规则来源实体用于执行生单规则的数据。如果所选事件所属实体就是当前来源实体,那么会默认在来源实体查找条件配置一个事件数据ID等于来源实体ID的条件,因为大部分情况,都只需要用当前事件发出的这一条数据来执行生单规则,如果有别的条件需求,可自行调整。
映射类型
该区域主要设置生单规则操作类型,包新建数据、更新数据、新建或跟新数据。
新建数据
本类型,执行生单规则后,根据后面的映射规则,将来源数据拍平之后,生成目标实体数据。
生单成功自动发起流程:该配置只有在目标详情页面(PC)绑定了流程模板的情况下生效,如果开关未打开,则只会给目标实体生成待办数据;如果开关打开,会尝试发送该待办到下一个节点,当发送失败时,还是会生成待办数据并消息提醒发送失败的原因,发送成功之后,流程直接流转到下一个节点。
目标详情页面(PC):选择目标实体详情页类型的PC页面,有两个用处,一是用于手工触发执行生单时,运行态生单成功后用该页面打开查看生成的目标数据详情;二是用于执行生单之后,判断是否需要给目标数据生成待办数据,如果该页面绑定了流程模板,那么就会生成待办数据(仅限能配置流程的实体)。
目标详情页面(移动):选择目标实体详情页类型的移动页面,用于移动端手工触发执行生单时,运行态生单成功后用该页面打开查看生成的目标数据详情。
支持详情页设置对应的入参。
更新数据
本类型,执行生单规则后,根据更新规则,更新目标实体数据。
新建或更新数据
本类型,执行生单规则时,会先按照新建数据类型生单拍平来源实体数据,组装可以生成的新建目标实体数据,再根据目标实体关键字段,用组装的目标数据中的主实体字段值对数据库进行查询,如果没有查询到目标实体,那么就按照新建数据直接新建这些数据;如果能够查询到的,就根据映射执行更新,递归处理其他目标子表的映射区域。
目标实体关键字段:选择用于查询目标实体数据,判断是执行更新还是执行新建的关键字段(注:目标实体关键字段必需参与下面的映射,不然没有数据用于查询)。
目标详情页面(PC):选择目标实体详情页类型的PC页面,有两个用处,一是用于手工触发执行生单时,运行态生单成功后用该页面打开查看生成的目标数据详情;二是用于执行生单之后,判断是否需要给目标数据生成待办数据,如果该页面绑定了流程模板,那么就会生成待办数据(仅限能配置流程的实体)。
目标详情页面(移动):选择目标实体详情页类型的移动页面,用于移动端手工触发执行生单时,运行态生单成功后用该页面打开查看生成的目标数据详情。
生单成功自动发起流程:该配置只有在目标详情页面(PC)绑定了流程模板的情况下生效,如果开关未打开,则只会给目标实体生成待办数据;如果开关打开,会尝试发送该待办到下一个节点,当发送失败时,还是会生成待办数据并消息提醒发送失败的原因,发送成功之后,流程直接流转到下一个节点。
拆单配置
当一条来源数据需要分几次来执行生单时,可以通过拆单配置来实现,有以下几点注意事项:
- 手工触发类型生单才能配置拆单字段,因为需要运行态选择数据时,需要输入本次执行的值;
- 拆单字段只能是数字(整数、小数、货币、长整数)类型字段;
- 一个生单规则只允许选择一个拆单字段;
- 拆单字段必需参与下面的映射规则。
示例:采购单生成到货单时,一个采购单预计采购20台设备,但是不是一次性所有设备都到了,第一批到货10台,第二批到货5台,第三批到货5台,那这个时候就可以通过拆单配置,把到货数量字段设置为拆单字段,每次采购单生成到货单时,就可以手动输入本次到货的数量,用该数字来执行生单。
映射规则
配置生单规则来源实体数据映射到目标实体的规则,按照每个目标实体为一个区域,配置该实体来源实体字段和目标实体字段的映射关系。在介绍映射规则配置前,需要做一些简要的说明:
实体体系说明
- 实体与实体之间为1:1聚合关系时,其视作同一体系;
- 实体与实体之间为1:N聚合关系时,须为纵向同一关系线上的实体,不能同时包含同层级多个1:N实体;
- 包含同层级多个1:N实体或包含多个实体之间不存在聚合关系,则视为非同一体系。
示例:
- 是一个体系:Person → PersonWork → PersonWorkPractice
- 是一个体系:Person → 自定义扩展表 → PersonWork → PersonWorkPractice
- 非一个体系:Person → PersonWork → PersonWorkPractice → PersonWorkDetail
字段数据类型之间的映射规则说明
目标实体字段 | 来源实体字段 | 备注 |
---|---|---|
附件 | 附件 | |
长整数 | 长整数、整数 | |
小数 | 小数、整数、长整数,货币 | |
货币 | 小数、整数、长整数,货币 | |
整数 | 整数 | |
枚举 | 枚举 | 需要绑定的同一个枚举 |
选项集 | 选项集 | 需要绑定同一个选项集 |
时间 | 时间、日期时间 | |
日期时间 | 日期时间、日期 | |
日期 | 日期、日期时间 | |
文本 | 文本、日期、日期时间、时间、整数、长整数、小数、货币 | |
布尔 | 布尔 | |
实体 | 实体 | 需要绑定同一个实体 |
多行文本 | 多行文本,文本、日期、日期时间、时间、整数、长整数、小数、货币 |
实体映射规则说明
在配置映射规则前,需明确实体间的映射关系,设计师可通过连接线,建立来源实体体系和目标实体体系的映射关系。建立关系后,后续的字段映射规则、来源实体列表方案、回写规则、字段映射等配置均依赖于实体映射规则。
- 映射关系只能从来源实体体系指出,指向目标实体体系;
- 建立连接线时,不能违背单体系对应单体系的原则;
- 建立连接线时,一组来源实体和目标实体之间,只允许存在一根连接线;
- 来源实体和目标实体建立连线后,代表实体间存在映射关系,需进一步配置字段映射规则;
- 未建立连线的目标实体,无需配置字段映射规则。
字段映射规则说明
- 可以使用值拷贝直接将上游数据中的字段值赋给下游实体数据;
- 可以通过计算公式将计算之后的结果拿来做映射;
- 当目标字段的值不需要有来源,需要直接设置一个固定常量或者系统变量时,可以采用常量映射方式来支持,比如设计师想在将目标单据创建出来的时候,目标单据状态是待提交状态的时候,通常就会用到常量映射的方式;
- 考虑到在执行一次生单的时候上游数据可能是多条的情况,即使上游主实体数据不是多条,在上游是主子都参与了映射到一个目标实体的情况,我们将上游主子数据拍平之后的数据执行生单,会默认用映射方式为值拷贝的映射行来源实体字段进行分组,有分组就有分组聚合的需求,当设计师遇到这种需求,可以使用分组聚合函数的映射方式进行设置。
配置字段映射规则前,可配置映射前置条件。对于不满足条件的来源实体数据,不执行来源实体数据到目标实体的数据映射。
每个映射行上也可以配置映射条件,该条件用于执行生单规则时,判断该列目标实体字段是否需要赋值。
更新类型生单规则,需要配置目标实体数据查找条件,通过该条件来查询目标实体数据,能查询到,就按照下方配置的映射规则更新目标实体数据。目标实体数据检查规则,用于判断执行该生单规则之后数据是否满足指定条件,如果不满足条件,则不执行本次生单规则。
来源实体列表方案
手工触发类型生单规则,需要配置运行态选择来源实体数据的列表,可配置内容包含显示列、系统条件、排序、搜索字段。列表中可选的实体,为映射规则区域参与映射的来源实体中一个体系的实体,可以设置主实体和子实体同时在列表显示。
回写规则
一个生单规则,可以配置多个回写规则,配置不同的回写前置条件,不同的回写时机,满足不同的业务。
回写时机:目标新增是说当前生单规则的目标实体主实体数据新建时触发该回写;目标更新是说当前生单规则的目标实体数据更新时触发该回写;目标删除是说当前生单规则的目标实体数据删除时触发该回写。
回写前置条件:根据条件判断是否执行该回写规则;
回写规则配置:同映射规则配置,只是映射方式中,只支持值拷贝、计算公式、常量。
页面绑定手工触发类型生单规则
手工触发类型的生单规则配置好了之后,要想运行起来,还需要到页面上去绑定一下,操作步骤如下图所示:
微流程绑定手工触发类型的生单规则
可通过微流程调用手工触发类型的生单规则,适用于生单规则的来源实体数据,需要通过微流程做逻辑编排后,把处理过的来源实体列表/对象传递给生单规则作为生单来源数据。详细设置见「微流程-执行生单规则」。
运行生单规则
执行生单规则
应用测试发布之后,就可以到运行态执行生单规则,通过菜单进入页面,准备一些来源实体数据,然后切换到配置的拉单页面,点击按钮,选择数据,执行手工触发的生单规则。生单成功之后,会弹出一个提示框,如果设计态配置了目标详情页面(PC),那么就会有一个查看详情的按钮,点击之后可以查看生成的目标实体数据详情。
事件订阅类型的生单规则,没有直接的界面交互,只需要操作选择的事件所在实体数据即可,满足配置的条件,就会执行对应的生单规则和回写。
运行态点击执行生单规则是否会弹出选择数据列表的规则如下:
PC/移动 | 生单上游/下游 | 页面类型 | 是否拆单 | 是否弹出来源实体选择列表 | 备注 |
---|---|---|---|---|---|
PC端 | 来源实体推单 | 详情页 | 否 | 否 | 使用当前页面数据推单 |
PC端 | 来源实体推单 | 详情页 | 是 | 是 | 使用当前页面数据推单,需配置拆单字段对应目标字段的本次推单数值 |
PC端 | 来源实体推单 | 列表页 | 否 | 否 | 使用已选择数据推单 |
PC端 | 来源实体推单 | 列表页 | 是 | 是 | 使用已选择数据推单,需配置拆单字段对应目标字段的本次推单数值 |
PC端 | 目标实体拉单 | 详情页 | 否 | 是 | 使用已选择数据拉单 |
PC端 | 目标实体拉单 | 详情页 | 是 | 是 | 使用已选择数据拉单,需配置拆单字段对应目标字段的本次推单数值 |
PC端 | 目标实体拉单 | 列表页 | 否 | 是 | 使用已选择数据拉单 |
PC端 | 目标实体拉单 | 列表页 | 是 | 是 | 使用已选择数据拉单,需配置拆单字段对应目标字段的本次推单数值 |
移动端 | 来源实体推单 | 详情页 | 否 | 否 | 使用当前页面数据推单 |
移动端 | 来源实体推单 | 详情页 | 是 | 否 | 使用当前页面数据推单 |
移动端 | 来源实体推单 | 列表页 | 否 | 否 | 使用已选择数据推单 |
移动端 | 来源实体推单 | 列表页 | 是 | 否 | 使用已选择数据推单 |
移动端 | 目标实体拉单 | 详情页 | 否 | 是 | 使用已选择数据拉单 |
移动端 | 目标实体拉单 | 详情页 | 是 | 是 | 使用已选择数据拉单 |
移动端 | 目标实体拉单 | 列表页 | 否 | 是 | 使用已选择数据拉单 |
移动端 | 目标实体拉单 | 列表页 | 是 | 是 | 使用已选择数据拉单 |
总结:拉单一定弹窗,PC端推单有拆单字段一定弹窗,移动端推单一定不弹窗,移动端一定不配置本次推单数值 |
个性化生单规则
应用发布之后,运行态可以个性化设计态的生单规则,可以在映射规则区域添加映射行,来源实体的可选范围为设计态已选过的实体,不能选这范围之外的,设计态已有的行,不允许删除和修改。
对于绑定了扩展方案的实体,在应用运行态启用扩展字段后,可在运行态生单规则个性化时使用扩展实体/字段。