1. 背景介绍
本产品为快速开发平台,为了用户可以灵活的实现自己的业务需求,平台内部很多很多环节都支持撰写脚本,但是这些脚本的执行顺序,脚本语言与规范,脚本撰写的注意事项都无法准确的通过系统配置页面了解到,故而撰写该文档协助了解脚本与事件的使用。
2. 脚本事件说明
2.1. 表单相关
2.1.1 引入脚本
设计的表单支持编写JS逻辑代码,如下图所示,通过【引入脚本】按钮可以打开脚本编辑界面。
在脚本编辑界面,左侧为当前表单的页面HTML代码(可以理解为Vue开发时template标签中的部分),右侧为JS代码,可以按照Vue的语法编写表单逻辑代码,_this为当前表单的Vue实例对象。
特别注意,在进行表单保存/发布新版这样的操作时,HTML内容会通过模板重新生成,所以如果修改了HTML内容,保存表单后会导致之前修改的HTML丢失;JS不会丢失。
另外我们也引入了jQuery库,可以在这里通过$编写相应代码,不过我们的建议是尽量不要使用jQuery。
在表单渲染时,我们会如下图所示在Vue的created事件中挂载自定义JS代码,在上下文中定义了参数data,_this,所以编写的JS代码中可以用到这些参数。
2.1.2字段校验
字段的校验集成了vee-validate框架,如下图所示,提供的校验规则大多配置起来比较简单易懂,只有JS方法校验和后端校验配置较为复杂。
- JS校验方法
在配置界面已经有详细的说明,可以参照示例进行配置。
- 后端校验
后端校验可以将字段值传递给后端进行校验,校验结果再返回到前端。如下图所示,后端需要以POST格式发布为Restful接口,取值时从URL地址参数中以value为key进行取值,返回Boolean类型的校验结果。
前端配置时,添加URL参数key为value,等号后面留空,在使用表单时会自动将字段的值追加到URL地址后面并请求后端的Restful接口。
- 校验规则的扩展
如下图所示,添加新的校验规则需要在validate.js中在rules对象下扩展,新规则的定义可以参照原有规则。
新增的规则还需要在表单设计时,在【字段校验】的下拉框中添加新的下拉选项,该选项的扩展需要在如下所示的js文件中添加选项,注意:添加的选项的key必须和rules中定义的规则名称一致。
2.1.3按钮JS方法
设计表单时可以添加按钮,按钮的js方法可以按照说明示例来配置。
代码中执行这段js的切入如下图所示。
2.1.4公式编辑
如下图所示,公式编辑按照每个函数的帮助说明进行配置即可完成各种数学计算、文本处理、日期处理等等。
这些函数的定义及如何在表单中生效的可以查看下图中的代码。
2.2表单列表相关
2.2.1 前后置groovy脚本
如下图所示,在表单列表配置界面中可以配置前后置Groovy脚本,在添加/编辑数据之前会执行前置脚本,之后会执行后置脚本,脚本的上下文中有boData变量可以获取到表单数据(注意在前置脚本中修改数据才会保存到数据库中,后置脚本中修改无效)。
boData对应的Java类为com.hotent.bo.model.BoData。
执行前后置脚本的代码如下图所示。
2.2.2显示字段设置
显示字段中可以对某一列进行文字颜色设置,例如金额在不同范围时显示不同的颜色,其配置如下图所示,首先指定文字颜色,在配置验证规则,返回true/false来表示是否应用该文字颜色。
当配置了多条规则,而数据同时符合多条规则时,以最后一条规则的颜色为准。
注意:因为data中某一字段可能为空,所以代码中最好对该字段的值是否存在进行判断(还要注意该字段如果为数字类型,且正好值为0时的判断)。
执行该规则的代码如下图所示。
2.2.3数据过滤
- 条件脚本
条件脚本的配置都非常直观易懂,按照业务规则进行相应的过滤配置即可。
- 追加SQL
如下图所示,可以通过追加SQL的方式对数据进行更个性化的过滤,配置的SQL语句会追加到where后面。
执行数据过滤时,应用追加SQL的代码如下图所示。
- 数据权限
数据权限的过滤也比较直观易懂,按照表单中字段实际存放的数据与当前用户、当前组织进行匹配来实现数据过滤。
2.3流程相关
2.3.1 节点审批人的人员规则设置
如下图所示,节点审批人员可以配置为多个批次,按照顺序逐个批次查找执行人,直到该批次返回的审批人不为空为止。
每个批次配置节点审批人的时候可以配置一个人员规则,该规则运算结果返回true或false,为true时该人员设置才生效,为false时继续找下一个批次的人员设置。
人员规则设置是一个可视化的配置界面,可以自由组合多种条件,包括规则和脚本,规则的配置比较直观易懂,脚本则支持通过Groovy代码进行逻辑判断,如下图所示,脚本中需要返回true或者false。
对多个批次及人员规则进行计算的代码如下图所示:
2.3.2节点属性中的前后置处理器
如下图所示,在某个节点上可以配置前后置处理器,配置内容为指定Spring容器中的BeanId+方法名,该方法需要配置一个ActionCmd的对象作为入参。
如下图所示,在该节点上用户进行审批操作时会先触发前置处理器,后触发后置处理器,如下面的代码断点所示。
2.3.3节点按钮中的前置脚本和groovy脚本
- 前置脚本
前置脚本可以通过JavaScript编写,该脚本在用户点击该按钮时触发,返回false时阻止按钮后续动作,返回true时继续执行。
执行这段JS代码在如下图所示位置,可以使用_req,data,_this这三个参数。
- Groovy脚本
如下图所示,在Groovy脚本中可以通过逻辑判断是否显示当前按钮,返回true则显示,返回false则不显示。
脚本中可以使用当前流程变量、表单变量,表单变量以JsonNode的格式提供,可以通过JsonUtil访问其中的属性,执行脚本的代码如下所示。
2.3.4节点事件(设置接口事件)
- 接口事件的配置
设置接口事件是指在流程启动、结束,或者指定环节的任务创建、任务结束时去调用Restful接口的功能,如下图所示,需要配置接口地址、调用类型、触发时机等信息。如果接口的调用需要授权可以在接口头部添加一些校验信息,现在系统仅支持配置静态的头部内容,当接口采用类似auth0时可以支撑授权校验。更复杂的场景下可能需要针对具体授权校验方式做相应的改造。
- 提供的Restful接口
如下图所示,提供了一个Restful接口的示例,以POST方式发布接口,入参为字符串类型的参数,EIP在调用这个接口时会将当前流程的上下文参数以JSON格式的字符串作为请求参数。
- 调用接口时传递的参数
- 接口调用代码
- 接口调用日志与接口重调
接口的调用不论成功还是失败都会记录到调用日志中,日志中记录了调用时间、调用参数、调用地址、调用结果等,而且提供了重调的功能可以手动触发再次调用。
2.3.5跳转规则的规则表达式
跳转规则的配置中可以配置一个规则表达式,该表达式返回true时则流程直接跳转到指定环节。
执行跳转规则脚本的代码如下图所示。
2.3.6流程节点前后置事件
如下图所示,在流程某个环节可以配置前后置事件,前置事件在该环节要产生任务时触发,后置事件在该环节的任务被办理时触发。
如下面的例子所示,前置事件中可以判断当前流程是否被驳回到发起人了,如果是则修改一个流程变量的值为“1”,在后续的分支中可以根据该变量走不通的分支,从而实现正常审批时走分支1,被驳回到发起人以后走分支2。
使用前后置事件对表单进行赋值:
scriptImpl.updateMainField("lcpzbd","mc","宏天软件");
执行前后置事件的代码如下图所示。
2.3.7初始赋值
在流程的指定环节可以实现业务数据的映射,如下图所示,可以将来源字段或者通过Groovy脚本计算出来的值赋值给某个待映射字段。
如下所示为执行赋值脚本的代码。
2.3.8分支网关
如下图所示,为分支网关的设置界面,通过Groovy脚本的执行返回true或者false,分支判断按照从上至下一次匹配的方式执行,如果某个分支符合判定,则不再往下执行,如果执行完所有的判断均没有符合的分支时则抛出找不到可用分支的异常。
分支网关的脚本执行如下图的代码所示。
2.3.9脚本节点
脚本节点属于自动任务环节,流程会自动执行该环节的任务,可以通过Groovy脚本来实现一些逻辑处理,脚本的执行如下图所示。
2.3.10消息节点
消息节点属于自动任务环节,流程会自动执行该环节,按照消息配置进行消息的发送。消息节点对应的处理代码如下图所示。
3. 时序图
分类 |
名称 |
类型 |
触发时机 |
---|---|---|---|
表单 |
引入脚本 |
JS脚本 |
表单使用的整个过程 |
字段校验 |
前后端校验 |
1. 指定字段的值变化或失去焦点时(校验当前字段); 2. 提交表单时(校验表单所有字段)。 |
|
按钮js方法 |
JS脚本 |
点击按钮时 |
|
公式编辑 |
组成公式的字段值变化时 |
||
数据列表 |
前后置Groovy脚本 |
Groovy脚本 |
添加或更新表单数据时 |
显示字段中对字段的设置 |
JS脚本 |
显示数据列表时 |
|
数据过滤 |
Groovy脚本&追加SQL |
||
流程 |
节点审批人的人员规则设置 |
Groovy脚本 |
产生任务并分配任务的处理人时 |
节点按钮前置脚本 |
JS脚本 |
点击按钮时 |
|
节点按钮Groovy脚本 |
Groovy脚本 |
显示按钮之前 |
|
节点事件(设置接口事件) |
配置Restful接口 |
1. 流程启动时; 2. 流程结束时; 3. 任务创建时; 4. 任务结束时。 |
|
跳转规则的规则表达式 |
Groovy脚本 |
配置所在节点的任务审批时 |
|
流程节点的前后置事件 |
前置事件:配置所在节点产生任务时; 后置事件:配置所在节点的任务被办理时。 |
||
分支网关 |
流程审批到该节点时 |
||
脚本节点 |
|||
消息节点 |