När anpassa och utöka dina arbetsflöden du kan komma åt arbetsflödesobjekt:
Arbetsflödets Java API består av com.adobe.granite.workflow
och flera delpaket. Den viktigaste medlemmen i API:t är com.adobe.granite.workflow.WorkflowSession
klassen. The WorkflowSession
-klassen ger åtkomst till arbetsflödesobjekt för både designtid och körning:
Klassen innehåller också flera metoder för att hantera arbetsflödets livscykler.
Följande tabell innehåller länkar till referensdokumentationen för flera viktiga Java-objekt som kan användas när du interagerar programmatiskt med arbetsflöden. Exemplen som följer visar hur du hämtar och använder klassobjekten i koden.
Funktioner | Objekt |
---|---|
Åtkomst till ett arbetsflöde | WorkflowSession |
Köra och fråga en arbetsflödesinstans | Workflow WorkItem WorkflowData |
Hantera en arbetsflödesmodell | WorkflowModel WorkflowNode WorkflowTransition |
Information för en nod som finns i arbetsflödet (eller inte) | WorkflowStatus |
Enligt beskrivning i Hitta skriptet, AEM (via Apache Sling) tillhandahåller en ECMA-skriptmotor som kör ECMA-skript på serversidan. The org.apache.sling.scripting.core.ScriptHelper
klassen är omedelbart tillgänglig för dina skript som sling
variabel.
The ScriptHelper
klassen ger åtkomst till SlingHttpServletRequest
som du kan använda för att till slut få WorkflowSession
object; till exempel:
var wfsession = sling.getRequest().getResource().getResourceResolver().adaptTo(Packages.com.adobe.granite.workflow.WorkflowSession);
Arbetsflödeskonsolen använder REST API i stor utsträckning, så den här sidan beskriver REST API för arbetsflöden.
Med kommandoradsverktyget curl kan du använda arbetsflödets REST API för att komma åt arbetsflödesobjekt och hantera instanslivscykler. Exemplen på hela den här sidan visar hur REST API används via verktyget för rullande kommandorad.
Följande åtgärder stöds med REST API:
Genom att använda Firebug, ett Firefox-tillägg för webbutveckling, är det möjligt att följa HTTP-trafiken när konsolen används. Du kan till exempel kontrollera parametrarna och värdena som skickas till AEM med en POST
begäran.
På den här sidan antas att AEM körs på localhost vid port 4502
och att installationssammanhanget är /
" (root). Om det inte är fallet med din installation måste de URI:er som HTTP-begäran gäller anpassas därefter.
Återgivning stöds för GET
begäranden är JSON-återgivningen. URL:er för GET
bör ha .json
tillägg, till exempel:
http://localhost:4502/etc/workflow.json
Följande metoder för HTTP-begäran gäller:
http://localhost:4502/etc/workflow/instances
HTTP-begärandemetod | Åtgärder |
GET |
Visar tillgängliga arbetsflödesinstanser. |
POST |
Skapar en ny arbetsflödesinstans. Parametrarna är: |
Följande metoder för HTTP-begäran gäller:
http://localhost:4502/etc/workflow/instances.{state}
HTTP-begärandemetod | Åtgärder |
---|---|
GET |
Visar tillgängliga arbetsflödesinstanser och deras lägen ( RUNNING , SUSPENDED , ABORTED eller COMPLETED ) |
Följande metoder för HTTP-begäran gäller:
http://localhost:4502/etc/workflow/instances/{id}
HTTP-begärandemetod | Åtgärder |
GET |
Hämtar instansdata (definition och metadata) inklusive länken till respektive arbetsflödesmodell. |
POST |
Ändrar instansens tillstånd. Det nya läget skickas som parameter state och måste ha något av följande värden: RUNNING , SUSPENDED , eller ABORTED .Om det inte går att nå det nya läget (t.ex. när du gör uppehåll i en avslutad instans) 409 (CONFLICT ) skickas tillbaka till klienten. |
Följande metoder för HTTP-begäran gäller:
http://localhost:4502/etc/workflow/models
HTTP-begärandemetod | Åtgärder |
GET |
Visar tillgängliga arbetsflödesmodeller. |
POST |
Skapar en ny arbetsflödesmodell. Om parametern title skickas, en ny modell skapas med den angivna titeln. Koppla en JSON-modelldefinition som parameter model skapar en ny arbetsflödesmodell enligt den angivna definitionen.A 201 svar (CREATED ) skickas tillbaka med ett platshuvud som innehåller URL:en för den nya arbetsflödesmodellresursen.Samma sak händer när en modelldefinition bifogas som en filparameter som kallas modelfile .I båda fallen gäller model och modelfile parametrar, en extra parameter som anropas type krävs för att definiera serialiseringsformatet. Nya serialiseringsformat kan integreras med OSGI API. En vanlig JSON-serialisering levereras med arbetsflödesmotorn. Dess typ är JSON. Nedan finns ett exempel på formatet. |
Exempel: i webbläsaren skickar du en begäran till http://localhost:4502/etc/workflow/models.json
genererar ett json-svar som liknar följande:
[
{"uri":"/var/workflow/models/activationmodel"}
,{"uri":"/var/workflow/models/dam/adddamsize"}
,{"uri":"/var/workflow/models/cloudconfigs/dtm-reactor/library-download"}
,{"uri":"/var/workflow/models/ac-newsletter-workflow-simple"}
,{"uri":"/var/workflow/models/dam/dam-create-language-copy"}
,{"uri":"/var/workflow/models/dam/dam-create-and-translate-language-copy"}
,{"uri":"/var/workflow/models/dam-indesign-proxy"}
,{"uri":"/var/workflow/models/dam-xmp-writeback"}
,{"uri":"/var/workflow/models/dam-parse-word-documents"}
,{"uri":"/var/workflow/models/dam/process_subasset"}
,{"uri":"/var/workflow/models/dam/dam_set_last_modified"}
,{"uri":"/var/workflow/models/dam/dam-autotag-assets"}
,{"uri":"/var/workflow/models/dam/update_asset"}
,{"uri":"/var/workflow/models/dam/update_asset_offloading"}
,{"uri":"/var/workflow/models/dam/dam-update-language-copy"}
,{"uri":"/var/workflow/models/dam/update_from_lightbox"}
,{"uri":"/var/workflow/models/cloudservices/DTM_bundle_download"}
,{"uri":"/var/workflow/models/dam/dam_download_asset"}
,{"uri":"/var/workflow/models/dam/dynamic-media-encode-video"}
,{"uri":"/var/workflow/models/dam/dynamic-media-video-thumbnail-replacement"}
,{"uri":"/var/workflow/models/dam/dynamic-media-video-user-uploaded-thumbnail"}
,{"uri":"/var/workflow/models/newsletter_bounce_check"}
,{"uri":"/var/workflow/models/projects/photo_shoot_submission"}
,{"uri":"/var/workflow/models/projects/product_photo_shoot"}
,{"uri":"/var/workflow/models/projects/approval_workflow"}
,{"uri":"/var/workflow/models/prototype-01"}
,{"uri":"/var/workflow/models/publish_example"}
,{"uri":"/var/workflow/models/publish_to_campaign"}
,{"uri":"/var/workflow/models/screens/publish_to_author_bin"}
,{"uri":"/var/workflow/models/s7dam/request_to_publish_to_youtube"}
,{"uri":"/var/workflow/models/projects/request_copy"}
,{"uri":"/var/workflow/models/projects/request_email"}
,{"uri":"/var/workflow/models/projects/request_landing_page"}
,{"uri":"/var/workflow/models/projects/request_launch"}
,{"uri":"/var/workflow/models/request_for_activation"}
,{"uri":"/var/workflow/models/request_for_deactivation"}
,{"uri":"/var/workflow/models/request_for_deletion"}
,{"uri":"/var/workflow/models/request_for_deletion_without_deactivation"}
,{"uri":"/var/workflow/models/request_to_complete_move_operation"}
,{"uri":"/var/workflow/models/reverse_replication"}
,{"uri":"/var/workflow/models/salesforce-com-export"}
,{"uri":"/var/workflow/models/scene7"}
,{"uri":"/var/workflow/models/scheduled_activation"}
,{"uri":"/var/workflow/models/scheduled_deactivation"}
,{"uri":"/var/workflow/models/screens/screens-update-asset"}
,{"uri":"/var/workflow/models/translation"}
,{"uri":"/var/workflow/models/s7dam/request_to_remove_from_youtube"}
,{"uri":"/var/workflow/models/wcm-translation/create_language_copy"}
,{"uri":"/var/workflow/models/wcm-translation/prepare_translation_project"}
,{"uri":"/var/workflow/models/wcm-translation/translate-i18n-dictionary"}
,{"uri":"/var/workflow/models/wcm-translation/sync_translation_job"}
,{"uri":"/var/workflow/models/wcm-translation/translate-language-copy"}
,{"uri":"/var/workflow/models/wcm-translation/update_language_copy"}
]
Följande metoder för HTTP-begäran gäller:
http://localhost:4502*{uri}*
Plats *{uri}*
är sökvägen till modellnoden i databasen.
HTTP-begärandemetod | Åtgärder |
GET |
Hämtar HEAD version av modellen (definition och metadata). |
PUT |
Uppdaterar HEAD version av modellen (skapar en ny version).Den fullständiga modelldefinitionen för den nya versionen av modellen måste läggas till som en parameter som anropas model . Ytterligare en type -parametern behövs som när du skapar nya modeller och måste ha värdet JSON . |
POST |
Samma beteende som med PUT. Behövs eftersom AEM inte stöder PUT åtgärder. |
DELETE |
Tar bort modellen. Så här löser du brandväggs-/proxyproblem POST som innehåller X-HTTP-Method-Override rubrikpost med värde DELETE kommer också att accepteras som DELETE begäran. |
Exempel: i webbläsaren skickar du en begäran till http://localhost:4502/var/workflow/models/publish_example.json
returnerar json
ett svar som liknar följande kod:
{
"id":"/var/workflow/models/publish_example",
"title":"Publish Example",
"version":"1.0",
"description":"This example shows a simple review and publish process.",
"metaData":
{
"multiResourceSupport":"true",
"tags":"wcm,publish"
},
"nodes":
[{
"id":"node0",
"type":"START",
"title":"Start",
"description":"The start node of the workflow.",
"metaData":
{
}
},
{
"id":"node1",
"type":"PARTICIPANT",
"title":"Validate Content",
"description":"Validate the modified content.",
"metaData":
{
"PARTICIPANT":"admin"
}
},
{
"id":"node2",
"type":"PROCESS",
"title":"Publish Content",
"description":"Publish the modified content.",
"metaData":
{
"PROCESS_AUTO_ADVANCE":"true",
"PROCESS":"com.day.cq.wcm.workflow.process.ActivatePageProcess"
}
},
{
"id":"node3",
"type":"END",
"title":"End",
"description":"The end node of the workflow.",
"metaData":
{
}
}],
"transitions":
[{
"from":"node0",
"to":"node1",
"metaData":
{
}
},
{
"from":"node1",
"to":"node2",
"metaData":
{
}
},
{
"from":"node2",
"to":"node3",
"metaData":
{
}
}
]}
Följande metoder för HTTP-begäran gäller:
http://localhost:4502/etc/workflow/models/{id}.{version}
HTTP-begärandemetod | Åtgärder |
---|---|
GET |
Hämtar data för modellen i den angivna versionen (om den finns). |
Följande metoder för HTTP-begäran gäller:
http://localhost:4502/bin/workflow/inbox
HTTP-begärandemetod | Åtgärder |
GET |
Visar de arbetsobjekt som finns i användarens inkorg och som identifieras av rubrikerna för HTTP-autentisering. |
POST |
Slutför arbetsobjektet vars URI skickas som parameter item och flyttar enligt arbetsflödesinstansen till nästa noder, som definieras av parametern route eller backroute om du går tillbaka ett steg.Om parametern delegatee skickas, arbetsobjektet som identifieras av parametern item delegeras till den angivna deltagaren. |
Följande metoder för HTTP-begäran gäller:
http://localhost:4502/bin/workflow/inbox/{id}
HTTP-begärandemetod | Åtgärder |
---|---|
GET |
Hämtar data (definition och metadata) för inkorgen WorkItem identifieras av dess ID. |
Om du vill visa en lista över alla arbetsflöden som körs gör du en GET till:
http://localhost:4502/etc/workflow/instances.RUNNING.json
Exempel med vändning:
curl -u admin:admin http://localhost:4502/etc/workflow/instances.RUNNING.json
The uri
som visas i resultaten kan användas som instans id
i andra kommandon, till exempel:
[
{"uri":"/etc/workflow/instances/server0/2017-03-08/request_for_activation_1"}
]
Detta curl
-kommandot kan användas med alla arbetsflödesstatus i stället för RUNNING
.
Ändra Titel för arbetsflöde visas i Instanser fliken i arbetsflödeskonsolen skickar du en POST
kommando:
till: http://localhost:4502/etc/workflow/instances/{id}
med följande parametrar:
action
: värdet måste vara: UPDATE
workflowTitle
: arbetsflödets titelExempel med vändning:
curl -u admin:admin -d "action=UPDATE&workflowTitle=myWorkflowTitle" http://localhost:4502/etc/workflow/instances/{id}
# for example
curl -u admin:admin -d "action=UPDATE&workflowTitle=myWorkflowTitle" http://localhost:4502/etc/workflow/instances/server0/2017-03-08/request_for_activation_1
Om du vill visa en lista över alla tillgängliga arbetsflödesmodeller gör du en GET till:
http://localhost:4502/etc/workflow/models.json
Exempel med vändning:
curl -u admin:admin http://localhost:4502/etc/workflow/models.json
Se även Hantera arbetsflödesmodeller.
The com.adobe.granite.workflow.WorkflowSession
klassen kan anpassas från en javax.jcr.Session
objekt eller org.apache.sling.api.resource.ResourceResolver
-objekt.
I ett JSP-skript (eller Java-kod för en serletklass) använder du objektet för HTTP-begäran för att få en SlingHttpServletRequest
-objekt, som ger åtkomst till ett ResourceResolver
-objekt. Anpassa ResourceResolver
objekt till WorkflowSession
.
<%
%><%@include file="/libs/foundation/global.jsp"%><%
%><%@page session="false"
import="com.adobe.granite.workflow.WorkflowSession,
org.apache.sling.api.SlingHttpServletRequest"%><%
SlingHttpServletRequest slingReq = (SlingHttpServletRequest)request;
WorkflowSession wfSession = slingReq.getResourceResolver().adaptTo(WorkflowSession.class);
%>
Använd sling
variabel för att hämta SlingHttpServletRequest
objekt som du använder för att hämta ResourceResolver
-objekt. Anpassa ResourceResolver
objekt till WorkflowSession
-objekt.
var wfsession = sling.getRequest().getResource().getResourceResolver().adaptTo(Packages.com.adobe.granite.workflow.WorkflowSession);
I följande exempel visas hur du får åtkomst till arbetsflödesmodeller:
WorkflowSession.createNewModel
-metod.De exempel som används:
/var/workflow/models/mymodel/jcr:content/model
).Om du tar bort modellen anges deleted
egenskap för modellens metaData
underordnad nod till true
.
Modellnoden tas inte bort.
När du skapar en modell:
Arbetsflödesmodellredigeraren kräver att modellerna använder en viss nodstruktur nedan /var/workflow/models
. Modellens överordnade nod måste vara av typen cq:Page
har jcr:content
nod med följande egenskapsvärden:
sling:resourceType
: cq/workflow/components/pages/model
cq:template
: /libs/cq/workflow/templates/model
När du skapar en modell måste du först skapa den cq:Page
nod och använd dess jcr:content
noden som modellnodens överordnade nod.
The id
argument som vissa metoder kräver för att identifiera modellen är den absoluta sökvägen till modellnoden i databasen:
/var/workflow/models/<*model_name>*/jcr:content/model
<%@include file="/libs/foundation/global.jsp"%><%
%><%@page session="false" import="com.adobe.granite.workflow.WorkflowSession,
com.adobe.granite.workflow.model.WorkflowModel,
org.apache.sling.api.SlingHttpServletRequest"%><%
SlingHttpServletRequest slingReq = (SlingHttpServletRequest)request;
WorkflowSession wfSession = slingReq.getResourceResolver().adaptTo(WorkflowSession.class);
/* Create the parent page */
String modelRepo = new String("/var/workflow/models");
String modelTemplate = new String ("/libs/cq/workflow/templates/model");
String modelName = new String("mymodel");
Page modelParent = pageManager.create(modelRepo, modelName, modelTemplate, "My workflow model");
/* create the model */
String modelId = new String(modelParent.getPath()+"/jcr:content/model")
WorkflowModel model = wfSession.createNewModel("Made using Java",modelId);
/* delete the model */
wfSession.deleteModel(modelId);
%>
var resolver = sling.getRequest().getResource().getResourceResolver();
var wfSession = resolver.adaptTo(Packages.com.adobe.granite.workflow.WorkflowSession);
var pageManager = resolver.adaptTo(Packages.com.day.cq.wcm.api.PageManager);
//create the parent page node
var workflowPage = pageManager.create("/var/workflow/models", "mymodel", "/libs/cq/workflow/templates/model", "Created via ECMA Script");
var modelId = workflowPage.getPath()+ "/jcr:content/model";
//create the model
var model = wfSession.createNewModel("My Model", modelId);
//delete the model
var model = wfSession.deleteModel(modelId);
# deleting the model by its id
curl -u admin:admin -X DELETE http://localhost:4502/etc/workflow/models/{id}
På grund av den detaljnivå som krävs anses kurl inte vara praktiskt när du skapar och/eller läser en modell.
Du kan använda WorkflowStatus API om du vill hämta information om arbetsflödesstatus för en nod.
Olika metoder har parametern:
excludeSystemWorkflows
Den här parametern kan ställas in på true
att ange att systemarbetsflöden ska uteslutas från relevanta resultat.
Du kan uppdatera OSGi-konfigurationen Adobe Granite Workflow PayloadMapCache som anger arbetsflödet Models
anses vara systemarbetsflöden. Standardarbetsflödesmodellerna (runtime) är:
/var/workflow/models/scheduled_activation/jcr:content/model
/var/workflow/models/scheduled_deactivation/jcr:content/model
Om du behöver gå vidare automatiskt Deltagare steg som inte har slutförts inom en fördefinierad tid kan du:
Implementera en OSGI-händelseavlyssnare för att lyssna på när uppgifter skapas och ändras.
Ange en tidsgräns (deadline) och skapa sedan ett schemalagt snedstreck som ska utlösas vid den tidpunkten.
Skriv en jobbhanterare som meddelas när tidsgränsen går ut och utlöser jobbet.
Den här hanteraren utför den nödvändiga åtgärden för aktiviteten om den inte har slutförts ännu
De åtgärder som skall vidtas måste vara klart definierade för att kunna använda detta tillvägagångssätt.
Nedan finns grundläggande exempel på hur du interagerar (programmatiskt) med arbetsflödesinstanser.
// starting a workflow
WorkflowModel model = wfSession.getModel(workflowId);
WorkflowData wfData = wfSession.newWorkflowData("JCR_PATH", repoPath);
wfSession.startWorkflow(model, wfData);
// querying and managing a workflow
Workflow[] workflows workflows = wfSession.getAllWorkflows();
Workflow workflow= wfSession.getWorkflow(id);
wfSession.suspendWorkflow(workflow);
wfSession.resumeWorkflow(workflow);
wfSession.terminateWorkflow(workflow);
// starting a workflow
var model = wfSession.getModel(workflowId);
var wfData = wfSession.newWorkflowData("JCR_PATH", repoPath);
wfSession.startWorkflow(model, wfData);
// querying and managing a workflow
var workflows = wfSession.getWorkflows("RUNNING");
var workflow= wfSession.getWorkflow(id);
wfSession.suspendWorkflow(workflow);
wfSession.resumeWorkflow(workflow);
wfSession.terminateWorkflow(workflow);
Starta ett arbetsflöde
# starting a workflow
curl -d "model={id}&payloadType={type}&payload={payload}" http://localhost:4502/etc/workflow/instances
# for example:
curl -u admin:admin -d "model=/var/workflow/models/request_for_activation&payloadType=JCR_PATH&payload=/content/we-retail/us/en/products" http://localhost:4502/etc/workflow/instances
Visar instanser
# listing the instances
curl -u admin:admin http://localhost:4502/etc/workflow/instances.json
Då visas alla förekomster, till exempel:
[
{"uri":"/var/workflow/instances/server0/2018-02-26/prototype-01_1"}
,{"uri":"/var/workflow/instances/server0/2018-02-26/prototype-01_2"}
]
Se Hämta en lista med alla arbetsflöden som körs med sina ID:n för att lista instanser med en viss status.
Pausa ett arbetsflöde
# suspending a workflow
curl -d "state=SUSPENDED" http://localhost:4502/etc/workflow/instances/{id}
# for example:
curl -u admin:admin -d "state=SUSPENDED" http://localhost:4502/etc/workflow/instances/server0/2017-03-08/request_for_activation_1
Återuppta ett arbetsflöde
# resuming a workflow
curl -d "state=RUNNING" http://localhost:4502/etc/workflow/instances/{id}
# for example:
curl -u admin:admin -d "state=RUNNING" http://localhost:4502/etc/workflow/instances/server0/2017-03-08/request_for_activation_1
Avsluta en arbetsflödesinstans
# terminating a workflow
curl -d "state=ABORTED" http://localhost:4502/etc/workflow/instances/{id}
# for example:
curl -u admin:admin -d "state=ABORTED" http://localhost:4502/etc/workflow/instances/server0/2017-03-08/request_for_activation_1
Nedan följer grundläggande exempel på hur du interagerar (programmatiskt) med arbetsobjekt.
// querying work items
WorkItem[] workItems = wfSession.getActiveWorkItems();
WorkItem workItem = wfSession.getWorkItem(id);
// getting routes
List<Route> routes = wfSession.getRoutes(workItem);
// delegating
Iterator<Participant> delegatees = wfSession.getDelegatees(workItem);
wfSession.delegateWorkItem(workItem, delegatees.get(0));
// completing or advancing to the next step
wfSession.complete(workItem, routes.get(0));
// querying work items
var workItems = wfSession.getActiveWorkItems();
var workItem = wfSession.getWorkItem(id);
// getting routes
var routes = wfSession.getRoutes(workItem);
// delegating
var delegatees = wfSession.getDelegatees(workItem);
wfSession.delegateWorkItem(workItem, delegatees.get(0));
// completing or advancing to the next step
wfSession.complete(workItem, routes.get(0));
Visar arbetsobjekt från inkorgen
# listing the work items
curl -u admin:admin http://localhost:4502/bin/workflow/inbox
Information om arbetsobjekt som finns i Inkorgen visas, till exempel:
[{
"uri_xss": "/var/workflow/instances/server0/2018-02-26/prototype-01_2/workItems/node2_var_workflow_instances_server0_2018-02-26_prototype-01_2",
"uri": "/var/workflow/instances/server0/2018-02-26/prototype-01_2/workItems/node2_var_workflow_instances_server0_2018-02-26_prototype-01_2",
"currentAssignee_xss": "workflow-administrators",
"currentAssignee": "workflow-administrators",
"startTime": 1519656289274,
"payloadType_xss": "JCR_PATH",
"payloadType": "JCR_PATH",
"payload_xss": "/content/we-retail/es/es",
"payload": "/content/we-retail/es/es",
"comment_xss": "Process resource is null",
"comment": "Process resource is null",
"type_xss": "WorkItem",
"type": "WorkItem"
},{
"uri_xss": "configuration/configure_analyticstargeting",
"uri": "configuration/configure_analyticstargeting",
"currentAssignee_xss": "administrators",
"currentAssignee": "administrators",
"type_xss": "Task",
"type": "Task"
},{
"uri_xss": "configuration/securitychecklist",
"uri": "configuration/securitychecklist",
"currentAssignee_xss": "administrators",
"currentAssignee": "administrators",
"type_xss": "Task",
"type": "Task"
},{
"uri_xss": "configuration/enable_collectionofanonymoususagedata",
"uri": "configuration/enable_collectionofanonymoususagedata",
"currentAssignee_xss": "administrators",
"currentAssignee": "administrators",
"type_xss": "Task",
"type": "Task"
},{
"uri_xss": "configuration/configuressl",
"uri": "configuration/configuressl",
"currentAssignee_xss": "administrators",
"currentAssignee": "administrators",
"type_xss": "Task",
"type": "Task"
}
Delegera arbetsobjekt
# delegating
curl -d "item={item}&delegatee={delegatee}" http://localhost:4502/bin/workflow/inbox
# for example:
curl -u admin:admin -d "item=/etc/workflow/instances/server0/2017-03-08/request_for_activation_1/workItems/node1_etc_workflow_instances_server0_2017-03-08_request_for_act_1&delegatee=administrators" http://localhost:4502/bin/workflow/inbox
The delegatee
måste vara ett giltigt alternativ för arbetsflödessteget.
Slutför eller flytta fram arbetsuppgifter till nästa steg
# retrieve the list of routes; the results will be similar to {"results":1,"routes":[{"rid":"233123169","label":"End","label_xss":"End"}]}
http://localhost:4502/etc/workflow/instances/<path-to-the-workitem>.routes.json
# completing or advancing to the next step; use the appropriate route ID (rid value) from the above list
curl -d "item={item}&route={route}" http://localhost:4502/bin/workflow/inbox
# for example:
curl -u admin:admin -d "item=/etc/workflow/instances/server0/2017-03-08/request_for_activation_1/workItems/node1_etc_workflow_instances_server0_2017-03-08_request_for_activation_1&route=233123169" http://localhost:4502/bin/workflow/inbox
Använd OSGi-händelseramverket för att lyssna efter händelser som com.adobe.granite.workflow.event.WorkflowEvent
-klassen definierar. Den här klassen innehåller också flera användbara metoder för att hämta information om föremålet för händelsen. Till exempel getWorkItem
metoden returnerar WorkItem
-objekt för det arbetsobjekt som är involverat i händelsen.
I följande exempelkod definieras en tjänst som avlyssnar arbetsflödeshändelser och utför åtgärder utifrån händelsetypen.
package com.adobe.example.workflow.listeners;
import org.apache.sling.event.jobs.JobProcessor;
import org.apache.sling.event.jobs.JobUtil;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import com.adobe.granite.workflow.event.WorkflowEvent;
import com.adobe.granite.workflow.exec.WorkItem;
/**
* The <code>WorkflowEventCatcher</code> class listens to workflow events.
*/
@Component(metatype=false, immediate=true)
@Service(value=org.osgi.service.event.EventHandler.class)
public class WorkflowEventCatcher implements EventHandler, JobProcessor {
@Property(value=com.adobe.granite.workflow.event.WorkflowEvent.EVENT_TOPIC)
static final String EVENT_TOPICS = "event.topics";
private static final Logger logger = LoggerFactory.getLogger(WorkflowEventCatcher.class);
public void handleEvent(Event event) {
JobUtil.processJob(event, this);
}
public boolean process(Event event) {
logger.info("Received event of topic: " + event.getTopic());
String topic = event.getTopic();
try {
if (topic.equals(WorkflowEvent.EVENT_TOPIC)) {
WorkflowEvent wfevent = (WorkflowEvent)event;
String eventType = wfevent.getEventType();
String instanceId = wfevent.getWorkflowInstanceId();
if (instanceId != null) {
//workflow instance events
if (eventType.equals(WorkflowEvent.WORKFLOW_STARTED_EVENT) ||
eventType.equals(WorkflowEvent.WORKFLOW_RESUMED_EVENT) ||
eventType.equals(WorkflowEvent.WORKFLOW_SUSPENDED_EVENT)) {
// your code comes here...
} else if (
eventType.equals(WorkflowEvent.WORKFLOW_ABORTED_EVENT) ||
eventType.equals(WorkflowEvent.WORKFLOW_COMPLETED_EVENT)) {
// your code comes here...
}
// workflow node event
if (eventType.equals(WorkflowEvent.NODE_TRANSITION_EVENT)) {
WorkItem currentItem = (WorkItem) event.getProperty(WorkflowEvent.WORK_ITEM);
// your code comes here...
}
}
}
} catch(Exception e){
logger.debug(e.getMessage());
e.printStackTrace();
}
return true;
}
}