단일 사용자 워크플로우 처리

일부 워크플로우는 단일 사용자에 의해서만 수행됩니다(예를 들어, 온라인 서점에서 책 주문). 이러한 유형의 워크플로우에는 병렬 경로가 없습니다. completeAndClaimSuccessor API는 해당 유형의 워크플로우 처리를 지원합니다.

이 타스크의 수행 목적 및 시기

온라인 서점에서 구매자는 서적을 주문하기 위해 일련의 조치를 완료합니다. 이러한 일련의 조치는 일련의 스태프 활동으로 구현될 수 있습니다(참여 활동). 구매자가 몇 개의 책을 주문하려고 결정할 경우, 이는 다음 스태프 활동 청구와 동등합니다. 이러한 유형의 워크플로우는 사용자 인터페이스 정의가 사용자 인터페이스에서 대화 상자의 흐름을 제어하는 활동과 연관되므로 페이지 플로우라고도 합니다.

completeAndClaimSuccessor API는 스태프 활동을 완료하며 로그온한 사용자에 대한 동일한 프로세스 인스턴스의 다음 활동을 청구합니다. 작업할 입력 메시지를 포함하여 다음 청구 활동에 대한 정보가 리턴됩니다. 다음 활동은 완료된 활동의 동일한 트랜잭션에서 수행될 수 있으므로 프로세스 모델에서 트랜잭션 경계를 participates로 설정해야 합니다.

이 타스크의 단계

  1. 활동 순서에서 첫 번째 활동을 청구하십시오.
    //
    //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
        ...
      }  
    }
    활동이 청구될 때 활동의 입력 메시지가 리턴됩니다.
  2. 활동의 작업이 완료되면 활동을 완료하고 다음 활동을 청구하십시오.

    활동을 완료하려면 출력 메시지를 전달됩니다. 출력 메시지를 작성하는 경우 메시지 유형 이름을 지정하여 메시지 정의가 포함되도록 해야 합니다.

    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을 설정하고 추적할 수 있는 여러 경로가 있으면 모든 후속 활동이 청구되며 다음 활동으로 임의 활동이 리턴됩니다.

    프로세스에 추적할 수 있는 병렬 경로가 있고 로그온 사용자가 둘 이상의 활동에 대한 잠재적 소유자인 스태프 활동이 해당 경로에 포함되어 있는 경우에는 임의 활동이 자동으로 청구되고 다음 활동으로 임의 활동이 리턴됩니다.

  3. 다음 활동을 작업하십시오.
    String name = successor.getActivityName();
    
    ClientObjectWrapper nextInput = successor.getInputMessage();
    if ( nextInput.getObject()!= null && nextInput.getObject() instanceof DataObject )
    {
      activityInput = (DataObject)input.getObject();
      // read the values
      ...
    }  
  4. 2단계를 계속하여 활동을 완료하십시오.

ⓒ Copyright IBM Corporation 2005, 2006.
이 Information Center는 Eclipse 기술을 기반으로 합니다. (http://www.eclipse.org)