1.工作流activiti怎么实现会签
2.java activiti
3.activitiç¬è®°
工作流activiti怎么实现会签
在Activiti工作流系统中,源码实现会签功能可以通过配置多实例用户任务来完成。变量以下是源码实现会签的步骤和XML配置的改写润色:
1. 多实例用户任务的XML配置:
```xml
<userTask id="multiInstanceTask"
name="多实例会签任务"
multiInstanceLoopCharacteristics="${ nrOfCompletedInstances/nrOfInstances>=0.6}"
assigneeList="${ assignee}"/>
```
在此配置中,`nrOfInstances`代表任务的变量产品查询 计算源码总实例数,`nrOfActiveInstances`表示当前激活的源码实例数,`nrOfCompletedInstances`表示已完成的变量oto网站源码下载实例数。`multiInstanceLoopCharacteristics`定义了任务的源码多实例特性,包括是变量否顺序执行(isSequential)。`loopDataInputRef`指定了流程变量的源码引用,该变量是变量一个列表,可以在流程启动时或任务执行前放入引擎中,源码每个列表元素将创建一个任务。变量
2. 指定用户任务的源码宝马互娱源码代理人:
```xml
<serviceTask id="setAssignee"
name="设置代理人"
implementation="${ setAssigneeImpl}"/>
```
这里通过`serviceTask`来指定每个任务的代理人。在Java代码中,变量`setAssigneeImpl`将是源码实现设置代理人的方法。
3. 结合以上两步,各种有趣的源码实现会签的用户任务配置:
```xml
<userTask id="multiInstanceSignoff"
name="会签任务"
multiInstanceLoopCharacteristics="${ nrOfCompletedInstances/nrOfInstances>=0.6}"
assigneeList="${ assignee}"
completionCondition="${ nrOfCompletedInstances/nrOfInstances>=0.6}"/>
```
在完整的XML配置中,通过表达式`${ assignee}`来动态指定每个会签任务的代理人。`completionCondition`定义了会签任务完成的宝宝奶粉溯源码条件,即当完成的实例数达到总实例数的%时,任务视为完成。
通过以上配置,可以实现Activiti中的会签功能,其中每个任务都会分配给特定的代理人,直到所有代理人都完成了他们的任务,会签才能完成。
java activiti
java activitiæ¯ä»ä¹ï¼è®©æ们ä¸èµ·äºè§£ä¸ä¸ï¼
Activiti项ç®æ¯ä¸é¡¹æ°çåºäºApache许å¯çå¼æºBPMå¹³å°ï¼è¦çäºä¸å¡æµç¨ç®¡çãå·¥ä½æµãæå¡åä½çé¢åçä¸ä¸ªå¼æºçãçµæ´»çãææ©å±çå¯æ§è¡æµç¨è¯è¨æ¡æ¶ï¼ç¹è²æ¯æä¾äºeclipseæ件ï¼å¼å人åå¯ä»¥éè¿æ件ç´æ¥ç»ç»åºä¸å¡ã
Activitiæ§è¡çåææ¯ææ¯ä»ä¹ï¼
1ãé¦å æ们è¦ç¥éProcessEngine对象ï¼æ¯Activitiå·¥ä½çæ ¸å¿ãè´è´£çææµç¨è¿è¡æ¶çåç§å®ä¾åæ°æ®ãçæ§å管çæµç¨çè¿è¡ã
2ãç¶åæ¯Activitiæ°æ®åºæ¯æï¼
Activitiçåå°æ¯ææ°æ®åºçæ¯æï¼ææç表é½ä»¥ACT_å¼å¤´ã 第äºé¨åæ¯è¡¨ç¤ºè¡¨çç¨éç两个åæ¯æ è¯ã ç¨éä¹åæå¡çAPI对åºã
ACT_RE_*: 'RE'表示repositoryã è¿ä¸ªåç¼ç表å å«äºæµç¨å®ä¹åæµç¨éæèµæº ï¼å¾çï¼è§åï¼ççï¼ã
ACT_RU_*: 'RU'表示runtimeã è¿äºè¿è¡æ¶ç表ï¼å å«æµç¨å®ä¾ï¼ä»»å¡ï¼åéï¼å¼æ¥ä»»å¡ï¼çè¿è¡ä¸çæ°æ®ã Activitiåªå¨æµç¨å®ä¾æ§è¡è¿ç¨ä¸ä¿åè¿äºæ°æ®ï¼ å¨æµç¨ç»ææ¶å°±ä¼å é¤è¿äºè®°å½ã è¿æ ·è¿è¡æ¶è¡¨å¯ä»¥ä¸ç´å¾å°é度å¾å¿«ã
ACT_ID_*: 'ID'表示identityã è¿äºè¡¨å å«èº«ä»½ä¿¡æ¯ï¼æ¯å¦ç¨æ·ï¼ç»ççã
ACT_HI_*: 'HI'表示historyã è¿äºè¡¨å å«åå²æ°æ®ï¼æ¯å¦åå²æµç¨å®ä¾ï¼ åéï¼ä»»å¡ççã
ACT_GE_*: éç¨æ°æ®ï¼ ç¨äºä¸ååºæ¯ä¸ï¼å¦åæ¾èµæºæ件ã
é£ä¹javaä¸å¦ä½æ§è¡activitiï¼
说æï¼èªå®ä¹ä¸ä¸ªç®åæµç¨ï¼ç¶åå¨mainä¸ç´æ¥éè¿æ§å¶å°è¾å ¥ä¿¡æ¯ç¶åæ§å¶æµç¨ã
1ãå建ä¸ä¸ªmavené¡¹ç® å¼å ¥ä¾èµï¼pom.xml 4.0.0 org.springframework.boot spring-boot-starter-parent 1.5..RELEASE com.jy.activiti activiti6-helloworld 1.0-SNAPSHOT org.springframework.boot spring-boot-starter org.activiti activiti-engine 6.0.0 junit junit 4. test ch.qos.logback logback-classic 1.1. com.google.guava guava .0 com.h2database h2 1.3. org.springframework.boot spring-boot-maven-plugin
activitiç¬è®°
å½åçæ¬ä¸ºactiviti6.0ï¼ä¸ä¹åçæ¬åºå«
assigneeï¼ä»»å¡æ§è¡äººï¼è®¾ç½®ç³»ç»ä¸çâç»å½åâï¼loginNameï¼ã
candidateUsersï¼ä»»å¡æ§è¡äººï¼å¯ä»¥å¡«åå¤ä¸ªã
candidateGroupsï¼ä»»å¡æ§è¡ç»ï¼å¯ä»¥å¡«åå¤ä¸ªï¼è®¾ç½®ç³»ç»ä¸çâè§è²è±æåï¼ennameï¼âã
assigneeåcandidateUsersçåºå«æ¯ï¼assigneeä¸éè¦ç¾æ¶ä»»å¡ï¼ç´æ¥å¯æ§è¡ä»»å¡ï¼candidateUsers为ç«äºæ¹å¼åé ä»»å¡ï¼è¢«æå®äººå¾ åä¸é½æä¸æ¡ä»»å¡ï¼è°å ç¾æ¶è°å°±è·å¾ä»»å¡çæ§è¡æã
taskService.setAssignee(String taskId, String userId);
taskService.claim(String taskId, String userId);
taskService.setOwner(String taskId, String userId);
å ³äºä¸é¢ä¸ä¸ªæ¹æ³çåºå«ï¼
setAssigneeåclaim两个çåºå«æ¯å¨è®¤é¢ä»»å¡æ¶ï¼claimä¼æ£æ¥è¯¥ä»»å¡æ¯å¦å·²ç»è¢«è®¤é¢ï¼å¦æ被认é¢åä¼æåºActivitiTaskAlreadyClaimedException èsetAssigneeä¸ä¼è¿è¡è¿æ ·çæ£æ¥ãå ¶ä»æ¹é¢ä¸¤ä¸ªæ¹æ³ææä¸è´ã
setOwneråsetAssigneeçåºå«å¨äº
setOwnerå®å¨ä»£çä»»å¡æ¶ä½¿ç¨ï¼ä»£è¡¨çä»»å¡çå½å±è ï¼èè¿æ¶ï¼setAssignee代表çæ¶ä»£çåçè ï¼
举个ä¾åæ¥è¯´ï¼å ¬å¸æ»ç»çç°å¨æ个任å¡taskAï¼å»æ ¸å®ä¸ä¸æ¬å¹´åº¦çè´¢å¡æ¥è¡¨ï¼ä»ç°å¨åå¾å¿æ²¡æ¶é´ï¼äºæ¯å°è¯¥ä»»å¡å§æç»å ¶å©çè¿è¡åçï¼æ¤æ¶ï¼å°±åºè¯¥è¿ä¹åï¼
taskService.setOwner(taskA.getId(), æ»ç»ç.getId());
taskService.setAssignee/claim(taskA.getId(), å©ç.getId());
act_hi_taskinst表两个å段ï¼
DELEGATION_åOWENER_
DELEGATION_å¼åå为PENDINGï¼è¡¨ç¤ºæ¤ä»»å¡ä¸ºæ£å¨æ§è¡çå§æä»»å¡ï¼
DELEGATION_å¼åå为 RESOLVEDï¼è¡¨ç¤ºæ¤ä»»å¡ä¸ºè¢«è§£å³çå§æä»»å¡ï¼
æ以任å¡å¨è¢«å§æ人æ§è¡æ¶å¿ é¡»
taskService.resolveTask(task.getId(),taskVariables);//解å³å§æ
taskService.complete(task.getId(), taskVariables);//å®æä»»å¡
å¦å容ææ¥éA delegated task cannot be completed, but should be resolved instead.
OWENR_å段设置ç¨äºæ¥è¯¢å§ä»»äººçå§æä»»å¡
å¨æ§è¡taskService.addCommentåï¼éè¦è®¾ç½®æ¹æ³¨çæå±äººAuthentication.setAuthenticatedUserId(userId);
å¨æµç¨å¯å¨å®ä¾ä¹åï¼è®¾ç½®å¯å¨è identityService.setAuthenticatedUserId(userId);
ç¶åæµç¨è®¾è®¡æ¨¡åå¯å¨æµç¨å¼å§èç¹è®¾ç½®åéï¼ä»¥ä¾ä¹åçç¯è使ç¨
级èå é¤ä¼ææµç¨å®ä¾æµç¨åå²å ¨é¨ç©çæ¸ ç©ºã
é级èå é¤ï¼å¿ é¡»ä¿è¯æ²¡ææµç¨å®ä¾
äºè è½ç¶é½è½æ¥è¯¢å°ä»»å¡å®ä¾ãä½æ¯åè åªè½æ¥è¯¢åå²ç¯èï¼å°±ç®act_hi_taskinstææ°æ®æªå®æå½åç¯èä¹ä¸è½æ¥åº