I modelli di flusso di lavoro sono costituiti da una serie di passaggi di vari tipi. A seconda del tipo, questi passaggi possono essere configurati ed estesi con parametri e script per fornire le funzionalità e il controllo necessari.
Questa sezione descrive i passaggi standard del flusso di lavoro.
Per i passaggi specifici dei moduli, vedi quanto segue:
Ogni componente del passaggio ha una Proprietà passaggio che consente di definire e modificare le proprietà richieste.
Per la maggior parte dei componenti del passaggio del flusso di lavoro, nella sezione Comune scheda della finestra di dialogo proprietà:
Titolo
Titolo del passaggio.
Descrizione
Descrizione del passaggio.
Fase flusso di lavoro
Un selettore a discesa per applicare una Fase al passaggio.
Timeout
Il periodo dopo il quale il passaggio "scade".
Puoi scegliere tra: Disattivato, Immediato, 1 ora, 6 ore, 12 ore, 24 ore.
Gestore timeout
Gestore che controlla il flusso di lavoro quando il passaggio scade. Ad esempio Auto Advancer
Avanzamento gestore
Seleziona questa opzione per far avanzare automaticamente il flusso di lavoro al passaggio successivo dopo l’esecuzione. Se non viene selezionato, lo script di implementazione deve gestire l’avanzamento del flusso di lavoro.
Le seguenti proprietà sono disponibili per molti componenti del passaggio del flusso di lavoro, nel Utente/Gruppo scheda della finestra di dialogo proprietà:
Notifica all'utente via e-mail
Utente/Gruppo
Il Divisione AND crea una suddivisione nel flusso di lavoro, dopo la quale entrambi i rami sono attivi. Puoi aggiungere i passaggi del flusso di lavoro a ogni ramo in base alle esigenze. Questo passaggio ti consente di introdurre più percorsi di elaborazione nel flusso di lavoro. Ad esempio, puoi consentire che determinati passaggi di revisione si verifichino in parallelo, risparmiando tempo.
Per configurare la suddivisione:
Modifica il Proprietà suddivisione E:
Aggiungi i passaggi del flusso di lavoro ai rami in base alle esigenze.
Un passaggio contenitore avvia un altro modello di flusso di lavoro che viene eseguito come flusso di lavoro figlio.
Questo contenitore può consentire di riutilizzare i modelli di flusso di lavoro per implementare sequenze di passaggi comuni. Ad esempio, un modello di flusso di lavoro di traduzione può essere utilizzato in più flussi di lavoro di modifica.
Per configurare il passaggio, modifica e utilizza le seguenti schede:
Contenitore
Il Vai al passaggio consente di specificare il passaggio successivo da eseguire nel modello di flusso di lavoro. È possibile specificare una definizione di regola, uno script esterno o uno script ECMA come espressione di indirizzamento per valutare il passaggio successivo per il modello di flusso di lavoro.
Il Vai al passaggio consente di implementare strutture di routing avanzate nei modelli di flusso di lavoro. Ad esempio, per implementare un ciclo, il Vai al passaggio può essere definito per eseguire un passaggio precedente nel flusso di lavoro, con l’espressione di indirizzamento che valuta una condizione di loop.
Per configurare il passaggio, modifica e utilizza le seguenti schede:
Processo
Passaggio di destinazione: seleziona la fase da eseguire dopo aver valutato la condizione per l’espressione di indirizzamento.
Espressione di indirizzamento: seleziona Definizione regola, Script esterno o script ECMA che determina se eseguire o meno Passaggio di destinazione.
La simulazione di un ciclo "for" richiede di mantenere un conteggio del numero di iterazioni del ciclo che si sono verificate:
Ad esempio, per implementare un flusso di lavoro che esegue un’azione su più nodi JCR, puoi utilizzare un contatore di loop come indice per i nodi. Per mantenere il conteggio, memorizza un integer
nella mappa dati dell’istanza del flusso di lavoro. Per incrementare il conteggio e confrontarlo con i criteri di uscita, utilizza lo script del Vai al passaggio.
function check(){
var count=0;
var keyname="loopcount"
try{
if (workflowData.getMetaDataMap().containsKey(keyname)){
log.info("goto script: found loopcount key");
count= parseInt(workflowData.getMetaDataMap().get(keyname))+1;
}
workflowData.getMetaDataMap().put(keyname,count);
}catch(err) {
log.info(err.message);
return false;
}
if (parseInt(count) <7){
return true;
} else {
return false;
}
}
Potete anche simulare un ciclo for utilizzando Definizione regola (Rule Definition) come espressione di instradamento. Creare un count variabile del tipo di dati Long. Utilizzare Espressione come modalità di mappatura in Imposta variabile passaggio per impostare il valore del count variabile a count + 1 a ogni esecuzione del Imposta variabile passaggio.
In Vai al passaggio, utilizza Imposta variabile come Passaggio di destinazione e count < 5 come espressione di indirizzamento.
Il Imposta variabile viene eseguito ripetutamente, incrementando il valore di count variabile di 1 a ogni esecuzione fino a quando il valore raggiunge 5.
Il Suddivisione O crea una suddivisione nel flusso di lavoro, dopo la quale è attivo un solo ramo. Questo passaggio ti consente di introdurre nel flusso di lavoro i percorsi di elaborazione condizionale. Puoi aggiungere i passaggi del flusso di lavoro a ogni ramo in base alle esigenze.
Consulta O Dividi passaggio
Per configurare la suddivisione:
Modifica il Proprietà suddivisione O:
Comune
Rami (x)
Aggiungi i passaggi del flusso di lavoro ai rami in base alle esigenze.
A Passaggio partecipante consente di assegnare la proprietà di una particolare azione. Il flusso di lavoro procede solo quando l’utente ha riconosciuto manualmente il passaggio. Questo flusso di lavoro viene utilizzato quando si desidera che un utente lo utilizzi. Ad esempio, un passaggio di revisione.
Anche se non direttamente correlata, l’autorizzazione dell’utente deve essere considerata durante l’assegnazione di un’azione; l’utente deve avere accesso alla pagina che è il payload del flusso di lavoro.
Per configurare il passaggio, modifica e utilizza le seguenti schede:
L’iniziatore del flusso di lavoro viene sempre informato quando:
Alcune proprietà devono essere configurate per abilitare le notifiche e-mail. Puoi anche personalizzare il modello e-mail o aggiungere un modello e-mail per una nuova lingua. Per configurare le notifiche e-mail in AEM, consulta Configurazione delle notifiche e-mail.
Utilizza un Passaggio partecipante finestra di dialogo per raccogliere informazioni dall'utente a cui è assegnato l'elemento di lavoro. Questo passaggio è utile per raccogliere piccole quantità di dati da utilizzare successivamente nel flusso di lavoro.
Al termine del passaggio, il Completa elemento di lavoro contiene i campi definiti nella finestra di dialogo. I dati raccolti nei campi vengono memorizzati nei nodi del payload del flusso di lavoro. I passaggi successivi del flusso di lavoro possono quindi leggere il valore dall’archivio.
Per configurare il passaggio, specificare il gruppo o l'utente a cui assegnare l'elemento di lavoro e il percorso della finestra di dialogo.
Per configurare il passaggio, modifica e utilizza le seguenti schede:
Finestra di dialogo
Per creare una finestra di dialogo, è necessario creare la finestra di dialogo:
Puoi memorizzare i dati del widget nel payload del flusso di lavoro o nei metadati dell’elemento di lavoro. Il formato del name
proprietà del nodo del widget determina dove vengono memorizzati i dati.
Memorizza dati con il payload
Per memorizzare i dati del widget come proprietà del payload del flusso di lavoro, utilizzate il seguente formato per il valore della proprietà name del nodo del widget:
./jcr:content/nodename
I dati vengono memorizzati nel nodename
del nodo payload. Se il nodo non contiene tale proprietà, la proprietà viene creata.
Quando viene memorizzato con il payload, gli utilizzi successivi della finestra di dialogo con lo stesso payload sovrascrivono il valore della proprietà.
Memorizza dati con l’elemento di lavoro
Per memorizzare i dati del widget come proprietà dei metadati dell'elemento di lavoro, utilizzate il seguente formato per il valore della proprietà name:
nodename
I dati vengono memorizzati nel nodename
proprietà dell'elemento di lavoro metadata
. I dati vengono conservati se la finestra di dialogo viene successivamente utilizzata con lo stesso payload.
Struttura della finestra di dialogo
Le finestre di dialogo per i passaggi dei partecipanti alle finestre di dialogo sono simili alle finestre di dialogo create per la creazione dei componenti. Sono memorizzate in:
/apps/myapp/workflow/dialogs
Le finestre di dialogo per l’interfaccia utente standard touch hanno la seguente struttura di nodi:
newComponent (cq:Component)
|- cq:dialog (nt:unstructured)
|- content
|- layout
|- items
|- column
|- items
|- component0
|- component1
|- ...
Proprietà percorso finestra di dialogo
Il Passaggio partecipante finestra di dialogo ha Percorso finestra di dialogo proprietà (insieme alle proprietà di un Passaggio partecipante). Il valore della proprietà Percorso finestra di dialogo è il percorso del file dialog
della finestra di dialogo.
Ad esempio, la finestra di dialogo è contenuta in un componente denominato EmailWatch
memorizzato nel nodo:
/apps/myapp/workflows/dialogs
Per l’interfaccia touch, per l’interfaccia utente viene utilizzato il seguente valore Percorso finestra di dialogo proprietà:
/apps/myapp/workflow/dialogs/EmailWatch/cq:dialog
Esempio di definizione della finestra di dialogo
Il seguente frammento di codice XML rappresenta una finestra di dialogo in cui è memorizzato un String
valore in watchEmail
del contenuto del payload. Il nodo titolo rappresenta CampoTesto componente:
jcr:primaryType="nt:unstructured"
jcr:title="Watcher Email Address Dialog"
sling:resourceType="cq/gui/components/authoring/dialog">
<content jcr:primaryType="nt:unstructured"
sling:resourceType="granite/ui/components/foundation/container">
<layout jcr:primaryType="nt:unstructured"
margin="false"
sling:resourceType="granite/ui/components/foundation/layouts/fixedcolumns"
/>
<items jcr:primaryType="nt:unstructured">
<column jcr:primaryType="nt:unstructured"
sling:resourceType="granite/ui/components/foundation/container">
<items jcr:primaryType="nt:unstructured">
<title jcr:primaryType="nt:unstructured"
fieldLabel="Notification Email Address"
name="./jcr:content/watchEmails"
sling:resourceType="granite/ui/components/foundation/form/textfield"
/>
</items>
</column>
</items>
</content>
</cq:dialog>
Nell’interfaccia touch, questo esempio genera una finestra di dialogo come la seguente:
Il Passaggio partecipante dinamico il componente è simile a Passaggio partecipante con la differenza che il partecipante viene selezionato automaticamente in fase di runtime.
Per configurare il passaggio, seleziona una Selettore partecipanti che identifica il partecipante a cui assegnare l’elemento di lavoro, insieme a una finestra di dialogo.
Per configurare il passaggio, modifica e utilizza le seguenti schede:
Selettore partecipanti
Finestra di dialogo
Puoi creare il selettore partecipanti. Pertanto, puoi utilizzare qualsiasi logica o criterio di selezione. Ad esempio, il selettore partecipanti può selezionare l'utente (all'interno di un gruppo) con il minor numero di elementi di lavoro. Puoi creare un numero qualsiasi di selettori partecipanti da utilizzare con diverse istanze del Passaggio partecipante dinamico nei modelli di flusso di lavoro.
Crea un servizio OSGi o un ECMAScript che seleziona un utente a cui assegnare l’elemento di lavoro.
ECMAscript
Gli script devono includere una funzione denominata getParticipant che restituisce un ID utente come String
valore. Memorizza gli script personalizzati, ad esempio, nel /apps/myapp/workflow/scripts
cartella o una sottocartella.
Uno script di esempio è incluso in un’istanza AEM standard:
/libs/workflow/scripts/initiator-participant-chooser.ecma
Non modificare nulla nella /libs
percorso.
Il motivo è che il contenuto di /libs
viene sovrascritto al successivo aggiornamento dell’istanza (e può essere sovrascritto quando si applica un hotfix o un feature pack).
Questo script seleziona l'iniziatore del flusso di lavoro come partecipante:
function getParticipant() {
return workItem.getWorkflow().getInitiator();
}
Il Selettore partecipante iniziatore flusso di lavoro il componente estende Passaggio partecipante dinamico e utilizza questo script come implementazione del passaggio.
Servizio OSGi
I servizi devono implementare com.day.cq.workflow.exec.ParticipantStepChooser di rete. L’interfaccia definisce i seguenti membri:
SERVICE_PROPERTY_LABEL
campo: utilizzare questo campo per specificare il nome del selettore partecipanti. Il nome viene visualizzato in un elenco di selettori partecipanti disponibili nel Passaggio partecipante dinamico proprietà.
getParticipant
metodo: restituisce l'ID entità risolto dinamicamente come String
valore.
Il getParticipant
Il metodo restituisce l'ID entità risolto dinamicamente. Può essere un ID gruppo o un ID utente.
Tuttavia, un ID gruppo può essere utilizzato solo per Passaggio partecipante, quando viene restituito un elenco di partecipanti. Per un Passaggio partecipante dinamico, viene restituito un elenco vuoto che non può essere utilizzato per la delega.
Per rendere la tua implementazione disponibile per Passaggio partecipante dinamico componenti, aggiungi la classe Java™ a un bundle OSGi che esporta il servizio e distribuisci il bundle al server AEM.
Selettore casuale partecipanti è un servizio di esempio che seleziona un utente casuale ( com.day.cq.workflow.impl.process.RandomParticipantChooser
). Il Selezione casuale partecipanti Un esempio di componente in un passaggio estende Passaggio partecipante dinamico e utilizza questo servizio come implementazione del passaggio.
La classe Java™ seguente implementa ParticipantStepChooser
di rete. La classe restituisce il nome del partecipante che ha avviato il workflow. Il codice utilizza la stessa logica dello script di esempio (initiator-participant-chooser.ecma
) utilizza.
Il @Property
annotation imposta il valore di SERVICE_PROPERTY_LABEL
campo a Workflow Initiator Participant Chooser
.
package com.adobe.example;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import org.osgi.framework.Constants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.adobe.granite.workflow.WorkflowException;
import com.adobe.granite.workflow.WorkflowSession;
import com.adobe.granite.workflow.exec.ParticipantStepChooser;
import com.adobe.granite.workflow.exec.WorkItem;
import com.adobe.granite.workflow.metadata.MetaDataMap;
@Component
@Service
@Properties({
@Property(name = Constants.SERVICE_DESCRIPTION, value = "An example implementation of a dynamic participant chooser."),
@Property(name = ParticipantStepChooser.SERVICE_PROPERTY_LABEL, value = "Workflow Initiator Participant Chooser (service)") })
public class InitiatorParticipantChooser implements ParticipantStepChooser {
private Logger logger = LoggerFactory.getLogger(this.getClass());
public String getParticipant(WorkItem arg0, WorkflowSession arg1,
MetaDataMap arg2) throws WorkflowException {
String initiator = arg0.getWorkflow().getInitiator();
logger.info("Assigning Dynamic Participant Step work item to {}",initiator);
return initiator;
}
}
In Passaggio partecipante dinamico proprietà, la finestra di dialogo Selettore partecipanti l'elenco include l'elemento Workflow Initiator Participant Chooser (script)
, che rappresenta questo servizio.
All'avvio del modello di workflow, il log indica l'ID dell'utente che ha avviato il workflow e a cui è assegnato l'elemento di lavoro. In questo esempio, la proprietà admin
l'utente ha avviato il flusso di lavoro.
13.09.2015 15:48:53.037 *INFO* [10.176.129.223 [1347565733037] POST /etc/workflow/instances HTTP/1.1] com.adobe.example.InitiatorParticipantChooser Assigning Dynamic Participant Step work item to admin
Il Passaggio partecipante modulo visualizza un modulo all'apertura dell'elemento di lavoro. Quando l’utente compila e invia il modulo, i dati dei campi vengono memorizzati nei nodi del payload del flusso di lavoro.
Per configurare il passaggio, specificare il gruppo o l'utente a cui assegnare l'elemento di lavoro e il percorso del modulo.
Questa sezione tratta della Sezione Forms dei componenti di base per l’authoring delle pagine.
Per configurare il passaggio, modifica e utilizza le seguenti schede:
Modulo
Creare un modulo da utilizzare con un Passaggio partecipante modulo come normale. Tuttavia, i moduli per un passaggio Partecipante modulo devono avere le seguenti configurazioni:
Il Inizio modulo il componente deve avere Tipo di azione proprietà impostata su Edit Workflow Controlled Resource(s)
.
Il Inizio modulo il componente deve avere un valore per Form Identifier
proprietà.
I componenti del modulo devono avere Nome elemento impostata sul percorso del nodo in cui sono memorizzati i dati del campo. Il percorso deve individuare un nodo nel contenuto del payload del flusso di lavoro. Il valore utilizza il formato seguente:
./jcr:content/path_to_node
Il modulo deve includere Pulsante invio flusso di lavoro componente. Non puoi configurare alcuna proprietà del componente.
I requisiti del flusso di lavoro determinano la posizione in cui memorizzare i dati dei campi. Ad esempio, i dati dei campi possono essere utilizzati per configurare le proprietà del contenuto della pagina. Il seguente valore di un Nome elemento la proprietà memorizza i dati del campo come valore della proprietà redirectTarget
proprietà del jcr:content
nodo:
./jcr:content/redirectTarget
Nell'esempio seguente, i dati del campo vengono utilizzati come contenuto di un Testo componente nella pagina payload:
./jcr:content/par/text_3/text
Il primo esempio può essere utilizzato per qualsiasi pagina che cq:Page
rendering del componente. Il secondo esempio può essere utilizzato solo quando la pagina di payload include Testo componente con ID text_3
.
Il modulo può trovarsi in qualsiasi punto del repository, tuttavia gli utenti del flusso di lavoro devono essere autorizzati a leggerlo.
Il Selettore casuale partecipanti il passaggio è un selettore partecipanti che assegna l'elemento di lavoro generato a un utente selezionato in modo casuale da un elenco.
Per configurare il passaggio, modifica e utilizza le seguenti schede:
Argomenti
Il Selettore partecipante iniziatore flusso di lavoro il passaggio è un selettore partecipanti che assegna l'elemento di lavoro generato all'utente che ha avviato il flusso di lavoro. Non sono disponibili proprietà da configurare diverse da Comune proprietà.
Per configurare il passaggio, modifica utilizzando le seguenti schede:
A Passaggio processo esegue un ECMAScript o chiama un servizio OSGi per eseguire l’elaborazione automatica.
Per configurare il passaggio, modifica e utilizza le seguenti schede:
Processo
Processo: implementazione del processo da eseguire. Utilizza il menu a discesa per selezionare il servizio ECMAScript o OSGi. Per informazioni su:
Avanzamento gestore: seleziona questa opzione per far avanzare automaticamente il flusso di lavoro al passaggio successivo dopo l’esecuzione. Se non viene selezionato, lo script di implementazione deve gestire l’avanzamento del flusso di lavoro.
Argomenti: argomenti da passare al processo.
Il passaggio Imposta variabile consente di impostare il valore di una variabile e definire l'ordine in cui i valori vengono impostati. La variabile viene impostata nell'ordine in cui le mappature delle variabili sono elencate nel passaggio Imposta variabile.
Per configurare il passaggio, modifica e utilizza le seguenti schede:
Mappatura
Seleziona variabile: Utilizza questa opzione per selezionare una variabile per impostarne il valore.
Seleziona modalità di mappatura: Per impostare il valore della variabile, seleziona una modalità di mappatura. A seconda del tipo di dati della variabile, puoi utilizzare le seguenti opzioni per impostare il valore di una variabile:
Specifica valore: Per eseguire il mapping alla variabile, specifica un valore. Il valore specificato in questo campo dipende dalla modalità di mappatura.
Aggiungi mappatura: Utilizza questa opzione per aggiungere altre mappature per impostare un valore per la variabile.