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öljande modulspecifika steg finns:
Varje stegkomponent har en Stegegenskaper som gör att du kan definiera och redigera de egenskaper som krävs.
En kombination av följande egenskaper är tillgängliga för de flesta arbetsflödesstegkomponenter på Vanliga i egenskapsdialogrutan:
Titel
Stegets titel.
Beskrivning
En beskrivning av steget.
Arbetsflödesfas
En nedrullningsbar väljare för att använda en Scen till steget.
Timeout
Den period efter vilken steget"timeout" inträffar.
Du kan välja mellan: Av, Omedelbar, 1h, 6 tim, 12h, 24h.
Timeout-hanterare
Hanteraren som styr arbetsflödet när steget avbryts. 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å Användare/grupp i egenskapsdialogrutan:
Meddela användare via e-post
Användare/grupp
The OCH dela skapar en delning i arbetsflödet, efter vilken båda grenarna är aktiva. Du kan lägga till arbetsflödessteg i varje gren efter behov. I det här steget kan du infoga flera bearbetningssökvägar i arbetsflödet. Du kan till exempel 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
The Gå till steg I 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.
The Gå till steg I kan du implementera avancerade routningsstrukturer i dina arbetsflödesmodeller. Om du till exempel vill implementera en slinga Gå till steg kan definieras 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 körningen av Målsteg.
Simulering av en for-slinga kräver att du håller reda på 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. Spara ett integer
värdet i datamappningen för arbetsflödesinstansen. Om du vill öka antalet och jämföra antalet med avslutningskriterierna använder du skriptet i Gå till steg.
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 antal variabel av datatypen Long. Använd Uttryck som mappningsläget i Ange variabel steg för att ange värdet för antal variabel till antal + 1 vid varje genomförande av Ange variabel steg.
I Gå till steg, använda Ange variabel som Målsteg och antal < 5 som routningsuttryck.
The Ange variabel körs upprepade gånger och värdet för antal variabel med 1 för varje körning tills värdet når 5.
The ELLER Dela skapar 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.
Så här konfigurerar du delningen:
Redigera ELLER Dela egenskaper:
Vanliga
Förgreningar (x)
Lägg till arbetsflödessteg i grenarna efter behov.
A Deltagarsteg I kan du tilldela ägarskap för en viss åtgärd. Arbetsflödet fortsätter bara när användaren har bekräftat steget manuellt. Det här arbetsflödet används när du vill att någon ska arbeta med arbetsflödet. 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. Information om hur du konfigurerar e-postmeddelanden i AEM finns i Konfigurerar e-postmeddelande.
Använd en Steg för dialogdeltagare för att samla in information från den användare som har tilldelats arbetsuppgiften. 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 Slutför arbetsuppgift -dialogrutan innehåller 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å name
widgetnodens egenskap 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 nodename
nyttolastnodens egenskap. 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 nodename
arbetsuppgiftens egenskap metadata
. Data bevaras om dialogrutan senare 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
|- ...
Dialogrutans sökvägsegenskap
The Steg för dialogdeltagare har Dialogrutesökväg egenskap (tillsammans med egenskaperna för en Deltagarsteg). Värdet för Dialogrutesökväg egenskapen är sökvägen till dialog
noden 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 Dialogrutesökväg egenskap:
/apps/myapp/workflow/dialogs/EmailWatch/cq:dialog
Exempeldialogrutedefinition
Följande XML-kodfragment representerar en dialogruta som lagrar en String
värdet i watchEmail
Nod för nyttolastinnehållet. Titelnoden representerar TextField komponent:
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>
I det beröringsaktiverade användargränssnittet resulterar det här exemplet i en dialogruta som följande:
The Dynamiskt deltagarsteg -komponenten liknar Deltagarsteg med skillnaden att deltagaren väljs automatiskt vid körning.
Om du vill konfigurera steget väljer du en Väljare för deltagare 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 deltagaralternativ som du kan använda med olika instanser av Dynamiskt deltagarsteg i dina arbetsflödesmodeller.
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 egna skript i /apps/myapp/workflow/scripts
eller en undermapp.
Ett exempelskript ingår i en AEM standardinstans:
/libs/workflow/scripts/initiator-participant-chooser.ecma
Ändra ingenting i dialogrutan /libs
bana.
Orsaken är 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();
}
The Väljare för deltagare i arbetsflödesinitieraren -komponenten utökar Dynamiskt deltagarsteg och använder det här skriptet som stegimplementering.
OSGi-tjänst
Tjänsterna måste implementera com.day.cq.workflow.exec.ParticipantStepChooser gränssnitt. 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 med tillgängliga deltagarval i dialogrutan Dynamiskt deltagarsteg egenskaper.
getParticipant
metod: Returnerar det dynamiskt lösta huvud-ID:t som en String
värde.
The getParticipant
returnerar det dynamiskt lösta huvud-ID:t. Detta ID kan antingen vara ett grupp-ID eller ett användar-ID.
Ett grupp-ID kan dock bara användas för Deltagarsteg, när en lista över deltagare returneras. För Dynamiskt deltagarsteg, returneras en tom lista som inte kan användas för delegering.
Gör implementeringen tillgänglig för Dynamiskt deltagarsteg lägger du till Java™-klassen i ett OSGi-paket som exporterar tjänsten och distribuerar paketet till den AEM servern.
Slumpmässig deltagarväljare är en exempeltjänst som väljer en slumpmässig användare ( com.day.cq.workflow.impl.process.RandomParticipantChooser
). The Välj slumpmässig deltagare r step component sample extends the Dynamiskt deltagarsteg och använder den här tjänsten som stegimplementering.
Följande Java™-klass implementerar ParticipantStepChooser
gränssnitt. Klassen returnerar namnet på deltagaren som initierade arbetsflödet. Koden använder samma logik som exempelskriptet (initiator-participant-chooser.ecma
).
The @Property
anteckningen anger värdet för SERVICE_PROPERTY_LABEL
fält 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 Dynamiskt deltagarsteg egenskapsdialogrutan, Väljare för deltagare listan innehåller 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 admin
användaren startade 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
The Steg för formulärdeltagare visar ett formulär när arbetsuppgiften ö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.
Det här avsnittet handlar om 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 en Steg för formulärdeltagare som vanligt. Formulär för ett steg för formulärdeltagare måste dock ha följande konfigurationer:
The Formulärets början måste ha Åtgärdstyp egenskap inställd på Edit Workflow Controlled Resource(s)
.
The Formulärets början måste ha ett värde för Form Identifier
-egenskap.
Formulärkomponenterna måste ha Elementnamn egenskapen är angiven till sökvägen för 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 för arbetsflöde -komponenten. 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 en Elementnamn egenskapen lagrar fältdata som värdet för redirectTarget
egenskapen för jcr:content
nod:
./jcr:content/redirectTarget
I följande exempel används fältdata som innehåll i en Text på nyttolastsidan:
./jcr:content/par/text_3/text
Det första exemplet kan användas för alla sidor som cq:Page
komponentåtergivning. Det andra exemplet kan bara användas när nyttolastsidan innehåller en Text -komponent som har ett ID för 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.
The Slumpmässig deltagarväljare är en deltagarväljare som tilldelar den genererade arbetsposten 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
The Väljare för deltagare i arbetsflödesinitieraren är en deltagarväljare som tilldelar den genererade arbetsposten till användaren som startade arbetsflödet. Det finns inga andra egenskaper att konfigurera än Vanliga egenskaper.
Om du vill konfigurera steget redigerar du på följande flikar:
A Processsteg 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:
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.
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 variabelns värde. Beroende på variabelns datatyp kan du använda följande alternativ för att ange värdet för en variabel:
Ange värde: Om du vill mappa till variabeln anger du ett värde. 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.