activiti实例,要求每段代码都有解释,包含完整的流程,提交,同意,驳回,完成
时间: 2023-07-29 19:11:14 浏览: 42
Activiti是一个广泛使用的开源工作流引擎,可以帮助开发人员在应用程序中实现流程管理和业务流程自动化。下面是Activiti实例中的代码和解释,包括完整的流程,提交,同意,驳回,完成:
1.创建Activiti流程引擎和数据库连接
```java
ProcessEngine processEngine = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration()
.setJdbcDriver("com.mysql.jdbc.Driver")
.setJdbcUrl("jdbc:mysql://localhost:3306/activitiDB?useUnicode=true&characterEncoding=utf-8")
.setJdbcUsername("root")
.setJdbcPassword("root")
.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE)
.buildProcessEngine();
```
此代码创建了一个Activiti流程引擎,同时配置了数据库连接信息。
2.定义流程模型和流程图
```java
BpmnModel model = new BpmnModel();
Process process = new Process();
model.addProcess(process);
process.setId("myProcess");
// 添加开始事件
StartEvent startEvent = new StartEvent();
startEvent.setId("startEvent");
process.addFlowElement(startEvent);
// 添加用户任务
UserTask userTask = new UserTask();
userTask.setId("userTask");
userTask.setName("Approve");
process.addFlowElement(userTask);
// 添加结束事件
EndEvent endEvent = new EndEvent();
endEvent.setId("endEvent");
process.addFlowElement(endEvent);
// 添加连线
process.addFlowElement(new SequenceFlow("startEvent", "userTask"));
process.addFlowElement(new SequenceFlow("userTask", "endEvent"));
// 将流程图写入文件
BpmnXMLConverter converter = new BpmnXMLConverter();
byte[] bpmnBytes = converter.convertToXML(model);
String processName = "myProcess.bpmn20.xml";
FileOutputStream fos = new FileOutputStream(processName);
fos.write(bpmnBytes);
fos.close();
```
此代码定义了一个简单的流程模型,包括开始事件、用户任务和结束事件,并将流程图写入文件中。
3.部署流程定义
```java
RepositoryService repositoryService = processEngine.getRepositoryService();
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource("myProcess.bpmn20.xml")
.deploy();
```
此代码部署了流程定义,将流程图部署到Activiti流程引擎中。
4.启动流程实例
```java
RuntimeService runtimeService = processEngine.getRuntimeService();
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess");
```
此代码启动了一个新的流程实例,并将流程实例与流程定义关联起来。
5.提交任务
```java
TaskService taskService = processEngine.getTaskService();
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
taskService.complete(task.getId());
```
此代码提交了任务,将任务标记为完成,并将流程实例移动到下一个任务。
6.同意任务
```java
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
taskService.setVariable(task.getId(), "approved", true);
taskService.complete(task.getId());
```
此代码同意了任务,并将“approved”变量设置为true,表示任务已经被批准。
7.驳回任务
```java
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
taskService.setVariable(task.getId(), "approved", false);
taskService.complete(task.getId());
```
此代码驳回了任务,并将“approved”变量设置为false,表示任务已经被拒绝。
8.完成流程实例
```java
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
taskService.complete(task.getId());
```
此代码完成了流程实例,并将流程实例标记为已完成。