| At line 1 added 138 lines |
| %%(display:none) |
| {{{ |
| WikiUp |
| }}} |
| /% |
| [{TableOfContents }]\\ |
| !!! INTRODUZIONE GENERALE\\ |
| \\ |
| La struttura di un ordine xxx, istanza di un processo yyy (tabella WFA), viene specificata in uno script, individuato con le seguenti regole:\\ |
| * Lo script viene inizialmente cercato come membro xxx del file sorgente SCP_WFA_F1 (questa funzione è da approfondire, per ora non è utilizzata).\\ |
| * Se assente si risale al membro yyy nel file sorgente SCP_WFA.\\ |
| * Se assente si risale al membro zzz nel file sorgente SCP_WFA, dove zzz è il gruppo processo definito nella tabella del processo yyy.\\ |
| \\ |
| !!! STRUTTURA DELLA RETE\\ |
| \\ |
| La definizione del processo è centrata sulla dichiarazione delle sue transizioni, che saranno convertite in impegni da eseguire e in attività nel corso dell'esecuzione.\\ |
| Per ogni transizione (TRA) vanno definiti:\\ |
| * I luoghi in ingresso alla transizione (tag FROM).\\ |
| * I luoghi in uscita alla transizione (tag TO).\\ |
| * (opzionale) Il programma di dichiarazione / presa in carico dell'esecuzione della transizione (tag DIC, PRC).\\ |
| * (opzionali) Le azioni esterne eseguibili dall'utente contestualmente all'esecuzione della transizione (tag EXT).\\ |
| * (opzionali) Le conseguenze automatiche dell'esecuzione della transizione (tag CSG.EXT).\\ |
| \\ |
| !!! CONSIDERAZIONI SULLE ISTRUZIONI\\ |
| \\ |
| Per una spiegazione dettagliata degli attributi consultare il wizard nell'editor grafico ed i relativi help di campo.\\ |
| \\ |
| !! LUOGHI\\ |
| \\ |
| I luoghi sono definiti all'interno del tag FROM se sono in ingresso alla transizione, TO se in uscita.\\ |
| Deve essere definito almeno (ma non necessariamente uno) luogo iniziale; la presenza di luoghi finali non è indispensabile (lo è per chiudere gli ordini di workflow: un ordine viene chiuso quando TUTTI i luoghi finali hanno il token).\\ |
| \\ |
| !! REQUISITI\\ |
| \\ |
| Una transizione è pronta se sono soddisfatti sia i requisiti sui luoghi sia i requisiti esterni.\\ |
| \\ |
| ! Requisiti sui luoghi\\ |
| \\ |
| Se non impostato si assume implicitamente un and-join (tutti i luoghi precedenti devono avere il token).\\ |
| Può essere specificata, nel tag FROM, una di queste modalità alternative:\\ |
| * Requisiti sui luoghi in OR (Tip="O"): basta che un luogo precedente abbia il token.\\ |
| * Requisiti sui luoghi in X-OR (Tip="X"): solo un luogo precedente deve avere il token\\ |
| * Programma (Tip="P", Pgm="NomePgm): si passa la schiera dei luoghi con i rispettivi token: il programma decide se rendere pronta la transizione. Può implementare exclusive-or, oppure requisiti particolari (ad esempio a maggioranza: se ci sono cinque luoghi precedenti, basta che tre abbiano il token).\\ |
| \\ |
| ! Requisiti esterni\\ |
| \\ |
| I requisiti esterni rendono pronta una transizione in base alla situazione del mondo esterno.\\ |
| \\ |
| Si può impostare uno dei seguenti requisiti:\\ |
| * Programma: si esegue un programma, a cui si passa la transizione, che ritorna se essa è attivabile.\\ |
| * Condizione: si controlla una condizione: se è verificata la transizione è attivabile.\\ |
| Per l'esposizione delle variabili utilizzabili in una condizione riferirsi all'opportuna sezione.\\ |
| \\ |
| !! CONSEGUENZE\\ |
| \\ |
| Dopo l'esecuzione di una transizione (attività) vengono eseguite le conseguenze associate alla transizione.\\ |
| \\ |
| ! Conseguenze sui luoghi\\ |
| \\ |
| Definiscono i luoghi in cui si mette il token dopo che una transizione è stata eseguita.\\ |
| Se non impostata la modalità di assegnazione dei token si assume implicitamente l'and-split (TUTTI i luoghi successivi ricevono il token).\\ |
| Si può, in alternativa, impostare una delle due seguenti modalità nel tag TO:\\ |
| * Programma (Tip="P"): si esegue un programma, in cui si impostano i luoghi in cui mettere il token. E' cura di chi realizza il programma di assicurarsi che venga scritto almeno un token, per non mandare in stallo il processo.\\ |
| * Condizioni (Tip="C"): il luogo o i luoghi in cui mettere il token vengono scelti in base a delle condizioni specificate nel seguito.\\ |
| \\ |
| Nel caso di conseguenza con condizioni, essa può essere automatica (eseguita dal motore di workflow all'avanzamento) oppure manuale (ogni condizione rappresenta un'opzione per l'utente, che ne sceglie da 1 a n).\\ |
| Esempio di selezione automatica di condizioni:\\ |
| ;;TO Tip="C"\\ |
| ;;WHN Con="Condizione 1 ........"\\ |
| ;;LUO Val="CodiceLuogo 1"\\ |
| ;;LUO Val="CodiceLuogo 2"\\ |
| ;;WHN Con="Condizione 2 ........"\\ |
| ;;LUO Val="CodiceLuogo 3"\\ |
| ;;OTH\\ |
| ;;LUO Val="CodiceLuogo 2"\\ |
| ;;LUO Val="CodiceLuogo 4"\\ |
| Si imposta una struttura di selezione: TUTTE le condizioni WHN che sono verificate vengono selezionate; in assenza di condizioni valide si prende la strada dell'OTH, obbligatorio.\\ |
| Un luogo può essere presente più di una volta, in diverse condizioni.\\ |
| Nell'esempio il luogo 2 è attivato dalla condizione 1 e dall'OTH.\\ |
| \\ |
| Le conseguenze sui luoghi vengono valutate dopo aver eseguito le conseguenze esterne, quindi è possibile utilizzare nelle loro condizioni valori di OAV che sono stati modificati da queste ultime.\\ |
| \\ |
| Per quanto riguarda la selezione manuale, bisogna impostare la keyword Sst nell'istruzione TRA. A questo punto si enumerano le scelte possibili da parte dell'utente con la WHN, impostando nel campo Con soltanto un'enumerazione di valori (1, 2, ...).\\ |
| \\ |
| ! Conseguenze esterne\\ |
| \\ |
| Le conseguenze esterne (facoltative) permettono di codificare le azioni "cieche" sul mondo esterno che vengono eseguite all' esecuzione di un'attività o di un passaggio di stato signifcativo.\\ |
| Si possono assimilare al flusso di inserimento dell'attività stessa; a differenza di quest'ultimo, la selezione delle azioni è più flessibile, in quanto è possibile condizionare in modo strutturato le azioni da eseguire.\\ |
| \\ |
| Deve essere presente inzialmente il tag che definisce che la parte sottostante è una conseguenza esterna (;;CSG.EXT), con il relativo parametro che indica il tipo di conseguenza (ATT/PRC/DIC...). Questo va seguito da un blocco di flusso, per specificare le funzioni da eseguire (si veda più avanti).\\ |
| \\ |
| !! DICHIARAZIONE/PRESA IN CARICO/DISTRIBUZIONE/ASSEGNAZIONE\\ |
| \\ |
| È possibile impostare il programma che esegue la dichiarazione dell'attività che esegue la transizione, con la sintassi ;;yyy.xxx, dove yyy vale DIC nel caso di dichiarazione di esecuzione, PRC nel caso di presa in carico, e dove xxx rappresenta il tipo di azione da eseguire (attualmente è implementato il valore FUN, per lanciare programmi funizzati o servizi)\\ |
| Esempio: ;;DIC.FUN Fun="A(Programma;Funzione;Metodo) P(Parametri)\\ |
| \\ |
| Nel caso di programmi funizzati viene passato in chiave 1 l'impegno che si sta trattando (Oggetto di tipo F2), mentre in chiave 2 il tipo di azione (dichiarazione o presa in carico).\\ |
| Nel caso di chiamate a funzioni di Looc.up viene passato in chiave 1 l'impegno che si sta trattando, mentre lo specificare il tipo di azione è lasciato alla funzione / metodo di chiamata del servizio.\\ |
| \\ |
| Se non è stata impostato questo tag, si assume come default il programma WFATT_01 a struttura funizzata, a cui viene passato in modo automatico, nella funzione, il tipo di dichiarazione (es. ;;DIC.FUN Fun="A(WFATT_01;DIC))\\ |
| Ovviamente è possibile definire un tag di presa in carico e non uno di esecuzione, o viceversa.\\ |
| In questi casi viene assunto il default per il tag mancante.\\ |
| \\ |
| !! AZIONI ESTERNE\\ |
| \\ |
| Le azioni esterne permettono di codificare le azioni sul mondo esterno che possono essere eseguite contemporaneamente allo svolgimento di un'attività.\\ |
| Deve essere presente il tag che definisce che la parte sottostante è una serie di azioni esterne (;;EXT), seguito da un blocco di flusso, per specificare le funzioni da eseguire (si veda più avanti).\\ |
| \\ |
| NB: le azioni esterne POSSONO essere eseguite dall'utente DURANTE un'attività, le conseguenze esterne VENGONO eseguite automaticamente AL TERMINE dell'attività!\\ |
| \\ |
| !! BLOCCHI DI FLUSSO\\ |
| Un blocco di flusso descrive un insieme di funzioni, che il motore di workflow lancia (nel caso di conseguenze esterne) o presenta all'utente (nel caso di azioni esterne).\\ |
| Sono previsti sia tag di definizione funzioni sia tag di selezione.\\ |
| \\ |
| ! Tag di definizione funzioni.\\ |
| Si utilizzano per descrivere le azioni che verranno eseguite (;;AZI.xxx), dove xxx rappresenta il tipo di azione da eseguire; attualmente è implementato il valore FUN, per lanciare sia programmi funizzati che funzioni Looc.up.\\ |
| In questo caso la sintassi completa è ;;AZI.FUN Fun="A(Programma;Funzione;Metodo) 1(...) ... 6(...) P(Parametri)" Cls="zzz",\\ |
| dove zzz è la classe di esecuzione, utilizzata solo nel caso di azioni esterne (serve alla scheda di impegno per decidere rappresentare un'azione come scheda o pulsante).\\ |
| \\ |
| In chiave 1 viene passato, di default:\\ |
| * l'impegno (F2), se l'azione è esterna o di dichiarazione (sotto i tag EXT o xxx.FUN).\\ |
| * l'attività (F4), se l'azione è una conseguenza esterna (sotto il tag CSG.EXT).\\ |
| Nel codice 2 viene passato, di default:\\ |
| * Il tipo di azione (ASS, PRC, DIS, DIC), se l'azione è di dichiarazione.\\ |
| * Il tipo di conseguenza esterna, intesa come stato (ASG, PRO) o attività (ATT, ASS, PRC, DIC, DIS), nel caso di conseguenza esterna.\\ |
| * niente, nel caso di azioni esterne.\\ |
| Se nella definizione delle azioni nello script viene definito qualcosa di diverso negli oggetti 1 e 2 questo ha la precedenza rispetto alle informazioni sopra descritte.\\ |
| \\ |
| Il parametro P e gli oggetti da 3 a 6 sono sempre lasciati a disposizione dell'utilizzatore per passare parametri liberi.\\ |
| \\ |
| ! Tag di condizione\\ |
| Si utilizzano per impostare condizioni sull'eseguibilità su insiemi di azioni (condizioni IF, le azioni tra l'IF e l'ENDIF solo eseguite solo se la condizione è valida).\\ |
| Il modo di passare le informazioni dall'istanza di workflow alla condizione sono gli OAV dell'attività o dell'impegno, che possono essere aggiornati (ad esempio come parametri) dalla dichiarazione dell'attività stessa.\\ |
| \\ |
| Nel caso di conseguenze esterne le azioni vengono eseguite nella sequenza in cui sono codificate: in tal modo è possibile condizionare le azioni successive. Nel caso di azioni esterne è l'utente che sceglie quali azioni eseguire e in che ordine.\\ |
| \\ |
| Se un'azione richiede un'informazione a video che viene poi memorizzata, e se essa è raggiungibile tramite OAV di variabili, la si può inserire in una condizione di selezione di un IF successivo all'azione eseguita.\\ |
| A questo proposito gli OAV utilizzati nelle condizoni, vengono 'rinfrescati' ad ogni lettura, dato che è stata utilizzata la modalità di rilettura forzata degli attributi ad ogni nuovo richiamo (anche se relativi all'ultimo oggetto trattato).\\ |