Differenze tra le versioni di "Avvio di sotto-processi"

Da wiki.maggioli.it.
Jump to navigation Jump to search
imported>Root
imported>Root
Riga 1: Riga 1:
==Descrizione==
==Descrizione==
Questa attività permette di avviare uno o più sotto-processi. L'attività rimane in sospensione in attesa della terminazione di tutti i sotto-processi avviati. La terminazione dell'ultimo sotto-processo in ordine temporale causa lo sblocco della sospensione del processo chiamante e la sua prosecuzione con le attività successive.
Questa attività permette di avviare uno o più sotto-processi. L'attività rimane in sospensione in attesa della terminazione di tutti i sotto-processi avviati. La terminazione dell'ultimo sotto-processo in ordine temporale causa lo sblocco della sospensione del processo chiamante e la sua prosecuzione con le attività successive.


==Selezione del processo==
==Selezione del processo==
Qualsiasi processo già inserito nel sistema può essere utilizzato come sotto-processo. Se il processo scelto definisce dei parametri in entrata e/o in uscita, sarà possibile interfacciarsi utilizzando gli attributi della classe corrente.
Qualsiasi processo già inserito nel sistema può essere utilizzato come sotto-processo. Se il processo scelto definisce dei parametri in entrata e/o in uscita, sarà possibile interfacciarsi utilizzando gli attributi della classe corrente.


La selezione del processo da utilizzare come sotto-processo avviene specificando i campi '''Applicazione''' e '''Classe'''. Una volta impostato il primo campo, il secondo campo offrirà i valori corrispondenti. I processi di workflow sono catalogati sempre per applicazione e classe.
La selezione del processo da utilizzare come sotto-processo avviene specificando i campi '''Applicazione''' e '''Classe'''. Una volta impostato il primo campo, il secondo campo offrirà i valori corrispondenti. I processi di workflow sono catalogati sempre per applicazione e classe.


==Molteplicità==
==Molteplicità==
Il parametro '''Numero di sotto processi''' permette di scegliere quante copie del sotto-processo (molteplicità) avviare. Il valore può essere impostato manualmente oppure tramite il valore di un attributo della classe corrente in modo da rendere dinamico il comportamento. E' possibile anche attivare la funzionalità '''Desumi dai parametri''', ma questa possibilità viene spiegata più avanti perchè necessita di ulteriori nozioni.
Il parametro '''Numero di sotto processi''' permette di scegliere quante copie del sotto-processo (molteplicità) avviare. Il valore può essere impostato manualmente oppure tramite il valore di un attributo della classe corrente in modo da rendere dinamico il comportamento. E' possibile anche attivare la funzionalità '''Desumi dai parametri''', ma questa possibilità viene spiegata più avanti perchè necessita di ulteriori nozioni.


'''''Nota:''' Il valore 0 (zero) è accettabile e in sostanza fa proseguire il processo chiamante senza fare nulla.''
'''''Nota:''' Il valore 0 (zero) è accettabile e in sostanza fa proseguire il processo chiamante senza fare nulla.''


==Descrizione==
==Descrizione==
Il parametro '''Descrizione sottoprocessi''' permette di impostare una descrizione che verrà visualizzata nelle interfacce di amministrazione che mostrano le istanze in esecuzione.
Il parametro '''Descrizione sottoprocessi''' permette di impostare una descrizione che verrà visualizzata nelle interfacce di amministrazione che mostrano le istanze in esecuzione.


==Comunicazione con il sotto-processo==
==Comunicazione con il sotto-processo==
Una volta selezionata la classe di processo da avviare, nelle due tabelle sottostanti compaiono i parametri di input (tabella superiore) e di output (tabella inferioe) di tale processo. Tramite questi due pannelli è possibile passare delle informazioni al sotto-processo e successivamente leggere i risultati che questo produce.  
Una volta selezionata la classe di processo da avviare, nella tabella sottostante compaiono i parametri di input (icona rossa) e di output (icona verde) di tale processo. Tramite questo pannello è possibile passare delle informazioni al sotto-processo e successivamente leggere i risultati che questo produce.  


===Parametri in input===
===Parametri in input===
La colonna '''Parametri in input''' mostra tutti i parametri che il sotto-processo può accettare.
I parametri di input (icona rossa) sono tutti i parametri che il sotto-processo può accettare.
I valori in input possono essere digitati manualmente oppure possono essere degli attributi della classe corrente. L'impostazione avviene nella colonna '''Valore'''.
I valori in input possono essere digitati manualmente oppure possono essere degli attributi della classe corrente. L'impostazione avviene nella colonna '''Valore'''.


La colonna '''Comportamento''' permette di definire come il dato in entrata viene passato a tutte le istanze di sotto-processo che verranno avviate. Le possibilità sono '''Copia su ogni istanza''' e '''Distribuisci su istanze'''.
La colonna '''Comportamento''' permette di definire come il dato in entrata viene passato a tutte le istanze di sotto-processo che verranno avviate. Le possibilità sono '''Copia su ogni istanza''' e '''Distribuisci su istanze'''.


====Copia su ogni istanza====
====Copia su ogni istanza====
Questo comportamento implica una copia esatta per ogni sotto-processo del valore digitato oppure contenuto dell'attributo di classe. Questo significa che ogni sotto-processo avviato avrà nel parametro specificato lo stesso valore.
Questo comportamento implica una copia esatta per ogni sotto-processo del valore digitato oppure contenuto dell'attributo di classe. Questo significa che ogni sotto-processo avviato avrà nel parametro specificato lo stesso valore.


====Distribuisci su istanze====
====Distribuisci su istanze====
Questo comportamento permette invece di passare ad ogni istanza un differente valore per il parametro specificato. La funzionalità è attiva solamente quando il valore viene passato tramite un attributo della classe corrente, ed in particolare tramite un attributo di tipo array (quindi Long[], Double[], Date[], String[]). Se l'attributo utilizzato invece è di tipo scalare (quindi Long, Double, Date, String) il comportamento è identico a '''Copia su ogni istanza'''.
Questo comportamento permette invece di passare ad ogni istanza un differente valore per il parametro specificato. La funzionalità è attiva solamente quando il valore viene passato tramite un attributo della classe corrente, ed in particolare tramite un attributo di tipo array (quindi Long[], Double[], Date[], String[]). Se l'attributo utilizzato invece è di tipo scalare (quindi Long, Double, Date, String) il comportamento è identico a '''Copia su ogni istanza'''.


'''Esempio:''' Viene passato un array String[] contenente gli elementi ["primo","secondo","terzo"] e vengono avviate tre istanze di sotto-processo. Ogni sotto processo riceverà in input uno dei valori, in ordine di avvio. Quindi il primo sotto-processo avrà il parametro valorizzato con "primo", il secondo con "secondo" e così via.
'''Esempio:''' Viene passato un array String[] contenente gli elementi ["primo","secondo","terzo"] e vengono avviate tre istanze di sotto-processo. Ogni sotto processo riceverà in input uno dei valori, in ordine di avvio. Quindi il primo sotto-processo avrà il parametro valorizzato con "primo", il secondo con "secondo" e così via.


'''''Attenzione:''' Quando si utilizza questo comportamento è necessario che il numero di elementi contenuti nell'array passato come parametro sia maggiore o uguale alla molteplicità (numero di sotto-processi). In caso negativo il flusso si blocca segnalando l'errore.''
'''''Attenzione:''' Quando si utilizza questo comportamento è necessario che il numero di elementi contenuti nell'array passato come parametro sia maggiore o uguale alla molteplicità (numero di sotto-processi). In caso negativo il flusso si blocca segnalando l'errore.''


===Parametri in output===
===Parametri in output===
Una volta che tutti i sotto-processi sono terminati l'attività di avvio sotto-processo termina ed il flusso dell'istanza chiamante procede ai passi successivi. E' possibile utilizzare i valori di ritorno prodotti dai sotto-processi per ulteriori elaborazioni. Per fare questo è sufficiente impostare nella colonna '''Copia il valore in''' su quale attributo della classe corrente copiare il risultato, e se tale risultato dev'essere utilizzato anche per pilotare delle condizioni di uscita.
Una volta che tutti i sotto-processi sono terminati l'attività di avvio sotto-processo termina ed il flusso dell'istanza chiamante procede ai passi successivi. E' possibile utilizzare i valori di ritorno prodotti dai sotto-processi per ulteriori elaborazioni. Per fare questo è sufficiente impostare nella colonna '''Valore''' del parametro di output (icona verde) su quale attributo della classe corrente copiare il risultato, e se tale risultato dev'essere utilizzato anche per pilotare delle condizioni di uscita.


Mentre se si avvia un solo sotto-processo il flusso dei dati è semplice, il problema si pone quando si avviano più sotto processi: come recuperare i risultati di tutti i sotto processi? La regola da utilizzare viene specificata sempre nella colonna '''Comportamento'''. Le possibilità sono '''Valore ultima istanza''' e '''Unione delle istanze'''.
Mentre se si avvia un solo sotto-processo il flusso dei dati è semplice, il problema si pone quando si avviano più sotto processi: come recuperare i risultati di tutti i sotto processi? La regola da utilizzare viene specificata sempre nella colonna '''Comportamento'''. Le possibilità sono '''Valore ultima istanza''' e '''Unione delle istanze'''.


====Valore ultima istanza====
====Valore ultima istanza====
Questo comportamento istruisce il workflow ad utilizzare come risultato solamente quello prodotto dall'ultimo sotto-processo terminato (quello che in effetti causa la prosecuzione del flusso chiamante). In questa modalità i risultati di tutti gli altri sotto-processi vengono semplicemente ignorati. Questo è il default e garantisce un funzionamento intuitivo nel caso in cui venga avviato un singolo sotto-processo.
Questo comportamento istruisce il workflow ad utilizzare come risultato solamente quello prodotto dall'ultimo sotto-processo terminato (quello che in effetti causa la prosecuzione del flusso chiamante). In questa modalità i risultati di tutti gli altri sotto-processi vengono semplicemente ignorati. Questo è il default e garantisce un funzionamento intuitivo nel caso in cui venga avviato un singolo sotto-processo.


====Unione delle istanze====
====Unione delle istanze====
Questo comportamento invece è simile al '''Distribuisci su istanze''' dei paramerti di input, solo che funziona al contrario. Questo significa che tutti i valori del parametro di output vengono presi da tutti i sotto-processi terminati (in ordine di terminazione) e vengono assemblati in un array. La funzionalità è attiva solo se il valore viene copiato in un attributo di tipo array. Se il sotto-processo torna a sua volta un array come risultato, tutti gli array vengono concatenati in uno unico, ma questo impedisce di capire quale elemento dell'array arriva da quale sotto-processo.
Questo comportamento invece è simile al '''Distribuisci su istanze''' dei paramerti di input, solo che funziona al contrario. Questo significa che tutti i valori del parametro di output vengono presi da tutti i sotto-processi terminati (in ordine di terminazione) e vengono assemblati in un array. La funzionalità è attiva solo se il valore viene copiato in un attributo di tipo array. Se il sotto-processo torna a sua volta un array come risultato, tutti gli array vengono concatenati in uno unico, ma questo impedisce di capire quale elemento dell'array arriva da quale sotto-processo.


'''Esempio:''' Supponiamo di avviare 3 sotto-processi. Ognuno di questi sotto-processi risponde con un parametro di output che indica "OK" oppure "FALLITO" per indicare, ad esempio, l'esito di un accertamento. Se utilizziamo un attributo di tipo array, potremo ottenere in output, ad esempio, un risultato del tipo ["OK","OK","FALLITO"]. Tale collezione di risultati potrà essere esaminata dal processo chiamante tramite altre attività di gestione dati oppure passata ad un nuovo avvio di sotto processi che gestirà in modo parallelo i vari risultati.
'''Esempio:''' Supponiamo di avviare 3 sotto-processi. Ognuno di questi sotto-processi risponde con un parametro di output che indica "OK" oppure "FALLITO" per indicare, ad esempio, l'esito di un accertamento. Se utilizziamo un attributo di tipo array, potremo ottenere in output, ad esempio, un risultato del tipo ["OK","OK","FALLITO"]. Tale collezione di risultati potrà essere esaminata dal processo chiamante tramite altre attività di gestione dati oppure passata ad un nuovo avvio di sotto processi che gestirà in modo parallelo i vari risultati.


==L'opzione Desumi dai parametri==
==L'opzione Desumi dai parametri==
Torniamo ora all'opzione che avevamo tralasciato prima. Quando si attiva questa opzione, scompare il campo di input che permette di specificare la molteplicità. Il valore verrà dedotto da come vengono mappati i parametri in input. Se nessun parametro ha comportamento '''Distribuisci su istanze''' il valore dedotto sarà 1. Se invece ci sono dei parametri che vengono distribuiti, allora a prima dell'esecuzione dei sotto-processi viene contato il numero di elementi per ognuno di questi parametri e il valore dedotto corrisponderà al minimo tra tutti i conteggi. Quindi se ho un parametro P1 cui vengono passati 10 elementi da distribuire ed un parametro P2 cui vengono passati 3 elementi, verranno avviati 3 sotto-processi.
Torniamo ora all'opzione che avevamo tralasciato prima. Quando si attiva questa opzione, scompare il campo di input che permette di specificare la molteplicità. Il valore verrà dedotto da come vengono mappati i parametri in input. Se nessun parametro ha comportamento '''Distribuisci su istanze''' il valore dedotto sarà 1. Se invece ci sono dei parametri che vengono distribuiti, allora a prima dell'esecuzione dei sotto-processi viene contato il numero di elementi per ognuno di questi parametri e il valore dedotto corrisponderà al minimo tra tutti i conteggi. Quindi se ho un parametro P1 cui vengono passati 10 elementi da distribuire ed un parametro P2 cui vengono passati 3 elementi, verranno avviati 3 sotto-processi.

Versione delle 08:37, 11 mag 2010

Descrizione

Questa attività permette di avviare uno o più sotto-processi. L'attività rimane in sospensione in attesa della terminazione di tutti i sotto-processi avviati. La terminazione dell'ultimo sotto-processo in ordine temporale causa lo sblocco della sospensione del processo chiamante e la sua prosecuzione con le attività successive.

Selezione del processo

Qualsiasi processo già inserito nel sistema può essere utilizzato come sotto-processo. Se il processo scelto definisce dei parametri in entrata e/o in uscita, sarà possibile interfacciarsi utilizzando gli attributi della classe corrente.

La selezione del processo da utilizzare come sotto-processo avviene specificando i campi Applicazione e Classe. Una volta impostato il primo campo, il secondo campo offrirà i valori corrispondenti. I processi di workflow sono catalogati sempre per applicazione e classe.

Molteplicità

Il parametro Numero di sotto processi permette di scegliere quante copie del sotto-processo (molteplicità) avviare. Il valore può essere impostato manualmente oppure tramite il valore di un attributo della classe corrente in modo da rendere dinamico il comportamento. E' possibile anche attivare la funzionalità Desumi dai parametri, ma questa possibilità viene spiegata più avanti perchè necessita di ulteriori nozioni.

Nota: Il valore 0 (zero) è accettabile e in sostanza fa proseguire il processo chiamante senza fare nulla.

Descrizione

Il parametro Descrizione sottoprocessi permette di impostare una descrizione che verrà visualizzata nelle interfacce di amministrazione che mostrano le istanze in esecuzione.

Comunicazione con il sotto-processo

Una volta selezionata la classe di processo da avviare, nella tabella sottostante compaiono i parametri di input (icona rossa) e di output (icona verde) di tale processo. Tramite questo pannello è possibile passare delle informazioni al sotto-processo e successivamente leggere i risultati che questo produce.

Parametri in input

I parametri di input (icona rossa) sono tutti i parametri che il sotto-processo può accettare. I valori in input possono essere digitati manualmente oppure possono essere degli attributi della classe corrente. L'impostazione avviene nella colonna Valore.

La colonna Comportamento permette di definire come il dato in entrata viene passato a tutte le istanze di sotto-processo che verranno avviate. Le possibilità sono Copia su ogni istanza e Distribuisci su istanze.

Copia su ogni istanza

Questo comportamento implica una copia esatta per ogni sotto-processo del valore digitato oppure contenuto dell'attributo di classe. Questo significa che ogni sotto-processo avviato avrà nel parametro specificato lo stesso valore.

Distribuisci su istanze

Questo comportamento permette invece di passare ad ogni istanza un differente valore per il parametro specificato. La funzionalità è attiva solamente quando il valore viene passato tramite un attributo della classe corrente, ed in particolare tramite un attributo di tipo array (quindi Long[], Double[], Date[], String[]). Se l'attributo utilizzato invece è di tipo scalare (quindi Long, Double, Date, String) il comportamento è identico a Copia su ogni istanza.

Esempio: Viene passato un array String[] contenente gli elementi ["primo","secondo","terzo"] e vengono avviate tre istanze di sotto-processo. Ogni sotto processo riceverà in input uno dei valori, in ordine di avvio. Quindi il primo sotto-processo avrà il parametro valorizzato con "primo", il secondo con "secondo" e così via.

Attenzione: Quando si utilizza questo comportamento è necessario che il numero di elementi contenuti nell'array passato come parametro sia maggiore o uguale alla molteplicità (numero di sotto-processi). In caso negativo il flusso si blocca segnalando l'errore.

Parametri in output

Una volta che tutti i sotto-processi sono terminati l'attività di avvio sotto-processo termina ed il flusso dell'istanza chiamante procede ai passi successivi. E' possibile utilizzare i valori di ritorno prodotti dai sotto-processi per ulteriori elaborazioni. Per fare questo è sufficiente impostare nella colonna Valore del parametro di output (icona verde) su quale attributo della classe corrente copiare il risultato, e se tale risultato dev'essere utilizzato anche per pilotare delle condizioni di uscita.

Mentre se si avvia un solo sotto-processo il flusso dei dati è semplice, il problema si pone quando si avviano più sotto processi: come recuperare i risultati di tutti i sotto processi? La regola da utilizzare viene specificata sempre nella colonna Comportamento. Le possibilità sono Valore ultima istanza e Unione delle istanze.

Valore ultima istanza

Questo comportamento istruisce il workflow ad utilizzare come risultato solamente quello prodotto dall'ultimo sotto-processo terminato (quello che in effetti causa la prosecuzione del flusso chiamante). In questa modalità i risultati di tutti gli altri sotto-processi vengono semplicemente ignorati. Questo è il default e garantisce un funzionamento intuitivo nel caso in cui venga avviato un singolo sotto-processo.

Unione delle istanze

Questo comportamento invece è simile al Distribuisci su istanze dei paramerti di input, solo che funziona al contrario. Questo significa che tutti i valori del parametro di output vengono presi da tutti i sotto-processi terminati (in ordine di terminazione) e vengono assemblati in un array. La funzionalità è attiva solo se il valore viene copiato in un attributo di tipo array. Se il sotto-processo torna a sua volta un array come risultato, tutti gli array vengono concatenati in uno unico, ma questo impedisce di capire quale elemento dell'array arriva da quale sotto-processo.

Esempio: Supponiamo di avviare 3 sotto-processi. Ognuno di questi sotto-processi risponde con un parametro di output che indica "OK" oppure "FALLITO" per indicare, ad esempio, l'esito di un accertamento. Se utilizziamo un attributo di tipo array, potremo ottenere in output, ad esempio, un risultato del tipo ["OK","OK","FALLITO"]. Tale collezione di risultati potrà essere esaminata dal processo chiamante tramite altre attività di gestione dati oppure passata ad un nuovo avvio di sotto processi che gestirà in modo parallelo i vari risultati.

L'opzione Desumi dai parametri

Torniamo ora all'opzione che avevamo tralasciato prima. Quando si attiva questa opzione, scompare il campo di input che permette di specificare la molteplicità. Il valore verrà dedotto da come vengono mappati i parametri in input. Se nessun parametro ha comportamento Distribuisci su istanze il valore dedotto sarà 1. Se invece ci sono dei parametri che vengono distribuiti, allora a prima dell'esecuzione dei sotto-processi viene contato il numero di elementi per ognuno di questi parametri e il valore dedotto corrisponderà al minimo tra tutti i conteggi. Quindi se ho un parametro P1 cui vengono passati 10 elementi da distribuire ed un parametro P2 cui vengono passati 3 elementi, verranno avviati 3 sotto-processi.