一、配置多實例的活動在流程運行時運行時順序方式或並行放肆建立活動實例。 javascript
二、任務多實例 在任務中添加<multiInstanceLoopCharacteristics>元素來實現: java
<serviceTask id="servicetask1" name="Service Task" activiti:expression="${count+1}" activiti:resultVariableName="count"> <multiInstanceLoopCharacteristics isSequential="false"> <loopCardinality>${loop}</loopCardinality> </multiInstanceLoopCharacteristics> </serviceTask>
三、請假會籤審批的用戶任務多實例配置 express
<userTask id="countersign" name="部門/人事會籤審批" activiti:candidateGroups="${user}"> <extensionElements> <activiti:formProperty id="approved" name="審批意見" type="enum"> <activiti:value id="true" name="贊成"></activiti:value> <activiti:value id="false" name="拒絕"></activiti:value> </activiti:formProperty> <activiti:taskListener event="complete" delegateExpression="${leaveCounterSignCompleteListener}"/> </extensionElements> <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="users" activiti:elementVariable="user"/> </userTask>
此外添加了一個任務監聽器,每次審批經過將approvedCounter屬性自增1: app
public class LeaveCounterSignCompleteListenter implements TaskListener { @Override public void notify(DelegateTask delegateTask) { String approved = (String)delegateTask.getVariable("approved"); if(approved.equals("true")){ Long agreeCounter = (Long)delegateTask.getVariable("approvedCounter"); delegateTask.setVariable("approvedCounter", agreeCounter + 1); } } }
<startEvent id="startevent1" name="Start" activiti:initiator="applyUserId"> <extensionElements> <activiti:formProperty id="startDate" name="請假開始日期" type="date" datePattern="yyyy-MM-dd" required="true"></activiti:formProperty> <activiti:formProperty id="endDate" name="請假結束日期" type="date" datePattern="yyyy-MM-dd" required="true"></activiti:formProperty> <activiti:formProperty id="reason" name="請假緣由" type="string" required="true"></activiti:formProperty> <activiti:formProperty id="users" name="審批參與人" type="users"></activiti:formProperty> <activiti:formProperty id="validScript" type="javascript" default="alert('表單加載完畢');"></activiti:formProperty> </extensionElements> </startEvent>
public class UsersFormType extends AbstractFormType { @Override public String getName() { return "users"; } @Override public Object convertFormValueToModelValue(String propertyValue) { String[] values = StringUtils.split(propertyValue, ","); return Arrays.asList(values); } @Override public String convertModelValueToFormValue(Object modelValue) { return Objects.toString(modelValue); } }
List<AbstractFormType> customFormTypes = new ArrayList<AbstractFormType>(); customFormTypes.add(new JavaScriptFormType()); customFormTypes.add(new UsersFormType()); processEngineConfiguration.setCustomFormTypes(customFormTypes);
五、審批意見 ide
在taskService接口中定義了3個和意見相關的方法: oop
addComment(String taskId, String processInstanceId, String message); ui
getProcessInstanceComments(String processInstanceId); code
getTaskAttachments(String taskId) orm
第一方法建立意見,第二個和第三個方法分別根據流程實例ID和任務ID讀取相關意見。 xml