Forzar la finalización de una actividad

A veces, las actividades de procesos de larga ejecución pueden encontrar errores. Si estos errores no son captados por el manejador de errores en el ámbito circundante y si la plantilla de la actividad asociada especifica que la actividad se detenga cuando se produzca un error, la actividad se pasará al estado de detenida para que se pueda reparar. En este estado, puede forzar la finalización de la actividad.

También puede forzar la finalización de actividades en estado de ejecución si, por ejemplo, una actividad no responde.

Existen requisitos adicionales para ciertos tipos de actividades.
Actividades de personal
Puede pasar parámetros a la llamada force-complete, como el mensaje que debería haberse enviado o el error que debería haberse producido.
Actividades de script
No puede pasar parámetros en la llamada force-complete. No obstante, debe establecer las variables que se han de reparar.
Invocar actividades
También puede forzar actividades de invocación completas que llaman a un servicio asíncrono que no sea un subproceso si estas actividades están en estado de ejecución. Puede que desee hacer esto, por ejemplo, si se llama al servicio asíncrono y éste no responde.
  1. Listar las actividades detenidas en estado detenido.
    QueryResultSet result =
         process.query("DISTINCT ACTIVITY.AIID",
                       "ACTIVITY.STATE = ACTIVITY.STATE.STATE_STOPPED AND
                        PROCESS_INSTANCE.NAME='CustomerOrder'",
                        null, null, null);

    Esta acción devuelve las actividades detenidas para la instancia de proceso CustomerOrder.

  2. Completar la actividad, por ejemplo, una actividad de personal detenida.

    En este ejemplo, se pasa un mensaje de salida.

    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();
         //establecer las partes del mensaje, por ejemplo, un número de pedido
         myMessage.setInt("OrderNo", 4711);
       }
    
       boolean continueOnError = true;
       process.forceComplete(aiid, output, continueOnError);
    }

    Esta acción completa la actividad. Si se produce un error, el parámetro continueOnError determina la acción que se realizará si se produce un error durante el proceso de la petición forceComplete.

    En el ejemplo, el valor de continueOnError es true. Este valor significa que si se produce un error durante el proceso de la petición forceComplete, la actividad se pasa a estado erróneo. El error se propaga a los ámbitos que circundan la actividad hasta que se maneja o hasta que se alcanza el ámbito del proceso. A continuación, el proceso se pone en estado de ejecución errónea hasta que finalmente pasa a estado erróneo.

Conceptos relacionados
Consultas sobre los objetos de procesos de empresa y relativos a tareas

Condiciones de uso |

Última actualización: Wed Apr 19 21:34:07 2006

(c) Copyright IBM Corporation 2005, 2006.
Este centro de información está basado en tecnología Eclipse (http://www.eclipse.org)