activiti實戰讀書筆記——第九章 多實例

一、配置多實例的活動在流程運行時運行時順序方式或並行放肆建立活動實例。 javascript

二、任務多實例 在任務中添加<multiInstanceLoopCharacteristics>元素來實現: java

<serviceTask id="servicetask1" name="Service Task" activiti:expression="${count+1}"         activiti:resultVariableName="count">
      <multiInstanceLoopCharacteristics isSequential="false">
        <loopCardinality>${loop}</loopCardinality>
      </multiInstanceLoopCharacteristics>
    </serviceTask>



對一個Java service任務添加了多實例配置,loop變量決定實例數量,每次執行任務count自增1。isSequential屬性爲false表示並行運行,不然順序運行。

三、請假會籤審批的用戶任務多實例配置 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>



多實例在遍歷users集合時把單個值保存在 activiti:elementVariable指定的user中。

此外添加了一個任務監聽器,每次審批經過將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);
		}
	}

}



四、開始事件的表單定義中有一個自定義的類型users:
<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);
	}

}



並將它配置到processEngineConfiguration中:
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

相關文章
相關標籤/搜索