activiti 실전 독서노트-제9장 다실례

1. 다중 실례를 설정한 활동이 프로세스가 실행될 때 순서 방식이나 병행 방자하게 활동 실례를 만든다.
2. 임무의 여러 사례는 임무에 요소를 추가하여 실현한다.
<serviceTask id="servicetask1" name="Service Task" activiti:expression="${count+1}"         activiti:resultVariableName="count">
      <multiInstanceLoopCharacteristics isSequential="false">
        <loopCardinality>${loop}</loopCardinality>
      </multiInstanceLoopCharacteristics>
    </serviceTask>

자바 서비스 작업에 여러 개의 실례 설정을 추가했습니다. loop 변수는 실례 수량을 결정하고, 매번 임무를 수행할 때마다count가 1씩 증가합니다.isSequential 속성은 false로 병렬 실행을 나타냅니다. 그렇지 않으면 순서대로 실행됩니다.
3. 휴가를 신청하면 심사 비준을 받는 사용자 임무의 다중 실례 설정
<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에 저장합니다.
또한 Approved Counter 속성을 1씩 증가시키는 승인 통과 시 작업 모니터가 추가되었습니다.
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);
		}
	}

}

4. 이벤트를 시작하는 양식 정의에 사용자 정의 유형 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);

5. 심사 비준 의견
taskService 인터페이스에는 다음과 같은 3가지 의견 관련 방법이 정의되어 있습니다.
addComment(String taskId, String processInstanceId, String message);
getProcessInstanceComments(String processInstanceId);
getTaskAttachments(String taskId)
첫 번째 방법은 의견을 만들고 두 번째 방법과 세 번째 방법은 각각 프로세스 실례 ID와 작업 ID에 따라 관련 의견을 읽는다.

좋은 웹페이지 즐겨찾기