Arbetsflödesmodeller består av en serie steg av olika typer. Beroende på typ kan dessa steg konfigureras och utökas med parametrar och skript för att ge den funktionalitet och kontroll som du behöver.
I det här avsnittet beskrivs de vanliga arbetsflödesstegen.
För modulspecifika steg, se även:
Varje stegkomponent har en Stegegenskaper-dialogruta där du kan definiera och redigera nödvändiga egenskaper.
En kombination av följande egenskaper är tillgängliga för de flesta arbetsflödesstegkomponenter på fliken Allmänt i dialogrutan Egenskaper:
TitelStegets titel.
Beskrivning
En beskrivning av steget.
Arbetsflödesfas
En nedrullningsbar väljare som använder en scen på steget.
Timeout
Den period efter vilken steget"har gått ut".
Du kan välja mellan: Av, Omedelbar, 1h, 6h, 12h, 24h.
Timeout-hanterare
Den hanterare som ska styra arbetsflödet när steget går ut; till exempel:
Auto Advancer
Avancerad hanterare
Välj det här alternativet om du vill att arbetsflödet automatiskt ska gå vidare till nästa steg efter körningen. Om du inte väljer det här alternativet måste implementeringsskriptet hantera arbetsflödets utveckling.
Följande egenskaper är tillgängliga för många arbetsflödesstegkomponenter på fliken Användare/grupp i dialogrutan Egenskaper:
Meddela användare via e-post
Användare/grupp
Med AND Split skapas en delning i arbetsflödet, varefter båda grenarna blir aktiva. Du kan lägga till arbetsflödessteg i varje gren efter behov. I det här steget kan du införa flera bearbetningssökvägar i arbetsflödet. Du kan t.ex. tillåta att vissa granskningssteg utförs parallellt, vilket sparar tid.
Så här konfigurerar du delningen:
Redigera OCH Dela egenskaper:
Lägg till arbetsflödessteg i grenarna efter behov.
Ett behållarsteg startar en annan arbetsflödesmodell som körs som ett underordnat arbetsflöde.
Med den här behållaren kan du återanvända arbetsflödesmodeller för att implementera vanliga stegsekvenser. En arbetsflödesmodell för översättning kan till exempel användas i flera redigeringsarbetsflöden.
Om du vill konfigurera steget redigerar du och använder följande flikar:
Behållare
Med Gå till steg kan du ange nästa steg som ska köras i arbetsflödesmodellen. Du kan ange en regeldefinition, ett externt skript eller ett ECMA-skript som routningsuttryck för att utvärdera nästa steg för arbetsflödesmodellen.
Med Gå till steg kan du implementera avancerade routningsstrukturer i dina arbetsflödesmodeller. Om du till exempel vill implementera en slinga kan du definiera Gå till steg för att köra ett föregående steg i arbetsflödet, där routningsuttrycket utvärderar ett slingvillkor.
Om du vill konfigurera steget redigerar du och använder följande flikar:
Process
Målsteg: Välj det steg som ska köras när villkoret för routningsuttrycket har utvärderats.
Routningsuttryck: Välj Regeldefinition, Externt skript eller ett ECMA-skript som avgör om målsteget ska köras.
När du simulerar en for-slinga måste du behålla antalet upprepningar av slingor som har inträffat:
Om du till exempel vill implementera ett arbetsflöde som utför en åtgärd på flera JCR-noder kan du använda en loopräknare som index för noderna. Om du vill behålla antalet lagrar du ett integer
-värde i datamappningen för arbetsflödesinstansen. Använd skriptet för Gå till steg för att öka antalet samt jämföra antalet med avslutningskriterierna.
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;
}
}
Du kan också simulera en for-slinga med hjälp av Regeldefinition som routningsuttryck. Skapa en talvariabel av datatypen Long. Använd Uttryck som mappningsläge i steget Ange variabel för att ange värdet för variabeln count till count + 1 för varje körning av steget Ange variabel.
I Gå till steg använder du Ange variabel som målsteg och antal < 5 som routningsuttryck.
Steget Ange variabel körs upprepade gånger och värdet count variabel ökas med 1 för varje körning tills värdet når 5.
Med OR Split skapas en delning i arbetsflödet, varefter endast en gren är aktiv. I det här steget kan du lägga in sökvägar för villkorlig bearbetning i arbetsflödet. Du kan lägga till arbetsflödessteg i varje gren efter behov.
Mer information om hur du skapar en OR-delning finns i: https://helpx.adobe.com/experience-manager/using/aem64_workflow_servlet.html
Så här konfigurerar du delningen:
Redigera ELLER Dela egenskaper:
Vanliga
Förgreningar (x)
Lägg till arbetsflödessteg i grenarna efter behov.
Med ett deltagarsteg kan du tilldela ägarskap för en viss åtgärd. Arbetsflödet fortsätter bara när användaren har bekräftat steget manuellt. Detta används när du vill att någon ska vidta en åtgärd i arbetsflödet; till exempel ett granskningssteg.
Även om det inte är direkt relaterat måste användarauktorisering beaktas när en åtgärd tilldelas. användaren måste ha åtkomst till sidan som är arbetsflödets nyttolast.
Om du vill konfigurera steget redigerar du och använder följande flikar:
Arbetsflödesinitieraren meddelas alltid när:
Vissa egenskaper måste konfigureras för att e-postmeddelanden ska kunna aktiveras. Du kan också anpassa e-postmallen eller lägga till en e-postmall för ett nytt språk. Se Konfigurera e-postmeddelanden för att konfigurera e-postmeddelanden i AEM.
Använd ett dialogdeltagarsteg för att samla in information från användaren som är tilldelad arbetsposten. Det här steget är användbart när du vill samla in små mängder data som används senare i arbetsflödet.
När du är klar med steget innehåller dialogrutan Fullständigt arbetsobjekt de fält som du definierar i dialogrutan. De data som samlas in i fälten lagras i noder i arbetsflödets nyttolast. Efterföljande arbetsflödessteg kan sedan läsa värdet från databasen.
Om du vill konfigurera steget anger du vilken grupp eller användare som arbetsposten ska tilldelas till och sökvägen till dialogrutan.
Om du vill konfigurera steget redigerar du och använder följande flikar:
Dialog
Om du vill skapa en dialogruta måste du skapa den:
Du kan lagra widgetdata i arbetsflödets nyttolast eller i arbetsobjektets metadata. Formatet på egenskapen name
för widgetnoden avgör var data lagras.
Lagra data med nyttolasten
Om du vill lagra widgetdata som en egenskap för arbetsflödets nyttolast använder du följande format för värdet för namnegenskapen för widgetnoden:
./jcr:content/nodename
Data lagras i egenskapen nodename
för nyttolastnoden. Om noden inte innehåller den egenskapen skapas egenskapen.
När den lagras med nyttolasten skriver efterföljande användning av dialogrutan med samma nyttolast över egenskapens värde.
Lagra data med arbetsobjektet
Om du vill lagra widgetdata som en egenskap för arbetsobjektets metadata använder du följande format för värdet för egenskapen name:
nodename
Data lagras i egenskapen nodename
för arbetsobjektet metadata
. Data bevaras om dialogrutan sedan används med samma nyttolast.
Dialogrutans struktur
Dialogrutorna för Dialog Deltagare-steg liknar dialogrutor som du skapar för redigeringskomponenter. De lagras under:
/apps/myapp/workflow/dialogs
Dialogrutor för det pekaktiverade standardgränssnittet har följande nodstruktur:
newComponent (cq:Component)
|- cq:dialog (nt:unstructured)
|- content
|- layout
|- items
|- column
|- items
|- component0
|- component1
|- ...
Mer information finns i Skapa och konfigurera en dialogruta.
Dialogrutans sökvägsegenskap
Dialogdeltagarsteget har egenskapen Dialogsökväg (tillsammans med egenskaperna för ett deltagarsteg). Värdet för egenskapen Dialogsökväg är sökvägen till noden dialog
i dialogrutan.
Dialogrutan finns till exempel i en komponent med namnet EmailWatch
som lagras i noden:
/apps/myapp/workflows/dialogs
För det beröringsaktiverade användargränssnittet används följande värde för egenskapen Dialog Path:
/apps/myapp/workflow/dialogs/EmailWatch/cq:dialog
Exempeldialogrutedefinition
Följande XML-kodfragment representerar en dialogruta som lagrar ett String
-värde i watchEmail
-noden för nyttolastinnehållet. Titelnoden representerar komponenten TextField:
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>
Det här exemplet kommer, när det gäller det beröringskänsliga användargränssnittet, att resultera i en dialogruta som:
Komponenten Dynamiskt deltagarsteg liknar Deltagarsteg med skillnaden att deltagaren väljs automatiskt vid körning.
Om du vill konfigurera steget väljer du en deltagarväljare som identifierar deltagaren som arbetsposten ska tilldelas till, tillsammans med en dialogruta.
Om du vill konfigurera steget redigerar du och använder följande flikar:
Väljare för deltagare
Dialog
Du skapar deltagarväljaren. Därför kan du använda valfri urvalslogik eller valfria villkor. Din deltagarväljare kan t.ex. välja den användare (i en grupp) som har minst arbetsobjekt. Du kan skapa valfritt antal deltagare som du kan använda med olika instanser av komponenten Dynamic Participant Step i arbetsflödesmodellerna.
Skapa en OSGi-tjänst eller ett ECMAScript-skript som väljer en användare att tilldela arbetsposten till.
ECMAscript
Skript måste innehålla en funktion med namnet getParticipant som returnerar ett användar-ID som String
-värde. Lagra dina egna skript i till exempel mappen /apps/myapp/workflow/scripts
eller en undermapp.
Ett exempelskript ingår i en AEM standardinstans:
/libs/workflow/scripts/initiator-participant-chooser.ecma
Du får inte ändra något i /libs
-sökvägen.
Detta beror på att innehållet i /libs
skrivs över nästa gång du uppgraderar din instans (och kan skrivas över när du använder en snabbkorrigering eller ett funktionspaket).
Det här skriptet väljer arbetsflödesinitieraren som deltagare:
function getParticipant() {
return workItem.getWorkflow().getInitiator();
}
Deltagarväljaren för arbetsflödesinitieraren utökar steget för den dynamiska deltagaren och använder det här skriptet som stegimplementering.
OSGi-tjänst
Tjänsterna måste implementera gränssnittet com.day.cq.workflow.exec.ParticipantStepChooser. Gränssnittet definierar följande medlemmar:
SERVICE_PROPERTY_LABEL
fält: Använd det här fältet för att ange namnet på deltagarväljaren. Namnet visas i en lista över tillgängliga deltagarval i egenskaperna Dynamiskt deltagarsteg.
getParticipant
metod: Returnerar det dynamiskt lösta huvud-ID:t som ett String
värde.
Metoden getParticipant
returnerar det dynamiskt matchade huvud-ID:t. Detta kan vara ett grupp-ID eller användar-ID.
Ett grupp-ID kan dock bara användas för ett deltagarsteg när en lista över deltagare returneras. För ett dynamiskt deltagarsteg returneras en tom lista som inte kan användas för delegering.
Om du vill göra implementeringen tillgänglig för komponenter för dynamisk deltagare, steg, lägger du till din Java-klass i ett OSGi-paket som exporterar tjänsten och distribuerar paketet till AEM.
Random Participant Chooserär en exempeltjänst som väljer en slumpmässig användare ( com.day.cq.workflow.impl.process.RandomParticipantChooser
). Stickprovet Välj slumpmässig deltagare r för stegkomponenten utökar steget för den dynamiska deltagaren och använder den här tjänsten som stegimplementering.
Följande Java-klass implementerar gränssnittet ParticipantStepChooser
. Klassen returnerar namnet på deltagaren som initierade arbetsflödet. Koden använder samma logik som exempelskriptet (initiator-participant-chooser.ecma
) använder.
@Property
-anteckningen ställer in värdet för fältet SERVICE_PROPERTY_LABEL
till 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;
}
}
I dialogrutan Dynamiskt deltagarsteg-egenskaper innehåller listan Deltagarväljare objektet Workflow Initiator Participant Chooser (script)
, som representerar den här tjänsten.
När arbetsflödesmodellen startas anger loggen ID:t för användaren som initierade arbetsflödet och vem som tilldelats arbetsposten. I det här exemplet startade admin
-användaren arbetsflödet.
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
Formulärdeltagarsteget visar ett formulär när arbetsobjektet öppnas. När användaren fyller i och skickar formuläret lagras fältdata i noderna i arbetsflödets nyttolast.
Om du vill konfigurera steget anger du vilken grupp eller användare som arbetsposten ska tilldelas till och sökvägen till formuläret.
I det här avsnittet behandlas Forms-delen av Foundation Components för sidredigering.
Om du vill konfigurera steget redigerar du och använder följande flikar:
Formulär
Skapa ett formulär som ska användas med ett steg för formulärdeltagare som vanligt. Formulär för ett steg för formulärdeltagare måste dock ha följande konfigurationer:
Start av formulär-komponenten måste ha egenskapen Åtgärdstyp inställd på Edit Workflow Controlled Resource(s)
.
Komponenten Start av formulär måste ha ett värde för egenskapen Form Identifier
.
Formulärkomponenterna måste ha egenskapen Elementnamn inställd på sökvägen till noden där fältdata lagras. Sökvägen måste hitta en nod i arbetsflödets nyttolastinnehåll. Värdet har följande format:
./jcr:content/path_to_node
Formuläret måste innehålla en Skicka-knapp(ar) för arbetsflöde-komponent. Du konfigurerar inga egenskaper för komponenten.
Arbetsflödets krav avgör var fältdata ska lagras. Fältdata kan till exempel användas för att konfigurera egenskaper för sidinnehåll. Följande värde för egenskapen Elementnamn lagrar fältdata som värdet för egenskapen redirectTarget
för noden jcr:content
:
./jcr:content/redirectTarget
I följande exempel används fältdata som innehåll i en Text-komponent på nyttolastsidan:
./jcr:content/par/text_3/text
Det första exemplet kan användas för alla sidor som återges av komponenten cq:Page
. Det andra exemplet kan bara användas när nyttolastsidan innehåller en Text-komponent som har ID text_3
.
Formuläret kan finnas var som helst i databasen, men arbetsflödesanvändare måste ha behörighet att läsa formuläret.
Steget Slumpmässig deltagarväljare är en deltagarväljare som tilldelar det genererade arbetsobjektet till en användare som väljs slumpmässigt från en lista.
Om du vill konfigurera steget redigerar du och använder följande flikar:
Argument
Väljaren för deltagare i arbetsflödesinitieraren är en deltagarväljare som tilldelar det genererade arbetsobjektet till användaren som startade arbetsflödet. Det finns inga andra egenskaper att konfigurera än egenskaperna Common.
Om du vill konfigurera steget redigerar du på följande flikar:
Ett processteg kör ett ECMAScript eller anropar en OSGi-tjänst för att utföra automatisk bearbetning.
Om du vill konfigurera steget redigerar du och använder följande flikar:
Process
Process: Processimplementeringen som ska köras. Använd listrutan för att välja ECMAScript- eller OSGi-tjänsten. Mer information om:
Handler Advance: Välj det här alternativet om du vill att arbetsflödet automatiskt ska gå vidare till nästa steg efter körningen. Om du inte väljer det här alternativet måste implementeringsskriptet hantera arbetsflödets utveckling.
Argument: Argument som ska skickas till processen.
Med steget Ange variabel kan du ange ett värde för en variabel och definiera i vilken ordning värdena ska anges. Variabeln ställs in i den ordning som variabelmappningarna visas i steget Ange variabel.
Om du vill konfigurera steget redigerar du och använder följande flikar:
Mappning
Välj Variabel: Använd det här alternativet om du vill välja en variabel för att ange dess värde.
Välj Mappningsläge: Välj ett mappningsläge för att ange värdet för variabeln. Beroende på variabelns datatyp kan du använda följande alternativ för att ange värdet för en variabel:
Ange värde: Ange ett värde som ska kopplas till variabeln. Vilket värde du anger i det här fältet beror på mappningsläget.
Lägg till mappning: Använd det här alternativet om du vill lägga till fler mappningar för att ange ett värde för variabeln.