Forzatura del completamento di un'attività

Perché e quando effettuare questa attività

Le attività nei processi di lunga esecuzione possono talvolta rilevare degli errori. Se tali errori non sono rilevati da un gestore errori nell'ambito associato e la relativa maschera di attività specifica che l'attività termina quando si verifica un errore, l'attività viene posizionata in stato di arresto, in modo che possa essere riparata. In questo stato, è possibile forzare il completamento dell'attività.

Inoltre, è possibile forzare il completamento delle attività in stato di esecuzione, se ad esempio un'attività non risponde.

Esistono ulteriori requisiti per alcuni tipi di attività.
Attività staff
È possibile inoltrare i parametri alla chiamata che forza il completamento, come ad esempio il messaggio che avrebbe dovuto essere inviato o l'errore che avrebbe dovuto essere rilevato.
Attività script
Non è possibile inoltrare parametri nel richiamo forza completamento. Tuttavia, è necessario impostare le variabili che devono essere ripristinate.
Attività invoke
Inoltre, è possibile forzare il completamento delle attività invoke che richiamano un servizio asincrono che non è un processo secondario se tali attività si trovano in stato di esecuzione. Potrebbe essere necessario effettuare tale operazione, ad esempio, se il servizio asincrono viene richiamato e non risponde.

Procedura di questa attività

  1. Elencare le attività arrestate in stato terminato.
    QueryResultSet result = 
         process.query("DISTINCT ACTIVITY.AIID",
                       "ACTIVITY.STATE = ACTIVITY.STATE.STATE_STOPPED AND 
                        PROCESS_INSTANCE.NAME='CustomerOrder'",
                        (String)null, (Integer)null, (TimeZone)null);

    Questa operazione restituisce le attività arrestate per l'istanza del processo CustomerOrder.

  2. Completare l'attività, ad esempio, un'attività di staff arrestata.

    In questo esempio, viene inoltrato un messaggio di output.

    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();
         //impostare le parti nel messaggio, ad esempio, un numero di ordine
         myMessage.setInt("OrderNo", 4711);
       }
    
       boolean continueOnError = true;
       process.forceComplete(aiid, output, continueOnError);
    }

    Questa operazione completa l'attività. Se si verifica un errore, il parametro continueOnError determina l'azione da eseguire se un errore viene restituito insieme alla richiesta forceComplete.

    Nell'esempio, continueOnError è true. Questo valore indica che se si verifica un errore durante, l'attività deve essere collocata in stato non riuscito. L'errore viene propagato agli ambiti associati dell'attività fino a quando non viene gestito o non si raggiunge l'ambito del processo. In seguito, il processo viene messo in stato di errore e, infine, raggiunge lo stato di errore.

Concetti correlati
Query sugli oggetti del processo aziendale e relativi alle attività

(c) Copyright IBM Corporation 2005, 2006.
This information center is powered by Eclipse technology (http://www.eclipse.org)