java工作流activiti的步骤

java

链接:activiti 表名称的解释

工作流从流程定义到创建一个流程实例完成执行步骤(省略bpmn的画法)

  工作流的所有操作都是使用流程引擎来进行操作的,流程引擎只是存储流程的过程,而不存储具体的业务数据,需要自行建立相关的表,工作流的特点是流程和业务的关联具体步骤如下。

  1. 创建流程引擎,也就是生成工作流所需要的23+张表。
  2. 流程引擎的部署。通过RepositoryService 进行部署,它是对应的就是流程的静态资源,将图片和bpmn上传至数据库。
  3. 使用activi-designer创建一个流程定义(.bpmn结尾的文件)
  4. 将定义好的流程定义和生成的png图片通过RepositoryService(前面章节说过主要是用来处理流程定义的service)的api上传到数据库
  5. 通过RuntimeService(这个service主要是处理当前正在运行的流程实例的)启动一个流程实例
  6. 这个时候通过TaskService(主要处理当前运行的任务,一个流程实例下有多个任务)获取到上面的实例所对应的当前人任务
  7. 结束上面的任务task,流程实例会走向下一个task任务
  8. 重复4,5,完成一个流程实例的启动到结束

  上面就是一个最简单从上往下执行的流程的执行步骤,本章节都是以代码做示例,代码不多,但是都执行一遍,你会对整个activiti的流程有个大概的了解

   

  创建流程引擎

    一般java中使用工作流,都是和spring框架结合进行使用的,具体情况后续添加。

  

//普通方法的创建

/**

* Description:创建流程引擎

*

* @author cy

* @date 2018年08月03日 16:34

* version 1.0

*/

public class CreateEngine {

public static void main(String[] args) {

//流程引擎的创建,使用流程引擎配置文件,也就是创建23+张表

ProcessEngineConfiguration processEngineConfigurationFromResource = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();

//设置数据库信息

processEngineConfigurationFromResource.setJdbcUrl("jdbc:mysql://localhost:3306/cheng?useUnicode=true&characterEncoding=utf-8");

processEngineConfigurationFromResource.setJdbcDriver("com.mysql.jdbc.Driver");

processEngineConfigurationFromResource.setJdbcUsername("root");

processEngineConfigurationFromResource.setJdbcPassword("admin");

processEngineConfigurationFromResource.setDatabaseSchemaUpdate(processEngineConfigurationFromResource.DB_SCHEMA_UPDATE_TRUE);//对数据库进行更新

processEngineConfigurationFromResource.buildProcessEngine();//创建引擎

System.out.println("创建引擎成功");

}

}

 

  流程部署

/*

* 获取流程引擎对象,下面的方法会默认查找classpath目录下的名称为activi.cfg.xml

* 里面bean的id为processEngineConfiguration的ProcessEngineConfiguration引擎配置对象来获取ProcessEngine对象

*/

private ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

//部署一个流程

@Test

public void deployProcessDefinition(){

//根据引擎获取资源service

RepositoryService repositoryService = engine.getRepositoryService();

//部署bpmn文件

String bpmnName="purchasingflow.bpmn";

InputStream bpmnIn = this.getClass().getClassLoader().getResourceAsStream("diagram/purchasingflow.bpmn");

//部署bpmn生成的图片

String pngName="purchasingflow.png";

InputStream pngIn = this.getClass().getClassLoader().getResourceAsStream("diagram/purchasingflow.png");

//添加这两个文件进行部署

Deployment deployment = repositoryService.createDeployment()

.addInputStream(bpmnName, bpmnIn)

.addInputStream(pngName, pngIn)

.deploy();

System.out.println("部署id:"+deployment.getId());

System.out.println("部署的name:"+deployment.getDeploymentTime());

}

 

  查询流程的定义

//查询流程定义

@Test

public void queryProcessDefinition(){

RepositoryService repositoryService = engine.getRepositoryService();

//创建流程定义查询对象

ProcessDefinitionQuery definitionQuery = repositoryService.createProcessDefinitionQuery();

String processDefinitionKey = "purchasingflow";

//设置流程定义的key的查询条件

definitionQuery.processDefinitionKey(processDefinitionKey);

//查询所有的流程定义

List<ProcessDefinition> processDefinitionList = definitionQuery.list();

for(ProcessDefinition definition:processDefinitionList){

System.out.println("-------------------------");

System.out.println("流程定义id:"+definition.getId());

System.out.println("流程资源名:"+definition.getResourceName());

System.out.println("流程部署id:"+definition.getDeploymentId());

}

}

 

  启动一个流程实例

//启动一个流程实例

@Test

public void startProcessInstance(){

RuntimeService runtimeService = engine.getRuntimeService();

String processDefinitionKey = "purchasingflow";

//根据流程定义的key启动一个流程实例

ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);

System.out.println("流程实例id:"+processInstance.getId());

System.out.println("流程定义id:"+processInstance.getProcessDefinitionId());

}

 

  查询当前处理人的任务

//查询当前用户的代办任务

@Test

public void queryProcessInstance(){

//查询任务使用的service

TaskService taskService = engine.getTaskService();

//获取任务查询对象

TaskQuery taskQuery = taskService.createTaskQuery();

taskQuery.taskAssignee("zhangsan");

//查询该条件下的所有的任务

List<Task> tasks =taskQuery.list();

for(Task task:tasks){

System.out.println("当前任务id:"+task.getId());

System.out.println("当前任务所属流程定义id:"+task.getProcessDefinitionId());

System.out.println("当前任务的key:"+task.getTaskDefinitionKey());

}

}

 

  完成一个流程

//完成一个流程

@Test

public void completeProcessInstance(){

//任务的id,后期整合后会通过当前登录人身份查询到该用户的任务,然后获取到该id

String taskId="402";

TaskService taskService = engine.getTaskService();

//根据任务id完成该任务

taskService.complete(taskId);

}

 

以上是 java工作流activiti的步骤 的全部内容, 来源链接: utcz.com/z/394995.html

回到顶部