首页 > 编程知识 正文

如何自学钢琴,自学吉他教程

时间:2023-05-05 05:33:53 阅读:25791 作者:2421

总体想法:

0:初始化用户和用户组

1 )上传并部署流程,启动流程

2 :创建流程实例

3 :获得我的任务

4、执行审批操作

5、获取审批详情

问题Activiti6版本与activiti7版本的最大区别:

activiti7集成spring security用户和用户组不提供与用户相关的表,如act_id_group、act_id_info和act_id_user

无法自动创建Activiti6问题2解决方案表。 url: jdbc:mysql://在末尾添加nullCatalogMeansCurrent=true

false:false是默认值,如果设置为此值,Activiti将在启动时与存储在数据库表中的版本进行比较,如果没有表或版本不匹配,则在启动时抛出异常。 true :如果设置为此值,Activiti将更新数据库中的所有表,如果表不存在,Activiti将自动创建。 create-drop:Activiti启动后,执行数据库表创建操作,Activiti关闭后,执行数据库表删除操作。 drop-create:Activiti启动时,执行数据库表删除操作。 Activiti关闭后,将执行数据库表创建操作。 spring.activiti.history-level=full

none :因为不存储任何历史数据,所以在流程运行时这是效率最高的。 活动:级别高于none,保存流程实例和流程行为,不保存其他数据。 audit--除了存储在activity级别的数据外,还存储所有流程任务及其属性。 审计是历史的默认值。 full :保存历史数据的最高级别。 它不仅存储audit级别的数据,还存储所有其他进程的详细数据。 包括几个工艺参数等,下面以整体的思路开始分析。

0 :初始化用户和用户组IdentityService:提供用户和用户组管理功能。 与典型的用户中心操作一样,IdentityService允许您初始化用户之间的关系。 建议与部门关联,并与部门关联

1 )上传和部署流程,RepositoryService)主要用于管理流程部署的数据

部署方法:

按路径部署: repository service.create deployment (.addclasspathresource ).deploy );

部署inputStream :存储库服务. create deployment (.add inputstream (filename,fileInputStream ).deploy );

按字符串部署: repository service.create deployment ().addString (名称)、xml内容

部署压缩包方法: repository service.create deployment (.addzipinputstream (newzipinputstream ) ).deploy );

. deploy (; //执行部署

确认启动是否成功。 存储库服务. createprocessdefinitionquery (.processdefinitionkey " key " ).count )。

装入进程资源:

存储库服务. createprocessdefinitionquery (

存储库服务. createprocessdefinitionquery ().listpage () 0,10 ) )。

删除部署:

存储库服务. delete deployment (部署id,true ); //deleteDeployment方法有两个参数。 第一个是部署ID,第二个参数true表示删除时,也会同时删除与流程相关的流程数据,包括正在运行和已退出的流程实例

激活过程: repository service.activateprocessdefinitionbyid (processdefinitionid,true,null );

挂起过程: repository service.suspendprocessdefinitionbyid (processdefinitionid,true,null );

2 )创建流程实例RuntimeService。 主要用于管理进程在运行时生成的数据(进程参数、事件、进程实例和运行流)和操作正在运行的进程的API

如何启动流程实例:

进程定义的密钥值: ru

ntimeService.startProcessInstanceByKey(”processDefinitionKey“,vars);

​ 流程实例挂起:runtimeService.suspendProcessInstanceById(processInstanceId);

​ 流程实例激活:runtimeService.activateProcessInstanceById(processInstanceId);

​ 流程实例 验证:

​ 验证流程实例是否启动成功:Assert.assertNotNull(processInstance);

​ 验证是否挂起: 反之激活Assert.assertTrue(runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult().isSuspended());

​ 流程实例查询:

​ RuntimeService中有createExecutionQuery方法可以得到一个ExecutionQuery对象,该对象就可以根据执行流的相关数据查询执行流

​ RuntimeService提供了一个createProcessInstanceQuery的对象,可以查询对应的流程实例信息

​ 执行流的查询: runtimeService.createExecutionQuery().processDefinitionKey(processDefinitionKey).list();

​ 根据流程定义Key值查询正在运行的流程实例: runtimeService.createProcessInstanceQuery().processDefinitionKey(processDefinitionKey).list();

​ 查询激活的流程实例:runtimeService.createProcessInstanceQuery().processDefinitionKey(processDefinitionKey).active().list();

​ 查询挂起的流程:runtimeService.createProcessInstanceQuery().processDefinitionKey(processDefinitionKey).suspended().list();

​ 删除流程实例:runtimeService.deleteProcessInstance(processInstanceId,“删除测试”);

​ 创建流程实例的时候建议自己新建一张表,以方便记录获取查询,比如记录关联部门,方便后期查询自己创建历史

3:获取我的任务

TaskService: 提供了运行时任务的查询、领取、完成、删除以及变量设置等功能

​ 此处才是重中之重,我在此浪费了很多时间。那我就简单描述一哈,一般流程设置执行人分为几种,有直接指定,有指定变量,有指定用户组等多种方式,

如果直接指定执行人,setAssignee(“user”)这种模式是没有问题,相对于很多演示demo也是这种,但是变量形式指定或者用户组指定时会出现assignee字段为null,比如以下方式执行执行人时,map.put(“users”,“a,b,c”);“users”对应流程图中的candidate #{users},多人用“,”分割,Act_ru_task表中:assignee字段是空的

通过

taskService.createTaskQuery() .taskAssignee(String.valueOf(SecurityUtils.getUserId()))

这种方式是获取不到数据,所以根据具体情况可以使用taskCandidateUser进行参与者,组任务查询,但是通过这种方式要注意一点,groupid,需要跟画流程图的时候指定的groupAssignee匹配的上,此处我也浪费了一些时间才整通

4,执行审批操作 if (task.getAssignee() == null) { taskService.claim(taskID,String.valueOf(String.valueOf(SecurityUtils.getUserId())));}if (hasVariables) { //带参数完成任务 taskService.complete(taskID,variables);} else { taskService.complete(taskID);}

审批操作一般分为带参数完成,不带参数完成,如果是用户组任务,需要进行任务拾取,这里如果有兴趣的同学可以自行百度何为任务拾取。此处也建议新建一张表,存储审批意见,方便进行后期展示查询导出操作

5,获取审批详情

HistoryService:获取正在运行或者已经运行结束的流程实例信息

获取审批详情分为两种:一种就是HistoryService查询历史

​ 另一种就是上面所说的创建自己表记录的操作记录

下面两种不常用,有兴趣的同学可以自行了解,这里就不做阐述了

FormService:流程和状态Task均可关联相关的业务数据

ManagementService:提供对流程引擎的管理和维护的功能

知识扩展:有助于扩展

ExecutionListener与TaskListener的区别:

public interface BaseExecutionListener extends Serializable { String EVENTNAME_START = "start"; String EVENTNAME_END = "end"; String EVENTNAME_TAKE = "take";}public interface BaseTaskListener extends Serializable { String EVENTNAME_CREATE = "create"; String EVENTNAME_ASSIGNMENT = "assignment"; String EVENTNAME_COMPLETE = "complete"; String EVENTNAME_DELETE = "delete"; String EVENTNAME_ALL_EVENTS = "all";}

针对事件不同:根据代码块即可看出来

通知的代理不同:ExecutionListener:DelegateExecution 与TaskListener: DelegateTask

所遇问题

org.activiti.engine.ActivitiException: Unknown property used in expression: ${FormProperty_3qipis2==0}

解决办法:taskService.complete(task.getId(),variables); 删除第三个参数true

taskService.complete(task.getId(),variables,true)

说明:taskId(对应act_ru_task中的id_),variables(下一次任务所需要的参数),localScope(存储范围:本任务)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。