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

相关文章
相关标签/搜索