真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯網站制作重慶分公司

如何在SpringBoot中使用Activiti-創(chuàng)新互聯

本篇文章給大家分享的是有關如何在Spring Boot中使用Activiti,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

專業(yè)領域包括成都網站建設、成都做網站、購物商城網站建設、微信營銷、系統平臺開發(fā), 與其他網站設計及系統開發(fā)公司不同,創(chuàng)新互聯的整合解決方案結合了幫做網絡品牌建設經驗和互聯網整合營銷的理念,并將策略和執(zhí)行緊密結合,為客戶提供全網互聯網整合方案。

VacationRequest.bpmn20.xml將start事件定義為:


 
  
  
  
  
 

分配給用戶組“management”的第一個用戶任務userTask將如下所示:


 ${employeeName} 請假 ${numberOfDays} 天
  (Motivation: ${reason}).
 
 
  
  
  
  
  
   
 
 
  
   management
  
 

使用ServiceTask,我們需要定義要執(zhí)行的代碼段。我們將SendEmailServiceTask.java類作為這段代碼執(zhí)行者。


 
  
   
 

SendEmailServiceTask的代碼如下:實現JavaDelegate接口,實現其execute方法:

public class SendEmailServiceTask implements JavaDelegate {

 public void execute(DelegateExecution execution) {
  //logic to sent email confirmation
 }

}

通過在“sequenceFlow”中添加“conditionExpression”標記來決定發(fā)送郵件在什么條件下觸發(fā),也就是定義一個條件流:


 
  
   
 
 
  

這里,vacationApproved是上面的UserTask的formProperty。

部署流程

為了使我們的流程被Activiti Engine所知,我們需要部署該流程。我們可以使用RepositoryService以編程方式執(zhí)行此操作。讓我們編寫一個JUnit測試來看看:

@Test
public void givenBPMN_whenDeployProcess_thenDeployed() {
 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
 RepositoryService repositoryService = processEngine.getRepositoryService();
 repositoryService.createDeployment()
  .addClasspathResource("org/activiti/test/vacationRequest.bpmn20.xml")
  .deploy();
 Long count = repositoryService.createProcessDefinitionQuery().count();
 assertTrue(count >= 1);
}

部署意味著引擎將解析BPMN流程定義文件并將其轉換為可執(zhí)行文件。此外,還會將記錄添加到每個部署的Repository表中。之后,我們可以查詢Repository服務從而獲取已部署的進程:也就是ProcessDefinitions。

啟動流程實例ProcessInstance

在將ProcessDefinition部署到Activiti Engine之后,我們可以通過創(chuàng)建ProcessInstances來執(zhí)行該流程定義。如果說ProcessDefinition繪制的是一幅藍圖,那么processInstance就是它的執(zhí)行實現。

對于一個ProcessDefinition,可以有多個ProcessInstances。

可以通過RuntimeService訪問與ProcessInstances相關的所有詳細信息。

在我們的示例中,在開始事件中,我們需要傳遞休假天數、開始日期和原因。我們將使用流程變量,并在創(chuàng)建ProcessInstance時傳遞它們。

編寫一個JUnit測試用例實現上面想法:

@Test
public void givenDeployedProcess_whenStartProcessInstance_thenRunning() {
 //deploy the process definition 
 Map variables = new HashMap >();
 variables.put("employeeName", "John");
 variables.put("numberOfDays", 4);
 variables.put("vacationMotivation", "I need a break!");

 RuntimeService runtimeService = processEngine.getRuntimeService();
 ProcessInstance processInstance = runtimeService
   .startProcessInstanceByKey("vacationRequest", variables);
 Long count=runtimeService.createProcessInstanceQuery().count();

 assertEquals("1", count.toString());
}

某個流程定義的多個實例將因流程變量而異,也就是說,同一份流程定義,因為變量不同,導致流程實例也會不同。

有多種方法啟動流程實例,在這里,我們正在使用該流程的key:vacationRequest啟動流程,啟動流程實例后,我們可以通過查詢RuntimeService來獲取有關它的信息。

完成任務

當我們的流程實例開始運行時,第一步執(zhí)行的是用戶任務userTask,分配任務給用戶組“management”的用戶。該用戶可能有一個收件箱,其中包含要由他們完成的任務列表。現在,如果我們想繼續(xù)執(zhí)行流程,則需要用戶完成此任務。對于Activiti Engine,它被稱為“完成任務”。

我們可以查詢TaskService,獲取任務對象,然后完成它。

@Test
public void givenProcessInstance_whenCompleteTask_thenGotNextTask() {
 // 部署流程并開始一個流程實例 
 TaskService taskService = processEngine.getTaskService();
 List tasks = taskService.createTaskQuery()
   .taskCandidateGroup("management").list();
 Task task = tasks.get(0);

 Map taskVariables = new HashMap<>();
 taskVariables.put("vacationApproved", "false");
 taskVariables.put("comments", "We have a tight deadline!");
 taskService.complete(task.getId(), taskVariables);

 Task currentTask = taskService.createTaskQuery()
   .taskName("修改休假請求").singleResult();
 assertNotNull(currentTask);
}

請注意,TaskService的complete()方法也接受所需的流程變量。我們傳遞了經理的回復。

在此之后,流程引擎將繼續(xù)下一步。在這里,下一步詢問員工是否要重新發(fā)送休假請求。

因此,我們的ProcessInstance正在等待此UserTask,其名稱為“修改休假請求”。

暫停和激活流程

我們可以暫停ProcessDefinition和ProcessInstance。如果我們暫停一個流程定義ProcessDefinition,則在它暫停掛起時我們就無法創(chuàng)建它的實例。我們可以使用RepositoryService來做到這一點:

@Test(expected = ActivitiException.class)
public void givenDeployedProcess_whenSuspend_thenNoProcessInstance() {
 // deploy the process definition
 repositoryService.suspendProcessDefinitionByKey("vacationRequest");
 runtimeService.startProcessInstanceByKey("vacationRequest");
}
springboot是什么

springboot一種全新的編程規(guī)范,其設計目的是用來簡化新Spring應用的初始搭建以及開發(fā)過程,SpringBoot也是一個服務于框架的框架,服務范圍是簡化配置文件。

以上就是如何在Spring Boot中使用Activiti,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創(chuàng)新互聯行業(yè)資訊頻道。


網站欄目:如何在SpringBoot中使用Activiti-創(chuàng)新互聯
網站URL:http://weahome.cn/article/gsesd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部