Alcuni flussi di lavoro vengono eseguiti da una sola persona, ad esempio, ordinare
libri da una libreria in linea. Questo tipo di flusso di lavoro non dispone di percorsi paralleli.
L'API completeAndClaimSuccessor supporta l'elaborazione di questo tipo di
flusso di lavoro.
Perché e quando effettuare questa attività
In una libreria in linea, l'acquirente completa una sequenza di azioni per ordinare un libro. Questa sequenza di azioni può essere implementata come serie di attività staff
(attività participanti). Se l'acquirente decide di ordinare più libri, questa operazione
equivale a richiedere l'attività staff successiva.
Questo tipo di flusso di lavoro è
anche noto come flusso pagina poiché le definizioni dell'interfaccia utente vengono
associate alle attività per controllare il flusso delle finestre di dialogo nell'interfaccia
utente.
L'API completeAndClaimSuccessor
completa un'attività staff e richiede quella successiva nella stessa istanza di processo
per la persona collegata. Restituisce le informazioni sull'attività successiva richiesta,
incluso il messaggio di input su cui lavorare. Poiché l'attività successiva è resa disponibile nella stessa trandazione dell'attività completata, i limiti transazionali devono essere impostati nel modello di processo su participates.
Procedura di questa attività
- Richiedere la prima attività nella sequenza delle attività.
//
//Eseguire la query dell'elenco delle attività che è possibile
//richiedere dall'utente collegato
//
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);
...
//
//Richiedere la prima attività
//
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();
// leggere i valori
...
}
}
Una volta richiesta l'attività, viene restituito il messaggio di input dell'attività stessa.
- Una volta terminato il lavoro sull'attività, completare l'attività e richiedere
l'attività successiva.
Per completare l'attività, viene inoltrato
un messaggio di output. Durante la creazione del messaggio di output, è necessario specificare il
nome del tipo di messaggio in modo che contenga la definizione del messaggio.
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);
}
//completare l'attività e richiedere quella successiva
CompleteAndClaimSuccessorResult successor = process.completeAndClaimSuccessor(aiid, output);
Questa sezione imposta un messaggio di output che contiene il numero dell'elemento
e richiede l'attività successiva nella sequenza. Se AutoClaim viene impostato per l'attività successore, come attività successiva viene restituita un'attività casuale.
Se non vi sono altre attività successori che possono essere assegnate a questo utente, viene restituito Null. Se AutoClaim viene impostato per attività successori e vi sono più percorsi che possono essere seguiti, vengono richiamate tutte le attività successori, e come attività successiva viene restituita un'attività casuale.
Se il processo contiene percorsi paralleli che possono essere seguiti e tali percorsi contengono attività staff per cui l'utente collegato è potenziale proprietario di più di un'attività, viene richiamata automaticamente un'attività casuale che viene restituita come attività successiva.
- Lavorare sull'attività successiva.
String name = successor.getActivityName();
ClientObjectWrapper nextInput = successor.getInputMessage();
if ( nextInput.getObject()!= null && nextInput.getObject() instanceof DataObject )
{
activityInput = (DataObject)input.getObject();
// leggere i valori
...
}
- Continuare con il passo 2 per
completare l'attività.