Java的activiti的demo_pap-activitiy

#20180226

增加activity的示例DEMO

#20180226

两种形式的测试:

1、使用 LeaveActivityProcessTest.java 、 activity.cfg.xml 、 process/leave.bpmn20.xml 三个文件进行简单的审批流功能测试;

2、增加 spring boot + activity 的整合,注意application.properties 文件,增加

spring.activiti.check-process-definitions=false

配置文件, 对应的service 接口可以完成自动注入,直接依赖注入到具体的业务即可;

#20180227

Activiti 任务节点 处理人设置

1.指定具体的处理人,可以使用变量方式设置人。也可以直接在模板中定义。

2.候选组,可以在模版中定义,不灵活。灵活的做法,可以指定一个变量赋值。

3.角色,可以在模版中定义,不灵活。灵活的做法,可以指定一个变量赋值。

4.可以使用任务监听器的方式进行赋值操作。

5.变量的方式比较灵活,模板中直接定义不灵活,因为处理节点的人或者角色可能变化。

#20180730

Spring Boot 整合 Activiti Modeler 5.22, 解决在线的工作流引擎Web设计器

1、官方下载activiti5.22.0版本的全代码包,解压缩备用;

2、代码复制:

2.1、从activiti-webapp-explorer2中复制src\main\java\org\activiti\explorer\servlet路径下的文件到本地项目中(如启动后无法访问静态资源文件,则删除DispatherServletConfiguration.java这个文件);

2.2、从activiti-webapp-explorer2中复制src\main\resources路径下的stencilset.json文件到本地项目的resources目录下(我这里为了管理放在了resources/activiti/modeler目录下);

2.3、从activiti-webapp-explorer2中复制src\main\webapp路径下的文件到本地项目的resources/public/static目录下;

2.4、从activiti-modeler中复制src\main\java\org\activiti\rest\editor路径下的文件到本地项目中;

3、pom.xml 增加 activiti(activiti-rest、activiti-explorer、activiti-diagram-rest……)、batik(batik-codec……) 相关的Maven 依赖;

4、修改StencilsetRestResource.java(如果在拷贝stencilset.json时没有放在resources目录下);

5、修改StencilsetRestResource.java、ModelEditorJsonRestResource.java、ModelSaveRestResource.java,统一在类上加@RequestMapping(value = "/activiti/service");

6、启动类增加对应的注解,对代码进行扫描、 增加 @EnableAsync 异步支持;

7、增加一个filter的Bean:

@Bean

public JsonpCallbackFilter filter(){

return new JsonpCallbackFilter();

}

8、修改editor-app下的app-cfg.js,ACTIVITI.CONFIG, 修改为第五步配置的RequestMapping 部分;

9、修改拷贝的 ModelSaveRestResource 类文件,保存方法对接受参数(入参)做部分处理;

10、 注意新增的ModelerController类文件,对应封装4个方法:1.新建一个空的模型;2.所有模型列表;3.发布模型;4.删除模型;(activiti已提供了保存修改和获取模型节点信息的方法,就是上面C部分的那3个类),对部分Util 方法的支持详见源码;

11、 增加 uploadFile 方法,对现有编辑好的流程文件进行导入功能操作(敬请期待,目前未测试);

12、 本功能的方法,可按照如下方式进行相关的测试:

12.1、启动类启动项目;

12.2、浏览器访问: http://127.0.0.1:38000/models/create/{name}/{description}/{revision}/{key}, 创建一个模型,具体的参数含义详见源码;

12.3、如上方法的返回值,会返回一个modelId, 拿着这个返回的模型ID,进行浏览器访问: http://127.0.0.1:38000/static/modeler.html?modelId={modelId}, 在这个里面进行在线的工作流引擎在线设计;

12.4、编辑完模型之后,POSTMAN 发送POST请求(http://127.0.0.1:38000/models/{modelId}/deployment), 发布模型为流程定义;

12.5、浏览器访问 http://127.0.0.1:38000/v1/activity/demo/selectprocess, 即可看到当前定义的流程,注意建议只关注当前最新的流程定义;

#20180730

1、增加初始化任务的方法:runtimeService.startProcessInstanceById("process:3:15008", variables);

2、根据当前的任务的procInstId属性(act_ru_task.PROC_INST_ID),渲染一个png的当前审批节点的图片流程;

#20180731

对在线模型编辑器维护操作的过程中,需要手工维护 Process identifier Name 两个属性

1、注意在使用 Activiti Editor 进行模型编辑的时候,默认需要对 Process identifier、Name 两个属性进行编辑(此时不需要选中任何节点,右侧图形编辑框的下部进行参数维护),这样后续在发布对应的流程定义的时候,可以拿着这两个值进行数据查询,分别对应 act_re_procdef 表的 NAME_ KEY_ 两个字段,后续进行其他流程选择的过程中,完全可以拿着这个值进行后续操作;

2、上述维护的ProcessName 的属性,定义完成之后,完全可以在使用此runtimeService.startProcessInstanceByKey("{processName}", "{obj}"); 创建一个任务的过程中,采用此处定义的参数值;

3、启动流程时,流程发起人

在启动流程之前调用API即可:

identityService.setAuthenticatedUserId(userId);

processInstance = runtimeService.startProcessInstanceByKey("leave", entityId, variables);

当流程启动之后可以到表ACT_HI_PROCINST中查看字段START_USER_ID_的值来验证是否生效。

4、启动流程时,定义业务对象

自定义一个 businessKey, 在启动流程的时候进行入参操作,让业务对象和对应的流程 关联 runtimeService.startProcessInstanceByKey("processId", businessKey, variables);

ProcessInstance 对应数据库中的表act_ru_execution有个字段BUSINESS_KEY_对应类中的businessKey,这个字段在创建表时自动被设置为unique

解决:

1、保证流程的ID和业务对象的类名一致。例如:流程id为ActivitiLeaveBillDTO,我们的业务对象的类名也创建为ActivitiLeaveBillDTO。

2、在流程启动的时候获取业务对象执行方法的时候传入businessKey,workflowService.startProcess(key,businessKey,vars);(这里vars为一些变量根据实际情况可有可无)businessKey 产生规则: className+“.”+objId

5、指定组任务查询,查询当前人的组任务

List list = processEngine.getTaskService()// 与正在执行的任务管理相关的Service

.createTaskQuery()// 创建任务查询对象

/** 查询条件(where部分) */

.taskCandidateUser(candidateUser)// 组任务的办理人查询, 注意这里对应 act_id_user.id_ 字段

/** 排序 */

.orderByTaskCreateTime().asc()// 使用创建时间的升序排列

/** 返回结果集 */

.list();// 返回列表

#20180801

审批拒绝的流程设计:

Activiti 中,在进行在线Web模型编辑器的过程中,可以注意 sequenceFlow 的设计,选中一个 sequenceFlow, 可以在操作面板中对 conditionExpression 进行设计,举例:如果设计当前的条件为 ${flag==true}, 那么只有当完成任务的过程中,flag传入参数为true的时候,才能够走到下一个节点, 所以,针对同一个 UserTask 节点,可以出来多个 sequenceFlow, 只有当不同的条件传入的时候,才能确定下一个走向的流程,可以通过类似这样的设计,完成审批拒绝的功能;

// 完成任务

Map variables=new HashMap();

variables.put("flag", false);

processEngine.getTaskService().complete(taskId, variables);//vars是一些变量

flag字段的不同值,代表不同的走向;

审批流的拒绝功能,可以不进行单独的开发工作,完全可以通过sequenceFlow:conditionExpression 中的设计进行处理,设计不同的条件,跳转到不同的节点。

#20180802

任务的批注历史记录:

我的申请,根据processInstanceId, 查询历史的批注历史信息记录

#20181018

增加工作流任务认领,区分组任务和个人认领任务:

// 让指定userId的用户认领指定taskId的任务

processEngine.getTaskService().claim(taskId, userId);

同时我的代办里面,注意区分出来我这个用户所属角色的所有任务,和我认领的任务(次任务只能我进行处理);

#20190223

1、增加 Activiti 之后,需要在启动类中增加如下部分, 防止由于 security 造成的异常情况登录、CORS)

@SpringBootApplication(exclude = {

org.activiti.spring.boot.SecurityAutoConfiguration.class,

org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class

})

#20190223

在线模型编辑器(/static/modeler.html?modelId=2)在使用的过程中,注意可以将模型内定义的各个Activities(User Task/Service Task)

选中某一个节点,编辑 Assignments 部分内容,进行当前节点的分配,只有这里分配过数据之后,后续的功能才能根据当前节点的设置,显示在不同的功能中

当前工程中,所有的任务节点建议按照group 组进行功能节点的分配,这里分配完毕后,就可以在 我的待办 里面,看到所属组内用户可看到的用户信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值