일부 워크플로우는 단일 사용자에 의해서만 수행됩니다(예를 들어,
온라인 서점에서 책 주문). 이러한 유형의 워크플로우에는 병렬 경로가 없습니다.
completeAndClaimSuccessor API는 해당 유형의 워크플로우 처리를
지원합니다.
이 타스크의 수행 목적 및 시기
온라인 서점에서 구매자는 서적을 주문하기 위해 일련의 조치를 완료합니다.
이러한 일련의 조치는 일련의 스태프 활동으로 구현될 수 있습니다(참여
활동). 구매자가 몇 개의 책을 주문하려고 결정할 경우, 이는
다음 스태프 활동 청구와 동등합니다. 이러한 유형의 워크플로우는
사용자 인터페이스 정의가 사용자 인터페이스에서 대화 상자의 흐름을
제어하는 활동과 연관되므로 페이지 플로우라고도 합니다.
completeAndClaimSuccessor API는
스태프 활동을 완료하며 로그온한 사용자에 대한 동일한 프로세스 인스턴스의
다음 활동을 청구합니다. 작업할 입력 메시지를 포함하여
다음 청구 활동에 대한 정보가 리턴됩니다. 다음 활동은
완료된 활동의 동일한 트랜잭션에서 수행될 수 있으므로 프로세스 모델에서 트랜잭션 경계를
participates로 설정해야 합니다.
이 타스크의 단계
- 활동 순서에서 첫 번째 활동을 청구하십시오.
//
//Query the list of activities that can be claimed by the logged-on user
//
QueryResultSet result =
process.query("ACTIVITY.AIID",
"PROCESS_INSTANCE.NAME = 'CustomerOrder' AND
ACTIVITY.STATE = ACTIVITY.STATE.STATE_READY AND
ACTIVITY.KIND = ACTIVITY.KIND.KIND_STAFF AND
WORK_ITEM.REASON =
WORK_ITEM.REASON.REASON_POTENTIAL_OWNER",
(String)null, (Integer)null, (TimeZone)null);
...
//
//Claim the first activity
//
if (result.size() > 0)
{
result.first();
AIID aiid = (AIID) result.getOID(1);
ClientObjectWrapper input = process.claim(aiid);
DataObject activityInput = null ;
if ( input.getObject()!= null && input.getObject() instanceof DataObject )
{
activityInput = (DataObject)input.getObject();
// read the values
...
}
}
활동이 청구될 때 활동의 입력 메시지가 리턴됩니다.
- 활동의 작업이 완료되면 활동을 완료하고 다음 활동을 청구하십시오.
활동을 완료하려면 출력 메시지를 전달됩니다. 출력 메시지를 작성하는 경우
메시지 유형 이름을 지정하여 메시지 정의가 포함되도록 해야 합니다.
ActivityInstanceData activity = process.getActivityInstance(aiid);
ClientObjectWrapper output =
process.createMessage(aiid, activity.getOutputMessageTypeName());
DataObject myMessage = null ;
if ( output.getObject()!= null && output.getObject() instanceof DataObject )
{
myMessage = (DataObject)output.getObject();
//set the parts in your message, for example, an order number
myMessage.setInt("OrderNo", 4711);
}
//complete the activity and claim the next one
CompleteAndClaimSuccessorResult successor = process.completeAndClaimSuccessor(aiid, output);
이 조치는 항목 번호를 포함하는 출력 메시지를 설정하고 순서에 있는 다음 활동을 청구합니다. 후속 활동에 대해 AutoClaim을
설정한 경우, 다음 활동으로 임의 활동이 리턴됩니다. 이 사용자에게 지정할 수 있는 후속 활동이 없으면 Null이
리턴됩니다. 후속 활동으로 AutoClaim을 설정하고
추적할 수 있는 여러 경로가 있으면 모든 후속 활동이 청구되며
다음 활동으로 임의 활동이 리턴됩니다.
프로세스에 추적할 수 있는 병렬 경로가 있고
로그온 사용자가 둘 이상의 활동에 대한 잠재적 소유자인
스태프 활동이 해당 경로에 포함되어 있는 경우에는
임의 활동이 자동으로 청구되고 다음 활동으로 임의 활동이
리턴됩니다.
- 다음 활동을 작업하십시오.
String name = successor.getActivityName();
ClientObjectWrapper nextInput = successor.getInputMessage();
if ( nextInput.getObject()!= null && nextInput.getObject() instanceof DataObject )
{
activityInput = (DataObject)input.getObject();
// read the values
...
}
- 2단계를 계속하여 활동을 완료하십시오.