工作流学习1

学习流程,

首先了解工作流的基础知识及相关概念。

一、本项目常用

1、查询对象。Activiti的各个服务组件(XXXService)均提供了createXXXQuery方法,这些方法返回一个Query实例,例如createGroupQuery返回GroupQuery,GroupQuery是Query的子接口。

        Query是所有查询对象的父接口,该接口中定义了若干个基础方法,各个查询对象均可以使用这些公共方法,包括设置排序方式、数据量统计(count)、列表、分页、和唯一记录查询。这些方法描述如下:

        asc:设置查询结果的排序方式为升序。

        count:计算查询结果的数据量。

        desc:设置查询结果的排序方式为降序。

        list:封装查询结果,返回相应类型的集合。

        listPage:分页返回查询结果,返回相应类型的集合。

        singleResult:查询单条符合条件的数据,如果查询不到,则返回null;如果查询到多条记录,则抛出异常。

2、TaskService:对流程任务进行管理,例如任务提醒、任务完成和创建任务等。

3、ProcessInstance流程实例:ProcessInstance是一个接口,一个ProcessInstance实例表示一个流程实例,ProcessInstance实际上是执行流(Execution)的子接口,流程实例也就是一个执行流。ProcessInstance中有Execution没有的属性,例如流程定义和业务主键。当得到一个ProcessInstance实例时,就将其看作一个流程实例;当得到一个Execution实例时,它就是一个执行流。流程实例与执行流的数据保存在执行表(ACT_RU_EXECUTION)中,对应的映射实体为ExecutionEntityImpl。ExecutionEntityImpl主要包括以下映射属性。

id:主键ID,对应 ACT_RU_EXECUTION 表的ID 。 

revision:该数据的修订版本号, 对应阻REV_字段。

businessKey:流程实例的业务主键,只有 Processlnstance 实例才有该值。

 parentld:父执行流的ID,在没有流程分支的情况下,流程实例与执行流的父ID 为同一条数据,如果出现新的执行流,那么将会                设置该值,对应 PARENT_ID字段。

processDefinitionld:流程定义 ID,不管是流程实例数据还是执行流数据,该字段均会被设置为相应的流程定义ID,对应

              PROC_ DEF_ID字段。

superExecutionld:父执行流的ID,如果该执行流是子流程的一部分,则该值不为 null, 对应 SUPER_EXEC_字段。

 activityld:当前执行流的动作, 一般为流程节点的名称,对应 ACT_ID_字段。

isActive:该执行流状态是否活跃,如果当前的执行流分为两个子执行流,则当前的执行流被标识为非活跃状态,而两个子执行流则为活跃状态,对应 IS_ACTIVITE_字段。

isConcurrent:执行流是否并行, 对应 IS_CONCURRENT字段。

isScope:是否在执行流范围内 。

isEventScope: 是否在事件范围内 。

suspensionState:流程中断状态, l 为活跃, 2 为中断。

以上对 ExecutionEntitylmpl 的部分属性进行了简单描述,各个属性更详细的含义及作用, 将会在后面章节中详细讲解。

4、Task接口:一个 Task 实例表示流程中的一个任务,与其他实例一样, Task 是一个接口,并且遵守数据映射实体的命名规范。 Task 的实现类为 TaskEntitylmpl,对应的数据库表为 ACT_RU_TASK. TaskEntitylmpl 包括以下映射属性。 

id: 主键,对应ID字段。

revision: 该数据版本号,对应阻REV_字段。

owner:任务拥有人,对应OWNER_字段。

assignee:被指定需要执行任务的人,对应 ASSIGNEE_字段。

delegationState:任务被委派的状态,对应 DELEGATION_字段。

parentTaskld:父任务的 ID (如果本身是子任务的话),对应 PARENT_TASK_ ID_字段。

name:任务名称,对应 NAME 字段。

description:任务的描述信息,对应 DESCRIPTION_字段。

priority:任务的优先级,默认值为 50,表示正常状态,对应PRIORITY_字段。

createTime: 任务创建时间,对应 CREATE_TIME_字段。

dueDate:预订日期,对应 DUE_DATE_字段。

executionld:该任务对应的执行流 D,对应 EXECUTION_ID_字段。

processDefinitionld:任务对应的流程定义ID,对应 PROC_DEF_ID_字段。

claimTime:任务的提醒时间,对应 CLAIM_TIME_字段。 

5、.excludeTaskVariables()方法。

即判断taskId和taskIds是否为空,若为空则返回Cannot use taskId(s) together with excludeTaskVariables错误。

二、根据书籍,进行activiti的下载安装和小案例的练习,学习书籍:疯狂工作流讲义 基于Activiti 6.x的应用开发。

        activit版本下载:https://github.com/Activiti/Activiti/releases/tag/activiti-6.0.0

    1、BPMN元素

    2为用户分配任务

 

三、安装。

      安装与运行Activiti:https://blog.csdn.net/boxiong86/article/details/78423800

插件安装:

       activiti idea插件安装:https://www.cnblogs.com/No2-explorer/p/11032469.html

       activit使用:https://www.cnblogs.com/jpfss/p/11078285.html

       activit使用的案例:https://www.cnblogs.com/runtimeexception/p/8961395.html

四、好的资源

https://www.cnblogs.com/javalaw/p/7881507.html

书籍写在博客上资源:https://blog.csdn.net/boxiong86/category_7259762.html

五、工作流的几个错误

    1、  activiti创建数据库表报错

org.activiti.engine.ActivitiException: no activiti tables in db. set <property name="databaseSchemaUpdate" to value="true" or value="create-drop" (use create-drop for testing only!) in bean processEngineConfiguration in activiti.cfg.xml for automatic schema creation

解决方法:

表创建是要先主在从加上如下一句代码conf.setDatabaseSchemaUpdate("true");该属性可以设置流程引擎 启动和关闭时数据库执行的策略。通常有三个值:(1)false,默认值,设置为该值后,activiti在启动时,会对比数据库表中保存的版本,如果没有表或者版本不匹配,将在启动时抛出异常。(2)true:设置该值后,Acitiviti会对数据库中所有的表进行更新,如果表不存在,则Activiti会自动创建。(3)create-drop:acitiviti启动时,会执行数据库表的创建操作,activiti关闭时,执行数据库表的删除操作。

2、  未找到ID为的已部署流程定义错误。

org.activiti.engine.ActivitiObjectNotFoundException: no deployed process definition found with id 's。

解决方法:仔细看上面的异常是指定的流程定义ID不存在。再仔细看看我的代码,我的愿意是通过流程定义中<process>元素的id去启动流程。但是我错误写使用了startProcessInstanceById方法。

方法一、因此将startProcessInstanceById()方法改为startProcessInstanceByKey()方法就解决问题了。你到act_re_procdef表中去查看ID_字段的格式为:myProcess:1:4,所以根本就不存在ID等于myProcess的流程定义。

方法二、去mysql表中找到表,去看ID,然后将方法里ID名字改为数据库里的名字。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值