在init()方法里,有一大堆的初始化。有个方法initCommandExecutors();
flowable多示例任务 flowable创建任务
flowable多示例任务 flowable创建任务
方法initCommandExecutors里的内容如下
方法initCommandInterceptors里的getDefaultCommandInterceptors内容
创建了各种,也就是当执行某个命令时,会执行这些。(包括了日志、事务等)
例如当执行完成任务时,会被事务拦截,启动事务等其它功能,如果需要我们也可以自定义
方法initCommandExecutor里的内容如下
把各个命令串联起来
在项目flowable-ui-modeler-app中找到stencilset/stencilset_bpmn.json文件
propertyPackages属性中增加扩展属性定义
id:自定义的属性id
type:指向自定义的类型
找到文件resources/static/editor-app/configuration/properties.js
在文件中追加自定义类型的注册信息
注意:此处的属性名称“flowable-mypropertytype”,是约定好的书写格式,是定义的propertyPackage的id加前缀flowable,不能随意修改,不然将无法找到相关的信息
readModeTemplateUrl:定义显示属性内容的模板
writeModeTemplateUrl:定义编辑属性内容的模板
flowable本身已经创建了许多类型的模板,可以参考-template.html相关的文件
增加模板文件
mypropertytype-properties-display-template.html
mypropertytype-properties-write-template.html
增加js实现,创建文件properties-mypropertytype-properties-controller.js
结构可以参考其他相关属性实现,一般为-properties-controller.js
在index.html引入扩展的属性
在用户任务中增加mypeopertypackage
有两种方式配置扩展属性
对应属性设置
对应属性设置
一、根据flowable这类国外的开源工作流,它的任务办理方式为两种:
1.任务需要签收才办理,即有一个接收任务的过程:任务创建后,流程进入一个等待的状态
2.任务不需要签收,就可以直接办理
1、嵌套子流程的子流程,子流程嵌入在它的主流程(上图命名为入口流程,主流程是指整个流程图);
2、嵌套子流程的子流程没有流程实例id,主流程有流程实例Id;(流程实例id是指,启动流程之后,会生成的id)
3、嵌套子流程区别于任务,嵌套子流程没有任务id(taskId),任务有任务id(taskId),但,任何类型的都有执行id(Id)。(任务id,类型为UserTask的,并在被触发之后,生成的id)
4、不能人为的启动嵌套子流程的子流程
flowable会签结束了,但是会签变量没有更新,这是一种bug,可能是因为网络延迟或者是系统的问题,所以才没有更新。
会签的意思是,在流程任务管理中,任务通常是由一个人或者多个人同时去处理的,这种任务叫做会签任务。类似于并行。
2、会签类型
按数量通过:达到一定数量的处理后,会签通过
按比例通过:达到一定比例的处理后,会签通过
一票否决:只有一个人不同意时,会签通过
一票通过:只有一个同意时,会签通过
Flowable实现会签是基于多实例任务的,将设置成多实例,通过在userTask的属性配置。
3、多实例类型
可以选择并行会签(parallel)、顺序会签(sequential),其中并行会签的意思是 多个人同时执行任务。顺序会签是按顺序执行任务。
在 Flowable 中,如果跳转到的存在多个执行人,会导致报错,因为在跳转时需要指定具体的执行人。
要解决这个问题,可以在跳转时选择其中一个执行人作为目标的执行人,或者使用 Flowable 提供的动态用户任务(Dynamic User Task)功能来解决多个执行人的问题。
动态用户任务允许在流程运行时动态指定任务的执行人,具体实现方式如下:
在目标设置一个动态用户任务,并为该任务设置候选用户或候选组,例如:
在这个示例中,${assignee} 是一个占位符,可以在流程运行时通过流程变量进行替换,以指定具体的执行人。
创建一个实现 TaskListener 接口的类,实现该接口的 notify 方法,在该方法中指定任务的执行人。例如:
public class DynamicUserTaskListener implements TaskListener {
@Override
public void notify(DelegateTask delegateTask) {
String assignee = (String) delegateTask.getVariable("assignee");
delegateTask.setAssignee(assignee);
}}
在这个示例中,notify 方法从流程变量中获取指定的执行人,并将其设置为任务的执行人。
在流程运行时,通过设置流程变量来指定任务的执行人。例如:
Map
variables.put("assignee", "user1");
runtimeServ.setVariables(task.getProcessInstanceId(), variables);
在这个示例中,使用 runtimeServ.setVariables 方法设置流程变量,将 assignee 设置为 user1。
通过使用动态用户任务,可以在 Flowable 中解决多个执行人的问题,以便更灵活地控制流程的执行。
版权声明:本文内容由互联。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发 836084111@qq.com 邮箱删除。