最近需要实现一个采用工作流来实现一个业务流程,下面是小编自己做的一个关于helloworld的实现流程
一、配置文件:activiti.cfg.xml
在工作流已经是一个很成熟的框架了,关于流程引擎配置需要在配置文件中完成映射,并且该文件是默认读取的:
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
</bean>
二、配置完流程文件,我们需要需要在数据库中创建创建工作流的23张表,这里采用XML创建:
需要在
activiti.cfg.xml的bean
processEngineConfiguration
创建数据库连接属性:
<property name="jdbcDriver" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/itcast0711?useUnicode=true&characterEncoding=utf8"/>
<property name="jdbcUsername" value="root"/>
<property name="jdbcPassword" value="123456"/>
建立好库连接之后,我们需要做最后一个设定,当数据库中的23张表不存在的时候我们需要创建,存在的时候就不能再创建了,这是我们需要做的是添加数据库更新属性:
<property name="databaseSchemaUpdate" value="true"></property>
这样我们的配置文件就写好了,因为
activiti.cfg.xml
自动识别,所以在程序运行的时候数据库表就会自动创建好。
三、画流程图:
(1)在src/main/resources下的diagrams包下右键添加新的Activiti D
iagram
(2)这时候有一张空的流程图画板,我们需要在上面添加对象,对象需要在右面选择上拖入到左边画板即可:
(3)在画流程图的时候还要设置节点的ID和name
此外还需要在Main config里面设置节点操作者是个人还是团体,Assignee是单人操作,第三个为用户组操作
(4)画好流程图后需要保存一下,就会生成一张png格式的图片:
四、流程图建好之后我们就需要部署流程了:
public void deploymentProcessDefinition(){
//与流程定义和部署对象相关的Service
Deployment deployment = processEngine.getRepositoryService()
//创建一个部署对象
.createDeployment()
//添加部署的名称
.name("helloworld入门程序")
//从classpath的资源中加载,一次只能加载一个文件
.addClasspathResource("diagrams/helloworld.bpmn")
//从classpath的资源中加载,一次只能加载一个文件
.addClasspathResource("diagrams/helloworld.png")
//完成部署
.deploy();
}
五、启动流程:
public void startProcessInstance(){
//获取流程第的key值,及流程图的ID
String processDefinitionKey = "helloworld";
//与正在执行的流程实例和执行对象相关的Service
ProcessInstance pi = processEngine.getRuntimeService()
//使用流程定义的key启动流程实例,key对应helloworld.bpmn文件中id的属性值,使用key值启动,默认是按照最新版本的流程定义启动
.startProcessInstanceByKey(processDefinitionKey);
System.out.println("流程实例ID:"+pi.getId());//流程实例ID 101
System.out.println("流程定义ID:"+pi.getProcessDefinitionId());//流程定义ID helloworld:1:4
}
六、最后完成任务查询:
public void findMyPersonalTask(){
String assignee ="王五";
List<Task> list = processEngine.getTaskService()
.createTaskQuery()
.taskAssignee(assignee)
.list();
if(list!=null && list.size()>0){
for(Task task:list){
System.out.println("任务ID:"+task.getId());
System.out.println("任务名称:"+task.getName());
System.out.println("任务的创建时间:"+task.getCreateTime());
System.out.println("任务的办理人:"+task.getAssignee());
System.out.println("流程实例ID:"+task.getProcessInstanceId());
System.out.println("执行对象ID:"+task.getExecutionId());
System.out.println("流程定义ID:"+task.getProcessDefinitionId());
System.out.println("########################################################");
}
}
}
总结:
工作流更多的是他的框架封装的特别好,对于开源的Activiti,我们可以很快的上手,这只是初级的demo,之后还会有更新,希望能够帮到大家!