I modelli di flusso di lavoro sono composti 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 la funzionalità e il controllo necessari.
Questa sezione descrive i passaggi standard del flusso di lavoro.
Per i passaggi specifici del modulo consulta anche:
Ogni componente passo ha un Proprietà passaggio che consente di definire e modificare le proprietà richieste.
Per la maggior parte dei componenti dei passaggi del flusso di lavoro è disponibile una combinazione delle seguenti proprietà, nella sezione Comune scheda della finestra di dialogo delle proprietà:
Titolo
Titolo del passaggio.
Descrizione
Una descrizione del passaggio.
Stadio flusso di lavoro
Un selettore a discesa per applicare un Stage al passaggio.
Timeout
Il periodo dopo il quale il passaggio verrà "interrotto".
Puoi scegliere tra: Disattivato, Immediato, 1 h, 6 h, 12 ore, 24 ore.
Gestore timeout
Il gestore che controllerà il flusso di lavoro quando il passaggio scade; ad esempio:
Auto Advancer
Avanzamento gestore
Seleziona questa opzione per avanzare automaticamente il flusso di lavoro al passaggio successivo dopo l’esecuzione. Se non è selezionato, lo script di implementazione deve gestire l’avanzamento del flusso di lavoro.
Le seguenti proprietà sono disponibili per molti componenti dei passaggi del flusso di lavoro, nella Utente/gruppo scheda della finestra di dialogo delle proprietà:
Notifica all'utente via e-mail
Utente/Gruppo
La Divisione AND crea una suddivisione nel flusso di lavoro, dopodiché entrambi i rami saranno attivi. Puoi aggiungere i passaggi del flusso di lavoro a ogni ramo in base alle tue 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 le Proprietà di divisione AND:
Aggiungi i passaggi del flusso di lavoro ai rami come necessario.
Un passaggio contenitore avvia un altro modello di flusso di lavoro che viene eseguito come flusso di lavoro secondario.
Questo contenitore consente 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
La Passaggio Vai a 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.
La Passaggio Vai a consente di implementare strutture di routing avanzate nei modelli di flusso di lavoro. Ad esempio, per implementare un ciclo, la Passaggio Vai a può essere definito per eseguire un passaggio precedente nel flusso di lavoro, con l’espressione di indirizzamento che valuta una condizione di ciclo.
Per configurare il passaggio , modifica e utilizza le seguenti schede:
Processo
Passaggio di Target: Selezionare il passaggio da eseguire dopo aver valutato la condizione per l'espressione di indirizzamento.
Espressione di routing: Selezionare Definizione regola, Script esterno o script ECMA che determina se eseguire o meno la Passaggio di Target.
Per simulare un ciclo for è necessario 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, memorizzare un integer
nella mappa dati dell’istanza del flusso di lavoro. Utilizza lo script del Passaggio Vai a per incrementare il conteggio e confrontare il conteggio con i criteri di uscita.
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;
}
}
È inoltre possibile simulare un ciclo for utilizzando Definizione regola come espressione di indirizzamento. Crea un count variable di tipo dati Long. Utilizzo Espressione come modalità di mappatura nel Imposta variabile passaggio per impostare il valore del count variabile a count + 1 per ogni esecuzione Imposta variabile passo.
In Passaggio Vai a, utilizza Imposta variabile come Passaggio di Target e count < 5 come espressione di indirizzamento.
La Imposta variabile il passaggio esegue ripetutamente l'incremento del valore di count variabile di 1 su ogni esecuzione fino a raggiungere il valore 5.
La Divisione OR crea una suddivisione nel flusso di lavoro, dopodiché sarà attivo un solo ramo. Questo passaggio ti consente di introdurre i percorsi di elaborazione condizionale nel flusso di lavoro. Puoi aggiungere i passaggi del flusso di lavoro a ogni ramo in base alle tue esigenze.
Per ulteriori informazioni sulla creazione di una divisione OR, consulta: https://helpx.adobe.com/experience-manager/using/aem64_workflow_servlet.html
Per configurare la suddivisione:
Modifica le Proprietà di divisione OR:
Comune
Filiali (x)
Aggiungi i passaggi del flusso di lavoro ai rami come necessario.
A Passaggio partecipante consente di assegnare la proprietà per una particolare azione. Il flusso di lavoro procederà solo quando l’utente ha riconosciuto manualmente il passaggio. Viene utilizzato quando desideri che un utente esegua un’azione sul flusso di lavoro; ad esempio, un passaggio di revisione.
Sebbene non sia direttamente correlata, l’autorizzazione utente deve essere presa in considerazione al momento dell’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:
Per abilitare le notifiche e-mail, è necessario configurare alcune proprietà. Puoi anche personalizzare il modello e-mail o aggiungere un modello e-mail per una nuova lingua. Vedi Configurazione della notifica e-mail per configurare le notifiche e-mail in AEM.
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 utilizzate più avanti nel flusso di lavoro.
Al completamento del passaggio, la Elemento di lavoro completo 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 dal repository.
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 dei widget nel payload del flusso di lavoro o nei metadati dell’elemento di lavoro. Il formato del name
La proprietà del nodo del widget determina la posizione in cui vengono memorizzati i dati.
Archiviare i dati con il payload
Per memorizzare i dati dei widget come proprietà del payload del flusso di lavoro, utilizza il formato seguente per il valore della proprietà name del nodo del widget:
./jcr:content/nodename
I dati vengono memorizzati nel nodename
proprietà del nodo payload. Se il nodo non contiene tale proprietà, viene creata la proprietà .
Quando viene memorizzato con il payload, gli usi successivi della finestra di dialogo con lo stesso payload sovrascrivono il valore della proprietà.
Archiviare i dati con l’elemento di lavoro
Per memorizzare i dati dei widget come proprietà dei metadati dell'elemento di lavoro, utilizza il formato seguente 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 finestra di dialogo
Le finestre di dialogo per i passaggi partecipanti alla finestra di dialogo sono simili alle finestre di dialogo create per creare i componenti. Sono memorizzati in:
/apps/myapp/workflow/dialogs
Le finestre di dialogo per l’interfaccia touch standard hanno la seguente struttura di nodi:
newComponent (cq:Component)
|- cq:dialog (nt:unstructured)
|- content
|- layout
|- items
|- column
|- items
|- component0
|- component1
|- ...
Per ulteriori informazioni consulta Creazione e configurazione di una finestra di dialogo.
Proprietà Percorso finestra di dialogo
La Passaggio partecipante finestra di dialogo ha Percorso finestra di dialogo (insieme alle proprietà di un Passaggio partecipante). Il valore del Percorso finestra di dialogo è il percorso della dialog
nodo 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 viene utilizzato il seguente valore per Percorso finestra di dialogo proprietà:
/apps/myapp/workflow/dialogs/EmailWatch/cq:dialog
Definizione finestra di dialogo di esempio
Il seguente frammento di codice XML rappresenta una finestra di dialogo che memorizza un String
nel watchEmail
nodo del contenuto del payload. Il nodo titolo rappresenta la 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>
Questo esempio, nel caso dell’interfaccia touch, darà luogo a una finestra di dialogo come:
La Passaggio partecipante dinamico è simile a Passaggio partecipante con la differenza che il partecipante viene selezionato automaticamente in fase di esecuzione.
Per configurare il passaggio , seleziona una Selettore partecipante 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
Si crea il selettore dei partecipanti. Pertanto, puoi utilizzare qualsiasi logica o criterio di selezione. Ad esempio, il selettore dei partecipanti può selezionare l'utente (all'interno di un gruppo) con il minor numero di elementi di lavoro. È possibile creare un numero qualsiasi di partecipanti che scelgono di utilizzare con diverse istanze del Passaggio partecipante dinamico nei modelli di flusso di lavoro.
Creare un servizio OSGi o un codice 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 in, ad esempio /apps/myapp/workflow/scripts
o una sottocartella.
Uno script di esempio è incluso in un'istanza AEM standard:
/libs/workflow/scripts/initiator-participant-chooser.ecma
You deve non modificare nulla nel /libs
percorso.
Questo perché il contenuto di /libs
viene sovrascritto la prossima volta che aggiorni l’istanza (e può essere sovrascritto quando applichi un hotfix o un feature pack).
Questo script seleziona l’iniziatore del flusso di lavoro come partecipante:
function getParticipant() {
return workItem.getWorkflow().getInitiator();
}
La Selettore partecipante iniziatore flusso di lavoro estensione del componente Passaggio partecipante dinamico e utilizza questo script come implementazione del passaggio.
Servizio OSGi
I servizi devono implementare com.day.cq.workflow.exec.ParticipantStepChooser interfaccia. L’interfaccia definisce i seguenti membri:
SERVICE_PROPERTY_LABEL
campo: Utilizzare questo campo per specificare il nome del selettore dei partecipanti. Il nome viene visualizzato in un elenco dei selettori di partecipanti disponibili nel Passaggio partecipante dinamico proprietà.
getParticipant
metodo: Restituisce l'ID principale risolto dinamicamente come String
valore.
La getParticipant
restituisce l'ID principale risolto dinamicamente. Può trattarsi di un ID gruppo o di un ID utente.
Tuttavia, un ID gruppo può essere utilizzato solo per un Passaggio partecipante, quando viene restituito un elenco di partecipanti. Per Passaggio partecipante dinamico viene restituito un elenco vuoto che non può essere utilizzato per la delega.
Per rendere la tua implementazione disponibile a Passaggio partecipante dinamico componenti, aggiungi la classe Java a un bundle OSGi che esporta il servizio e distribuisci il bundle sul server AEM.
Selettore casuale partecipante è un servizio di esempio che seleziona un utente casuale ( com.day.cq.workflow.impl.process.RandomParticipantChooser
). La Selezione casuale partecipante r Il campione di componenti step estende Passaggio partecipante dinamico e utilizza questo servizio come implementazione passo.
La seguente classe Java implementa il ParticipantStepChooser
interfaccia. La classe restituisce il nome del partecipante che ha avviato il flusso di lavoro. Il codice utilizza la stessa logica dello script di esempio (initiator-participant-chooser.ecma
) utilizza .
La @Property
l’annotazione imposta il valore della 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 finestra di dialogo delle proprietà Selettore partecipante include l'elemento Workflow Initiator Participant Chooser (script)
, che rappresenta questo servizio.
All’avvio del modello di flusso di lavoro, il registro indica l’ID dell’utente che ha avviato il flusso di lavoro e a cui è stato assegnato l’elemento di lavoro. In questo esempio, la 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
La Passaggio partecipante modulo presenta un modulo all’apertura dell’elemento di lavoro. Quando l’utente compila e invia il modulo, i dati del campo 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 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 normale. Tuttavia, i moduli per un Passaggio partecipante a un modulo devono avere le seguenti configurazioni:
La Inizio del modulo il componente deve avere Tipo di azione proprietà impostata su Edit Workflow Controlled Resource(s)
.
La Inizio del 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 un Pulsanti Invia flusso di lavoro componente. Non configuri proprietà del componente.
I requisiti del flusso di lavoro determinano dove 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 memorizza i dati del campo come valore del redirectTarget
proprietà jcr:content
nodo:
./jcr:content/redirectTarget
Nell’esempio seguente, i dati del campo vengono utilizzati come contenuto di un Testo nella pagina payload:
./jcr:content/par/text_3/text
Il primo esempio può essere utilizzato per qualsiasi pagina che cq:Page
rendering dei componenti. Il secondo esempio può essere utilizzato solo quando la pagina del payload include un Testo componente con ID di text_3
.
Il modulo può trovarsi in qualsiasi punto dell’archivio, tuttavia gli utenti del flusso di lavoro devono essere autorizzati a leggere il modulo.
La Selettore casuale partecipante step è un selettore dei 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
La Selettore partecipante iniziatore flusso di lavoro step è un selettore dei 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 al 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. Utilizzare il menu a discesa per selezionare il servizio ECMAScript o OSGi. Per informazioni su:
Avanzamento gestore: Seleziona questa opzione per avanzare automaticamente il flusso di lavoro al passaggio successivo dopo l’esecuzione. Se non è 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 di 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: Seleziona una modalità di mappatura per impostare il valore della variabile. A seconda del tipo di dati della variabile, è possibile utilizzare le seguenti opzioni per impostare il valore di una variabile:
Specifica valore: Specifica un valore da mappare alla variabile. 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 .