Programmatische interactie met Workflows
- Onderwerpen:
- Developing
Gemaakt voor:
- Developer
Wanneer uw workflows aanpassen en uitbreiden u hebt toegang tot workflowobjecten:
De Java API voor de workflow gebruiken
De workflow Java API bestaat uit de com.adobe.granite.workflow
verpakking en verscheidene subpakketten. Het belangrijkste lid van de API is de com.adobe.granite.workflow.WorkflowSession
klasse. De WorkflowSession
klasse biedt toegang tot workflowobjecten tijdens het ontwerpen en bij uitvoering:
- workflowmodellen
- werkartikelen
- workflowinstanties
- workflowgegevens
- postvakken
De klasse biedt ook verschillende methoden voor het ingrijpen in workflowlevenscycli.
De volgende tabel bevat koppelingen naar de referentiedocumentatie van verschillende belangrijke Java-objecten die moeten worden gebruikt wanneer programmatisch wordt gewerkt met workflows. De volgende voorbeelden demonstreren hoe u de klassenobjecten in code verkrijgt en gebruikt.
Workflowobjecten verkrijgen in ECMA-scripts
Zoals beschreven in Script zoeken, AEM (via Apache Sling) biedt een ECMA-scriptengine die ECMA-scripts op de server uitvoert. De org.apache.sling.scripting.core.ScriptHelper
klasse is direct beschikbaar voor uw scripts als de sling
variabele.
De ScriptHelper
klasse verleent toegang tot SlingHttpServletRequest
die u kunt gebruiken om uiteindelijk de WorkflowSession
object; bijvoorbeeld:
var wfsession = sling.getRequest().getResource().getResourceResolver().adaptTo(Packages.com.adobe.granite.workflow.WorkflowSession);
De REST-API voor workflows gebruiken
De workflowconsole maakt intensief gebruik van de REST API; Deze pagina beschrijft dus de REST API voor workflows.
De volgende acties worden ondersteund met de REST API:
- een workflowservice starten of stoppen
- workflowmodellen maken, bijwerken of verwijderen
- workflowinstanties starten, opschorten, hervatten of beëindigen
- volledige of gedelegeerde werkitems
POST
verzoek.Op deze pagina wordt aangenomen dat AEM op localhost op poort wordt uitgevoerd 4502
en dat de installatiecontext " /
" (basis). Als dit niet het geval is voor uw installatie, moeten de URI's, waarop de HTTP-aanvragen van toepassing zijn, dienovereenkomstig worden aangepast.
De ondersteunde rendering voor GET
Aanvragen zijn de JSON-rendering. De URL's voor GET
moet .json
extensie, bijvoorbeeld:
http://localhost:4502/etc/workflow.json
Workflowinstanties beheren
De volgende HTTP-aanvraagmethoden zijn van toepassing op:
http://localhost:4502/etc/workflow/instances
GET
POST
-
model
: de ID (URI) van het respectieve werkschemamodel-
payloadType
: met het type lading (bijvoorbeeld JCR_PATH
of URL).De lading wordt verzonden als parameter
payload
. A 201
(CREATED
) reactie wordt teruggestuurd met een locatiekopbal die URL van de nieuwe werkschemainstantiebron bevat.Een Werkstroominstantie beheren door de betreffende staat
De volgende HTTP-aanvraagmethoden zijn van toepassing op:
http://localhost:4502/etc/workflow/instances.{state}
GET
RUNNING
, SUSPENDED
, ABORTED
of COMPLETED
)Een Werkstroominstantie beheren met de id
De volgende HTTP-aanvraagmethoden zijn van toepassing op:
http://localhost:4502/etc/workflow/instances/{id}
GET
POST
state
en moet een van de volgende waarden hebben: RUNNING
, SUSPENDED
, of ABORTED
.Als de nieuwe status niet bereikbaar is (bijvoorbeeld wanneer een afgesloten instantie wordt opgeschort), kunt u
409
(CONFLICT
) wordt teruggestuurd naar de client.Workflowmodellen beheren
De volgende HTTP-aanvraagmethoden zijn van toepassing op:
http://localhost:4502/etc/workflow/models
GET
POST
title
wordt verzonden, wordt een nieuw model gecreeerd met de gespecificeerde titel. Een JSON-modeldefinitie als parameter koppelen model
maakt een nieuw workflowmodel volgens de opgegeven definitie.A
201
response (CREATED
) wordt teruggestuurd met een locatiekoptekst die de URL van de nieuwe bron van het workflowmodel bevat.Dit gebeurt ook wanneer een modeldefinitie wordt gekoppeld als een bestandsparameter die
modelfile
.In beide gevallen
model
en modelfile
parameters, een extra parameter genoemd type
is vereist om het rangschikkingsformaat te bepalen. De nieuwe rangschikkingsformaten kunnen worden geïntegreerd gebruikend OSGI API. Er wordt een standaard JSON-serializer geleverd met de workflow-engine. Het type is JSON. Zie hieronder voor een voorbeeld van de opmaak.Voorbeeld: in de browser, een verzoek om http://localhost:4502/etc/workflow/models.json
Hiermee genereert u een JSON-reactie die vergelijkbaar is met het volgende:
[
{"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"}
]
Een specifiek workflowmodel beheren
De volgende HTTP-aanvraagmethoden zijn van toepassing op:
http://localhost:4502*{uri}*
Wanneer *{uri}*
Dit is het pad naar het modelknooppunt in de repository.
GET
HEAD
versie van het model (definitie en metagegevens).PUT
HEAD
versie van het model (maakt een nieuwe versie).De volledige modeldefinitie voor de nieuwe versie van het model moet worden toegevoegd als een parameter genoemd
model
. Daarnaast type
parameter is nodig zoals bij het creëren van nieuwe modellen en moet de waarde hebben JSON
.POST
PUT
bewerkingen.DELETE
POST
die een X-HTTP-Method-Override
header-item met waarde DELETE
wordt ook aanvaard, aangezien DELETE
verzoek.Voorbeeld: in de browser, een verzoek om http://localhost:4502/var/workflow/models/publish_example.json
retourneert een json
reactie die vergelijkbaar is met de volgende code:
{
"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":
{
}
}
]}
Het beheren van een Model van het Werkschema door zijn Versie
De volgende HTTP-aanvraagmethoden zijn van toepassing op:
http://localhost:4502/etc/workflow/models/{id}.{version}
GET
Invakken (gebruikers) beheren
De volgende HTTP-aanvraagmethoden zijn van toepassing op:
http://localhost:4502/bin/workflow/inbox
GET
POST
item
en gaat de instantie volgens workflow verder naar de volgende node(s), die wordt gedefinieerd door de parameter route
of backroute
in geval van een stap terug.Als de parameter
delegatee
wordt verzonden, het het werkpunt dat door de parameter wordt geïdentificeerd item
wordt gedelegeerd aan de opgegeven deelnemer.Het beheren van een (Gebruiker) Inbox door identiteitskaart WorkItem
De volgende HTTP-aanvraagmethoden zijn van toepassing op:
http://localhost:4502/bin/workflow/inbox/{id}
GET
WorkItem
geïdentificeerd door zijn ID.Voorbeelden
Hoe te om een Lijst van alle Lopende Werkschema's met hun IDs te krijgen
Voer een GET uit om een lijst met alle actieve workflows op te halen:
http://localhost:4502/etc/workflow/instances.RUNNING.json
Hoe te om een Lijst van alle Lopende Werkschema's met hun identiteitskaart te krijgen - REST gebruikend krullen
Voorbeeld met krullen:
curl -u admin:admin http://localhost:4502/etc/workflow/instances.RUNNING.json
De uri
weergegeven in de resultaten kunnen worden gebruikt als de instantie id
in andere opdrachten; bijvoorbeeld:
[
{"uri":"/etc/workflow/instances/server0/2017-03-08/request_for_activation_1"}
]
Hoe te om de Titel van het Werkschema te veranderen
Als u het dialoogvenster Werkstroomtitel weergegeven in de Instanties tabblad van de workflowconsole, een POST
opdracht:
-
tot:
http://localhost:4502/etc/workflow/instances/{id}
-
met de volgende parameters:
action
: de waarde ervan moet :UPDATE
workflowTitle
: de titel van de workflow
Hoe te om de Titel van het Werkschema te veranderen - REST gebruikend krullen
Voorbeeld met krullen:
curl -u admin:admin -d "action=UPDATE&workflowTitle=myWorkflowTitle" http://localhost:4502/etc/workflow/instances/{id}
# for example
>[!CAUTION]
>
>AEM 6.4 has reached the end of extended support and this documentation is no longer updated. For further details, see our [technical support periods](https://helpx.adobe.com/nl/support/programs/eol-matrix.html). Find the supported versions [here](https://experienceleague.adobe.com/docs/?lang=nl).
curl -u admin:admin -d "action=UPDATE&workflowTitle=myWorkflowTitle" http://localhost:4502/etc/workflow/instances/server0/2017-03-08/request_for_activation_1
Hoe te om van alle Modellen van het Werkschema een lijst te maken
Ga als volgt te werk om een lijst met alle beschikbare workflowmodellen op te halen:
http://localhost:4502/etc/workflow/models.json
Hoe te om van alle Modellen van het Werkschema een lijst te maken - REST gebruikend curl
Voorbeeld met krullen:
curl -u admin:admin http://localhost:4502/etc/workflow/models.json
Een WorkflowSession-object verkrijgen
De com.adobe.granite.workflow.WorkflowSession
klasse kan worden aangepast vanuit een javax.jcr.Session
object of een org.apache.sling.api.resource.ResourceResolver
object.
Een WorkflowSession-object verkrijgen - Java
Gebruik in een JSP-script (of Java-code voor een servlet-klasse) het HTTP-aanvraagobject om een SlingHttpServletRequest
object, dat toegang biedt tot een ResourceResolver
object. Pas het ResourceResolver
object naar 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);
%>
Een WorkflowSession-object verkrijgen - ECMA-script
Gebruik de sling
variabele om de SlingHttpServletRequest
object dat u gebruikt om een ResourceResolver
object. Pas het ResourceResolver
aan WorkflowSession
object.
var wfsession = sling.getRequest().getResource().getResourceResolver().adaptTo(Packages.com.adobe.granite.workflow.WorkflowSession);
Workflowmodellen maken, lezen of verwijderen
De volgende voorbeelden laten zien hoe u workflowmodellen kunt openen:
- In de code voor Java- en ECMA-scripts wordt het
WorkflowSession.createNewModel
methode. - De curl-opdracht geeft rechtstreeks toegang tot het model via de URL.
De gebruikte voorbeelden:
- Een model maken (met de id
/var/workflow/models/mymodel/jcr:content/model
). - Verwijder het model.
deleted
eigenschap van het model metaData
onderliggende node naar true
.Bij het maken van een nieuw model:
-
De werkschemamodeleditor vereist dat modellen een specifieke knooppuntstructuur hieronder gebruiken
/var/workflow/models
. Het bovenliggende knooppunt van het model moet van het type zijncq:Page
eenjcr:content
knooppunt met de volgende eigenschapswaarden:sling:resourceType
:cq/workflow/components/pages/model
cq:template
:/libs/cq/workflow/templates/model
Wanneer u een model maakt, moet u dit eerst maken
cq:Page
knoop en gebruik zijnjcr:content
knooppunt als het bovenliggende knooppunt van het modelknooppunt. -
De
id
argument dat sommige methodes voor het identificeren van het model vereisen is de absolute weg van de modelknoop in de bewaarplaats:/var/workflow/models/<*model_name>*/jcr:content/model
Workflowmodellen maken, lezen of verwijderen - Java
<%@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);
%>
Workflowmodellen maken, lezen of verwijderen - ECMA-script
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);
Een workflowmodel verwijderen - HERSTELLEN met curl
# deleting the model by its id
>[!CAUTION]
>
>AEM 6.4 has reached the end of extended support and this documentation is no longer updated. For further details, see our [technical support periods](https://helpx.adobe.com/nl/support/programs/eol-matrix.html). Find the supported versions [here](https://experienceleague.adobe.com/docs/?lang=nl).
curl -u admin:admin -X DELETE http://localhost:4502/etc/workflow/models/{id}
Systeemworkflows filteren bij het controleren van workflowstatus
U kunt de WorkflowStatus-API om informatie over de werkschemastatus van een knoop terug te winnen.
Verschillende methoden hebben de parameter:
excludeSystemWorkflows
Deze parameter kan worden ingesteld op true
om aan te geven dat systeemworkflows van de relevante resultaten moeten worden uitgesloten.
U kan de configuratie bijwerken OSGi Adobe Granite Workflow PayloadMapCache die de workflow aangeeft Models
als systeemworkflows worden beschouwd. De standaardworkflowmodellen (runtime) zijn:
/var/workflow/models/scheduled_activation/jcr:content/model
/var/workflow/models/scheduled_deactivation/jcr:content/model
Stap van de Deelnemer van de auto-Geavanceerde na een Onderbreking
Als u automatisch een Deelnemer stap die niet binnen een vooraf bepaalde tijd is voltooid u kunt:
-
Implementeer een OSGI-gebeurtenislistener om te luisteren naar het maken en wijzigen van taken.
-
Geef een time-out (deadline) op en maak vervolgens een geplande slingertaak die op dat moment moet worden uitgevoerd.
-
Schrijf een taakmanager die op de hoogte wordt gebracht wanneer de onderbreking verloopt en de baan teweegbrengt.
Deze manager zal de vereiste actie op de taak nemen als de taak nog niet wordt voltooid
Interactie met workflowinstanties
Hieronder vindt u basisvoorbeelden van de wijze waarop u programmatisch kunt communiceren met workflowinstanties.
Interactie met workflowinstanties - Java
// 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);
Interactie met workflowinstanties - ECMA-script
// 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);
Interactie met Workflowinstanties - REST gebruiken met curl
-
Een workflow starten
# 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
-
De instanties weergeven
# listing the instances curl -u admin:admin http://localhost:4502/etc/workflow/instances.json
Hierin worden alle gevallen vermeld; bijvoorbeeld:
[ {"uri":"/var/workflow/instances/server0/2018-02-26/prototype-01_1"} ,{"uri":"/var/workflow/instances/server0/2018-02-26/prototype-01_2"} ]
NOTE
Zie Hoe te om een Lijst van alle Lopende Werkschema's te krijgen met hun ID's voor aanbiedingsinstanties met een specifieke status. -
Een workflow opschorten
# 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
-
Een workflow hervatten
# 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
-
Een werkstroominstantie beëindigen
# 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
Interactie met werkitems
Het volgende verstrekt basisvoorbeelden van hoe te (programmatisch) met het werkpunten in wisselwerking te staan.
Interactie met werkitems - Java
// 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));
Interactie met werkitems - ECMA-script
// 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));
Interactie met werkitems - HERSTEL met krullen
-
Werkitems van de aanbieding in het Postvak IN
# listing the work items curl -u admin:admin http://localhost:4502/bin/workflow/inbox
Details voor werkitems die zich momenteel in de Postvak IN bevinden, worden weergegeven. bijvoorbeeld:
[{ "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" }
-
Werkitems delegeren
# 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
NOTE
Dedelegatee
moet een geldige optie zijn voor de workflowstap. -
Werkonderdelen voltooien of naar de volgende stap gaan
# 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
Luisteren naar workflowgebeurtenissen
Gebruik het OSGi-gebeurtenisframework om te luisteren naar gebeurtenissen die com.adobe.granite.workflow.event.WorkflowEvent
definieert. Deze klasse biedt ook verschillende nuttige methoden om informatie over het onderwerp van de gebeurtenis te verkrijgen. De getWorkItem
methode retourneert de WorkItem
object voor het werkitem dat bij de gebeurtenis is betrokken.
De volgende voorbeeldcode definieert een service die luistert naar workflowgebeurtenissen en taken uitvoert op basis van het type gebeurtenis.
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;
}
}