Comprobación de la excepción o del error no manejado que se ha producido para una instancia de proceso anómala.

En un proceso bien diseñado, generalmente las excepciones y los errores los maneja un manejador de errores. Si el proceso implementa una operación bidireccional, puede recuperar la información acerca de un error o de una excepción manejada a partir de la propiedad de nombre de error del objeto de la instancia de proceso. Para los errores, también puede recuperar el mensaje de error correspondiente utilizando la API getFaultMessage.

Acerca de esta tarea

Si falla una instancia de proceso debido a una excepción que no está manejada por ningún manejador de errores, puede recuperar la información acerca de la excepción no manejada desde el objeto de la instancia de proceso. Por el contrario, si un manejador de errores captura una excepción, entonces la información acerca del error no está disponible. No obstante, puede recuperar el nombre del error y el mensaje y devolverlo al emisor de la llamada utilizando una excepción FaultReplyException.

Procedimiento

  1. Lista las instancias de proceso que están en estado anómalo.
    QueryResultSet result = 
         process.query("PROCESS_INSTANCE.PIID", 
                       "PROCESS_INSTANCE.STATE = 
                           PROCESS_INSTANCE.STATE.STATE_FAILED", 
                        (String)null, (Integer)null, (TimeZone)null); 
    Esta acción devuelve un conjunto de resultados de consulta que contienen las instancias de proceso anómalas.
  2. Lea la información para la excepción no manejada.
    if (result.getEntities().size() > 0)
    {
      Entity entity = (Entity) result.getEntities().get(0);
      PIID piid = (PIID) entity.getAttributeValue("PIID");
      ProcessInstanceData pInstance = process.getProcessInstance(piid);
      
      ProcessException excp = pInstance.getUnhandledException();
      if ( excp instanceof RuntimeFaultException )
      {
       RuntimeFaultException xcp = (RuntimeFaultException)excp;
       Throwable cause = xcp.getRootCause();
      }
      else if ( excp instanceof StandardFaultException )
      {
       StandardFaultException xcp = (StandardFaultException)excp;
       String faultName = xcp.getFaultName();
      }
      else if ( excp instanceof ApplicationFaultException )
      {
       ApplicationFaultException xcp = (ApplicationFaultException)excp;
       String faultName = xcp.getFaultName();
      }     
    }

Resultados

Utilice esta información para buscar el nombre del error o la causa raíz del problema.