활동 강제 완료

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

장기 실행 프로세스의 활동에 때때로 결함이 발생할 수 있습니다. 결함 핸들러가 엔클로징 범위에서 이러한 결함을 발견하지 못했으며 연관된 활동 템플리트가 오류 발생 시 활동이 중지되도록 지정할 경우, 활동이 중지 상태로 되어 복구될 수 있도록 합니다. 이 상태에서 활동을 강제로 완료할 수 있습니다.

또한 예를 들어 활동이 응답하지 않는 경우 실행 상태의 활동을 강제로 완료할 수도 있습니다.

특정 활동 유형에 대한 추가 요구사항이 존재합니다.
staff 활동
force-complete 호출에서 전송되었어야 하는 메시지 또는 발생했어야 하는 결함과 같은 매개변수를 전달할 수 있습니다.
script 활동
force-complete 호출에서 매개변수를 전달할 수 없습니다. 그러나 복구해야 할 변수를 설정해야 합니다.
invoke 활동
활동이 실행 상태인 경우 서브프로세스가 아닌 비동기 서비스를 호출하는 invoke 활동을 강제로 완료할 수도 있습니다. 비동기 서비스가 호출되고 응답되지 않는 경우 다음을 수행할 수 있습니다.

이 타스크의 단계

  1. 중지 상태에 있는 중지된 활동을 나열하십시오.
    QueryResultSet result = 
         process.query("DISTINCT ACTIVITY.AIID",
                       "ACTIVITY.STATE = ACTIVITY.STATE.STATE_STOPPED AND 
                        PROCESS_INSTANCE.NAME='CustomerOrder'",
                        (String)null, (Integer)null, (TimeZone)null);

    이 조치는 CustomerOrder 프로세스 인스턴스에 대한 중지된 활동을 리턴합니다.

  2. 활동(예를 들어 중지된 staff 활동)을 완료하십시오.

    이 예에서는 출력 메시지가 전달됩니다.

    if (result.size() > 0)
    {
      	result.first();
    	  AIID aiid = (AIID) result.getOID(1);
    	  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);
       }
    
       boolean continueOnError = true;
       process.forceComplete(aiid, output, continueOnError);
    }

    이 조치를 실행하여 활동을 완료합니다. 오류가 발생하면 continueOnError 매개변수는 forceComplete 요청에서 발생한 결함에 대해 수행할 조치를 판별합니다.

    이 예에서 continueOnError는 true입니다. 즉, 결함이 있는 경우 활동은 실패 상태가 됩니다. 이 결함은 처리되거나 프로세스 범위에 도달할 때까지 활동의 엔클로징 범위로 전달됩니다. 프로세스는 실패 중 상태가 되고 결국 실패됨 상태가 됩니다.

관련 개념
비즈니스 프로세스 및 타스크 관련 오브젝트에 대한 조회

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