gwusermanual:interface:workflow

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisione Revisione precedente
Prossima revisione
Revisione precedente
gwusermanual:interface:workflow [2021/07/05 10:21]
giorgio.scali [Altre Configurazioni]
gwusermanual:interface:workflow [2022/10/04 12:41] (versione attuale)
giorgio.scali [LeafItem gwStartProcessInstanceByMessageAction]
Linea 324: Linea 324:
 {{:​gwusermanual:​11.png?​800|}} {{:​gwusermanual:​11.png?​800|}}
  
-====Bottoni workflow====+===Template configJSON===
  
-E' ​possibile modificare in dettaglio bottoni e relative label di tutte le form. Ciò può essere fatto task per taskod a livello dell'intero processo.+<code json> 
 +
 + codField: '​code_field', 
 + dateField: '​date_field',​ 
 + orderListByGwAttributes:​ false, 
 + hideActivitiFilters:​ false, 
 + startProcessInstanceLabel:​ null, 
 + processEndedNotificationTitle:​ null, 
 + processEndedNotificationMessage:​ null, 
 + procedureOrderedTaskDefKeys:​ ['​taskDefKey_1',​ '​taskDefKey_2'​],​ 
 + processEndedGwActionName:​ '​gw_action_name',​ 
 + beforeStartProcessActionName:​ '​gw_action_name',​ 
 + afterStartProcessActionName:​ '​gw_action_name',​ 
 + beforeCompleteTaskActions:​ {  
 + '​taskFormKey_1':​ '​gw_action_name',​ 
 + '​taskFormKey_2':​ '​gw_action_name'​ 
 + }, 
 + afterCompleteTaskActions:​ { 
 + '​taskFormKey_1':​ '​gw_action_name',​ 
 + '​taskFormKey_2':​ '​gw_action_name'​ 
 + }, 
 + beforeClaimTaskActions:​ { 
 + '​taskFormKey_1':​ '​gw_action_name',​ 
 + '​taskFormKey_2':​ '​gw_action_name'​ 
 + }, 
 + afterClaimTaskActions:​ { 
 + '​taskFormKey_1':​ '​gw_action_name',​ 
 + '​taskFormKey_2':​ '​gw_action_name'​ 
 + }, 
 + allTaskForm_hideDocumentation:​ false, 
 + allTaskForm_hideCloseButton:​ false, 
 + allTaskForm_hideRestoreButton:​ false, 
 + allTaskForm_hideSaveButton:​ false, 
 + allTaskForm_completeTaskLabel:​ null, 
 + allTaskForm_claimTaskLabel:​ null, 
 + allTaskForm_saveTaskLabel:​ null, 
 + allTaskForm_restoreLabel:​ null, 
 + '​taskForm_formKey?​_hideDocumentation':​ false, 
 + '​taskForm_formKey?​_hideCloseButton':​ false, 
 + '​taskForm_formKey?​_hideRestoreButton':​ false, 
 + '​taskForm_formKey?​_hideSaveButton':​ false, 
 + '​taskForm_formKey?​_completeTaskLabel':​ null, 
 + '​taskForm_formKey?​_claimTaskLabel':​ null, 
 + '​taskForm_formKey?​_saveTaskLabel':​ null, 
 + '​taskForm_formKey?​_restoreLabel':​ null, 
 + '​taskForm_formKey?​_hideReportButton': false 
 +
 +</​code>​
  
-Proprietà globali: 
  
-  * **allTaskForm_startProcessInstanceLabel**,​ string, se omesso viene usato un default (label tasto avanza del form preliminare all'​avvio del processo) 
-  
-  * **allTaskForm_hideCloseButton**,​ boolean, default false, se true nasconde bottone di chiusura dialog 
-  
-  * **allTaskForm_hideRestoreButton**,​ boolean, default false, se true nasconde bottone di annulla modifche 
  
-  * **allTaskForm_hideSaveButton**,​ boolean, default false, se true nasconde bottone di salvataggio 
-  
-  * **allTaskForm_completeTaskLabel**,​ string, se omesso viene usato un default (label del tasto che serve a completare il task: tipicamente '​Avanza'​) 
- 
-  * **allTaskForm_claimTaskLabel**,​ string, se omesso viene usato un default (label del tasto che serve a richiedere il task in caso di task assegnato a più Utenti/​Gruppi) 
- 
-  * **allTaskForm_saveTaskLabel**,​ string, se omesso viene usato un default (label del tasto che serve a persistere in geoweb lo stato della form del task, ma senza notificare il motore di workflow che l'​utente ha completato il processo) 
- 
-  * **allTaskForm_restoreLabel**,​ string, se omesso viene usato un default (label del tasto che serve a riportare la form del task nello stato in cui era stata aperta) 
- 
-  * **processEndedNotificationTitle**,​ string, se omesso viene usato un default (titolo del dialog che notifica la fine di tutte le attività di un utente su una data istanza di processo) 
- 
-  * **processEndedNotificationMessage**,​ string, se omesso viene usato un default (messaggio del dialog che notifica la fine di tutte le attività di un utente su una data istanza di processo) 
- 
-Proprietà per i bottoni della form del task specifico (dove al posto del ? va messa la formKey del task) 
- 
-  * **taskForm_?​_hideCloseButton**,​ boolean, default false, se true nasconde bottone di chiusura dialog 
- 
-  * **taskForm_?​_hideRestoreButton**,​ boolean, default false, se true nasconde bottone di annulla modifche 
- 
-  * **taskForm_?​_hideSaveButton**,​ boolean, default false, se true nasconde bottone di salvataggio 
- 
-  * **taskForm_?​_completeTaskLabel**,​ string, se omesso viene usato un default 
- 
-  * **taskForm_?​_claimTaskLabel**,​ string, se omesso viene usato un default 
- 
-  * **taskForm_?​_saveTaskLabel**,​ string, se omesso viene usato un default 
- 
-  * **taskForm_?​_restoreLabel**,​ string, se omesso viene usato un default 
- 
-  * **taskForm_?​_hideReportButton**,​ boolean, default false, se true nasconde l'​eventuale bottone che apre la report di processo 
- 
-Esempio: 
- 
-se la formKey vale //​emission_odl_msg,​ taskForm_emission_odl_msg_completeTaskLabel//​ è un nome di proprietà valido ed il suo valore sarà la label mostrata sul tasto completeTask della tas Form con formKey = //​emission_odl_msg//​ 
- 
-**Note** 
-Le proprietà del task specifico hanno priorità su quelle globali. 
- 
-Le proprietà delle serie allTaskForm_*,​ taskForm_* e processEndedNotification* possono essere impostate anche nel file .BPMN di processo. 
- 
-Questo era il modo con cui venivano impostate prima dell'​aggiunta del metadato configJSON. 
- 
-Tale modalità di configurazione,​ seppur supportata è da considerarsi **DEPRECATA**. 
- 
- 
- 
-Con il diagramma di processo aperto in //​Eclipse//,​ cliccando su una zona bianca, il tab '//​Properties//'​ mostra le proprietà generali del processo. 
- 
-Nella sezione '//​Data Object//'​ è possibile gestire variabili di processo custom. 
- 
-{{:​gwusermanual:​12.png?​1000|}} 
- 
-Ad essere valutato ad ogni proprietà è l'​attributo //name//. (per comodità mettiamo id=name) 
- 
-Il //type// è importante ed è specifico della proprietà che vogliamo usare. 
- 
-Una volta modificato il file .BPMN, esso va ricaricato in //Geoweb// admin, per poter vedere le modifiche. 
- 
-Note: 
- 
-  * i processi che erano stati avviati con le precedenti definizioni di processo, non saranno effetti dalle nuove modifiche 
-  * le variabili definite in Data Objects, saranno considerate da Activiti a tutti gli effetti variabili di processo, e saranno quindi accessibili e modificabili dal codice contenuto nei vari .groovy delle TaskService 
- 
-====Altre Configurazioni==== 
- 
-  * **codField**,​ String, default null, se configurato l'​attributo con name codField, a prescindere che sia o meno inserito nella lista di Classe, viene aggiunto/​spostato in prima posizione nella gwTaskList 
-  * **dateField**,​ String, default null, se configurato l'​attributo con name dateField, a prescindere che sia o meno inserito nella lista, viene aggiunto/​spostato in prima posizione nella gwTaskList 
-    di Classe, viene aggiunto in prima posizione nella gwTaskList (ma dopo codField se configurato) 
-  * **orderListByGwAttributes**,​ boolean, default false, se abilitato adotta il generale sistema di ordinamento delle liste di Geoweb, configurato sugli xml dei singoli widget, tramite gli appositi tag (da 4.4.12) 
- 
-  * **hideActivitiFilters**,​ boolean, default false, se abilitato nasconde dentro la UI di filtro della gwTaskList, i criteri di filtro fissi e legati alle proprietà di Activiti (taskName, assegnee, taskDocumentation,​ taskPriority,​ taskCreated,​ taskDueDate) (da 4.4.12) 
 ====Azioni Javascript di Classe==== ====Azioni Javascript di Classe====
  
Linea 448: Linea 417:
   ​   ​
 Creare quindi l'​azione test_beforeStartProcessActionName nella gwClass che ospita il gwProcess. Creare quindi l'​azione test_beforeStartProcessActionName nella gwClass che ospita il gwProcess.
- +<code javascript>​ 
-          //params and deferred are function arguments  +//params and deferred are function arguments  
-     ​try{ +try{ 
-         ​var taskFormContainerId = params.taskFormContainerId;​ +     ​var taskFormContainerId = params.taskFormContainerId;​ 
-         ​var taskFormContainer =  +     ​var taskFormContainer = dijit.registry.getEnclosingWidget(dojo.byId(taskFormContainerId));​ 
-     dijit.registry.getEnclosingWidget(dojo.byId(taskFormContainerId));​ +     ​var scriptName = '​script_name';​  
-    var scriptName = '​script_name';​  +     ​var parameterMap = taskFormContainer.getFormValues();​  
-    var parameterMap = taskFormContainer.getFormValues();​  +     ​var callback = function(/​Object/​ data){  
-    var callback = function(/​Object/​ data){  +          var result = data.result;​  
-        var result = data.result;​  +          var success = result.success;​  
-        var success = result.success;​  +          var description = result.description;​  
-        var description = result.description;​  +          if(success){  
-        if(success){  +               ​deferred.resolve();​  
-            deferred.resolve();​  +          }else{  
-        }else{  +               ​invisibleStandbyWidget.hide();​  
-            invisibleStandbyWidget.hide();​  +               ​var title = confirmRequestLabel;​ //optional  
-            var title = confirmRequestLabel;​ //optional  +               ​var message = description+'​. Creare comunque una nuova istanza di processo?';​  
-            var message = description+'​. Creare comunque una nuova istanza di processo?';​  +               ​//optional  
-      //optional  +               ​var yesCallback = function(){  
-            var yesCallback = function(){  +                    invisibleStandbyWidget.show();​  
-                invisibleStandbyWidget.show();​  +                    deferred.resolve();​  
-                deferred.resolve();​  +               ​};  
-            };  +               ​var noCallback = function(){  
-            var noCallback = function(){  +                    deferred.cancel('​stopped by user'​);​  
-                deferred.cancel('​stopped by user'​);​  +               ​};  
-            };  +               ​var cancelCallback = function(){  
-            var cancelCallback = function(){  +                    deferred.cancel('​stopped by user'​);​  
-                deferred.cancel('​stopped by user'​);​  +               ​};  
-            };  +               ​var params = { 
-            var params = { +                    title: title, 
-                title: title, +                    message: message, 
-                message: message, +                    yesCallback:​ yesCallback,​ 
-                yesCallback:​ yesCallback,​ +                    noCallback: noCallback,​ 
-                noCallback: noCallback,​ +                    cancelCallback:​ cancelCallback 
-                cancelCallback:​ cancelCallback +               ​};  
-            };  +               ​showYesNoCancelDialog(params);​  
-            showYesNoCancelDialog(params);​  +          }  
-        }  +     ​};  
-    };  +      
-    groovyActionGeneric(scriptName,​ parameterMap,​ callback); }catch(e){  +     groovyActionGeneric(scriptName,​ parameterMap,​ callback); 
-    console.log('​test_beforeCompleteTaskAction error'​);​  +      
-    console.log(e);​  +}catch(e){  
-    deferred.reject(e.toString());​ } +     ​console.log('​test_beforeCompleteTaskAction error'​);​  
 +     ​console.log(e);​  
 +     ​deferred.reject(e.toString());​ 
 +
 +</​code>​
  
 Il groovy dovrebbe essere cosi strutturato:​ Il groovy dovrebbe essere cosi strutturato:​
    
- +<code java> 
-     ​def result = [:];  +def result = [:];  
-     ​def success = true;  +def success = true;  
-     ​def description = null;  +def description = null;  
-     ​try{ +try{ 
-         ​//fare tutti i check necessari ed eventualmente lanciare eccezioni +     ​//fare tutti i check necessari ed eventualmente lanciare eccezioni 
-         ​if(condition==true){ +     ​if(condition==true){ 
-             ​throw new RuntimeException("​ATTENZIONE! Errore!"​);​  +          throw new RuntimeException("​ATTENZIONE! Errore!"​);​  
-         ​+     ​
-         ​description ='​ok';​  +      description ='​ok';​  
-    }catch(Exception e){ +}catch(Exception e){ 
-       ​log.error(e.getMessage(),​ e); +     ​log.error(e.getMessage(),​ e); 
-       ​success = false; +     ​success = false; 
-       ​description = e.getMessage();​  +     ​description = e.getMessage();​  
-    }finally{ +}finally{ 
-        result.success = success; +     ​result.success = success; 
-        result.description = description;​ +     ​result.description = description;​ 
-    +
-    return result;+return result; 
 +</​code>​
  
  
Linea 540: Linea 513:
  
 Creare quindi l'​azione test_afterStartProcessActionName nella gwClass che ospita il gwProcess. Creare quindi l'​azione test_afterStartProcessActionName nella gwClass che ospita il gwProcess.
-    ​ +<code javascript>​ 
-     ​//params are function arguments  +//params are function arguments  
-     ​var gwClassName = '​gw_class_name';​  +var gwClassName = '​gw_class_name';​  
-     ​publishGwClassUpdate(gwClassName); ​    ​+publishGwClassUpdate(gwClassName);​ 
 +</​code>  ​
  
  
Linea 576: Linea 550:
  
 Creare quindi l'​azione test_beforeCompleteTaskAction nella gwClass che ospita il gwProcess. Creare quindi l'​azione test_beforeCompleteTaskAction nella gwClass che ospita il gwProcess.
 +<code javascript>​
      //​params and deferred are function arguments      //​params and deferred are function arguments
      try{      try{
Linea 620: Linea 594:
     deferred.reject(e.toString()); ​     deferred.reject(e.toString()); ​
   }    } 
 +</​code>  ​
   
 Il groovy dovrebbe essere cosi strutturato:​ Il groovy dovrebbe essere cosi strutturato:​
 +<code java>
      def result = [:];      def result = [:];
      def success = true;      def success = true;
Linea 641: Linea 616:
      }      }
      ​return result;      ​return result;
 +</​code>  ​
  
 ====04 afterCompleteTaskActions==== ====04 afterCompleteTaskActions====
Linea 668: Linea 643:
  
 Creare quindi l'​azione test_afterStartProcessActionName nella gwClass che ospita il gwProcess. Creare quindi l'​azione test_afterStartProcessActionName nella gwClass che ospita il gwProcess.
 +<code javascript>​
     //params are function arguments     //params are function arguments
      var gwClassName = '​gw_class_name';​      var gwClassName = '​gw_class_name';​
-     ​publishGwClassUpdate(gwClassName); ​    ​ +     ​publishGwClassUpdate(gwClassName);​  
 +</​code>  ​
  
 ====05 beforeClaimTaskActions==== ====05 beforeClaimTaskActions====
Linea 704: Linea 679:
  
 Creare quindi l'​azione test_beforeClaimTaskAction nella gwClass che ospita il gwProcess. Creare quindi l'​azione test_beforeClaimTaskAction nella gwClass che ospita il gwProcess.
 +<code javascript>​
         //params and deferred are function arguments ​         //params and deferred are function arguments ​
      try{      try{
Linea 748: Linea 723:
          ​deferred.reject(e.toString()); ​          ​deferred.reject(e.toString()); ​
     }     }
 +</​code>  ​
  
  Il groovy dovrebbe essere cosi strutturato:​  Il groovy dovrebbe essere cosi strutturato:​
 +<code java>
       def result = [:];        def result = [:]; 
       def success = true;        def success = true; 
Linea 768: Linea 744:
           result.description = description; ​           result.description = description; ​
       }        } 
-      return result;''​ +      return result; 
 +</​code>  ​
  
  
Linea 798: Linea 774:
  
 Creare quindi l'​azione test_afterClaimTaskAction nella gwClass che ospita il gwProcess. Creare quindi l'​azione test_afterClaimTaskAction nella gwClass che ospita il gwProcess.
 +<code javascript>​
    //​params are function arguments    //​params are function arguments
         ​         ​
    var gwClassName = '​gw_class_name';​    var gwClassName = '​gw_class_name';​
-   ​publishGwClassUpdate(gwClassName);​' ​   +   ​publishGwClassUpdate(gwClassName);​ 
-    +</​code> ​   
-====07 processEndedGwActionName====+====07 ​processEndedActionName (processEndedGwActionName)====
  
 type: String type: String
Linea 826: Linea 802:
  
 Creare quindi l'​azione test_afterClaimTaskAction nella gwClass che ospita il gwProcess. Creare quindi l'​azione test_afterClaimTaskAction nella gwClass che ospita il gwProcess.
- +<code javascript>​ 
-   ​publishGwClassUpdate('​secondary_class'​);  ​+   ​publishGwClassUpdate('​secondary_class'​); ​ 
 +</​code> ​ 
  
 ====Bottoni e Label workflow==== ====Bottoni e Label workflow====
Linea 835: Linea 812:
 Proprietà globali: Proprietà globali:
  
-  * **allTaskForm_startProcessInstanceLabel**, stringse omesso viene usato un default ​(label tasto avanza del form preliminare all'​avvio ​del processo+  * **allTaskForm_hideDocumentation**, boolean, default ​false, se true nasconde il contenuto descrittivo //​Documentation// ​del .BPMN ed il bottone che mostra il diagramma di processo
- +
   * **allTaskForm_hideCloseButton**,​ boolean, default false, se true nasconde bottone di chiusura dialog   * **allTaskForm_hideCloseButton**,​ boolean, default false, se true nasconde bottone di chiusura dialog
  
Linea 850: Linea 826:
  
   * **allTaskForm_restoreLabel**,​ string, se omesso viene usato un default (label del tasto che serve a riportare la form del task nello stato in cui era stata aperta)   * **allTaskForm_restoreLabel**,​ string, se omesso viene usato un default (label del tasto che serve a riportare la form del task nello stato in cui era stata aperta)
-  
-  * **processEndedNotificationTitle**,​ string, se omesso viene usato un default (titolo del dialog che notifica la fine di tutte le attività di un utente su una data istanza di processo) 
- 
-  * **processEndedNotificationMessage**,​ string, se omesso viene usato un default (messaggio del dialog che notifica la fine di tutte le attività di un utente su una data istanza di processo) 
  
 Proprietà per i bottoni della form del task specifico (dove al posto del **?** va messa la **formKey** del task) Proprietà per i bottoni della form del task specifico (dove al posto del **?** va messa la **formKey** del task)
 +  * **taskForm_?​_hideDocumentation**,​ boolean, default false, se true nasconde il contenuto descrittivo //​Documentation//​ del .BPMN ed il bottone che mostra il diagramma di processo
   * **taskForm_?​_hideCloseButton**,​ boolean, default false, se true nasconde bottone di chiusura dialog   * **taskForm_?​_hideCloseButton**,​ boolean, default false, se true nasconde bottone di chiusura dialog
   ​   ​
Linea 875: Linea 847:
 Esempio: Esempio:
 se la formKey vale //​emission_odl_msg,​ taskForm_emission_odl_msg_completeTaskLabel//​ è un nome di proprietà valido ed il suo valore sarà la label mostrata sul tasto completeTask della tas Form con formKey = //​emission_odl_msg//​ se la formKey vale //​emission_odl_msg,​ taskForm_emission_odl_msg_completeTaskLabel//​ è un nome di proprietà valido ed il suo valore sarà la label mostrata sul tasto completeTask della tas Form con formKey = //​emission_odl_msg//​
 +
 +
 +====Altre Configurazioni====
 +
 +  * **codField**,​ String, default null, se configurato l'​attributo con name codField, a prescindere che sia o meno inserito nella lista di Classe, viene aggiunto/​spostato in prima posizione nella gwTaskList
 +  * **dateField**,​ String, default null, se configurato l'​attributo con name dateField, a prescindere che sia o meno inserito nella lista, viene aggiunto/​spostato in prima posizione nella gwTaskList di Classe, viene aggiunto in prima posizione nella gwTaskList (ma dopo codField se configurato)
 +  * **orderListByGwAttributes**,​ boolean, default false, se abilitato adotta il generale sistema di ordinamento delle liste di Geoweb, configurato sugli xml dei singoli widget, tramite gli appositi tag (da 4.4.12)
 +  * **hideActivitiFilters**,​ boolean, default false, se abilitato nasconde dentro la UI di filtro della gwTaskList, i criteri di filtro fissi e legati alle proprietà di Activiti (taskName, assegnee, taskDocumentation,​ taskPriority,​ taskCreated,​ taskDueDate) (da 4.4.12)
 +  * **startProcessInstanceLabel**,​ string, se omesso viene usato un default (label tasto avanza del form preliminare all'​avvio del processo)
 +  * **allTaskForm_startProcessInstanceLabel**,​ string, se omesso viene usato un default (label tasto avanza del form preliminare all'​avvio del processo) **@Deprecated,​ funziona nel .BPMN, rimpiazzato da startProcessInstanceLabel nel configJSON** ​
 +  * **processEndedNotificationTitle**,​ string, se omesso viene usato un default (titolo del dialog che notifica la fine di tutte le attività di un utente su una data istanza di processo)
 +  * **processEndedNotificationMessage**,​ string, se omesso viene usato un default (messaggio del dialog che notifica la fine di tutte le attività di un utente su una data istanza di processo)
  
 ===**Note**=== ===**Note**===
Linea 881: Linea 865:
 Le proprietà delle serie allTaskForm_*,​ taskForm_* e processEndedNotification* possono essere impostate anche nel file .BPMN di processo. Le proprietà delle serie allTaskForm_*,​ taskForm_* e processEndedNotification* possono essere impostate anche nel file .BPMN di processo.
  
-Questo era il modo con cui venivano impostate prima dell'​aggiunta del metadato configJSON.+Questo era il modo con cui venivano impostate prima dell'​aggiunta del metadato ​**configJSON**.
  
 Tale modalità di configurazione,​ seppur supportata è da considerarsi **DEPRECATA**. Tale modalità di configurazione,​ seppur supportata è da considerarsi **DEPRECATA**.
Linea 901: Linea 885:
  
   * le variabili definite in Data Objects, saranno considerate da Activiti a tutti gli effetti variabili di processo, e saranno quindi accessibili e modificabili dal codice contenuto nei vari .groovy delle TaskService   * le variabili definite in Data Objects, saranno considerate da Activiti a tutti gli effetti variabili di processo, e saranno quindi accessibili e modificabili dal codice contenuto nei vari .groovy delle TaskService
 +
  
 =====Procedure===== =====Procedure=====
Linea 1239: Linea 1224:
 Esempio: Esempio:
  
-  <​leafItem name="​list_rpf"​ label="​Richieste in Fase RPF" image="​icon.png"​ type="gwStartProcessInstanceAction">+  <​leafItem name="​list_rpf"​ label="​Richieste in Fase RPF" image="​icon.png"​ type="gwStartProcessInstanceByMessageAction">
       <​parameter name="​message"​ value="​message"​ hideToClient="​false"></​parameter>​       <​parameter name="​message"​ value="​message"​ hideToClient="​false"></​parameter>​
       <​parameter name="​processVariables " value="​{var1:​ '​var1',​ var2: 2}" hideToClient="​false"></​parameter>​       <​parameter name="​processVariables " value="​{var1:​ '​var1',​ var2: 2}" hideToClient="​false"></​parameter>​
  • gwusermanual/interface/workflow.1625473277.txt.gz
  • Ultima modifica: 2021/07/05 10:21
  • da giorgio.scali