Interagera med arbetsflöden programmatiskt
- Ämnen:
- Developing
Skapat för:
- Developer
När anpassa och utöka dina arbetsflöden du kan komma åt arbetsflödesobjekt:
Använda Java API för arbetsflöde
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:
- arbetsflödesmodeller
- arbetsposter
- arbetsflödesinstanser
- arbetsflödesdata
- inkorgsobjekt
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 |
Hämta arbetsflödesobjekt i ECMA-skript
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
objekt, till exempel:
var wfsession = sling.getRequest().getResource().getResourceResolver().adaptTo(Packages.com.adobe.granite.workflow.WorkflowSession);
Använda REST API för arbetsflöde
Arbetsflödeskonsolen använder REST API i stor utsträckning. så den här sidan beskriver REST API för arbetsflöden.
Följande åtgärder stöds med REST API:
- starta eller stoppa en arbetsflödestjänst
- skapa, uppdatera eller ta bort arbetsflödesmodeller
- starta, pausa, återuppta eller avsluta arbetsflödesinstanser
- slutföra eller delegera arbetsobjekt
POST
begäran.På den här sidan antas att AEM körs på localhost vid port 4502
och att installationskontexten ä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
Hantera arbetsflödesinstanser
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: - model : ID (URI) för respektive arbetsflödesmodell- payloadType : som innehåller typen av nyttolast (till exempel JCR_PATH eller URL).Nyttolasten skickas som parameter payload . A 201 (CREATED ) skickas tillbaka med ett platshuvud som innehåller URL:en för den nya arbetsflödesinstansresursen. |
Hantera en arbetsflödesinstans utifrån dess tillstånd
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 ) |
Hantera en arbetsflödesinstans med dess ID
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 (till exempel när du gör uppehåll i en avslutad instans) kan du 409 (CONFLICT ) skickas tillbaka till klienten. |
Hantera arbetsflödesmodeller
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, ytterligare en parameter 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, en begäran att 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"}
]
Hantera en specifik arbetsflödesmodell
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. För att lösa brandväggs-/proxyproblem har 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, en begäran att 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":
{
}
}
]}
Hantera en arbetsflödesmodell med dess version
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). |
Hantera (användare) inkorgar
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 nod(er), som definieras av parametern route eller backroute om du går ett steg bakåt.Om parametern delegatee skickas, arbetsobjektet som identifieras av parametern item delegeras till den angivna deltagaren. |
Hantera en (Användare) inkorg med WorkItem-ID
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 inkorgens data (definition och metadata) WorkItem identifieras av dess ID. |
Exempel
Hämta en lista över alla arbetsflöden som körs med deras ID:n
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
Hämta en lista över alla arbetsflöden som körs med deras ID:n - REST med URL
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
andra kommandon, till exempel:
[
{"uri":"/etc/workflow/instances/server0/2017-03-08/request_for_activation_1"}
]
Ändra arbetsflödets titel
Ä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
: dess värde måste vara:UPDATE
workflowTitle
: arbetsflödets titel
Ändra arbetsflödets titel - REST med vändning
Exempel med vändning:
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/se/support/programs/eol-matrix.html). Find the supported versions [here](https://experienceleague.adobe.com/docs/?lang=sv).
curl -u admin:admin -d "action=UPDATE&workflowTitle=myWorkflowTitle" http://localhost:4502/etc/workflow/instances/server0/2017-03-08/request_for_activation_1
Lista alla arbetsflödesmodeller
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
Så här listar du alla arbetsflödesmodeller - REST med kurva
Exempel med vändning:
curl -u admin:admin http://localhost:4502/etc/workflow/models.json
Hämta ett WorkflowSession-objekt
The com.adobe.granite.workflow.WorkflowSession
klassen kan anpassas från en javax.jcr.Session
objekt eller org.apache.sling.api.resource.ResourceResolver
-objekt.
Hämta ett WorkflowSession-objekt - Java
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);
%>
Hämta ett WorkflowSession-objekt - ECMA-skript
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);
Skapa, läsa eller ta bort arbetsflödesmodeller
I följande exempel visas hur du får åtkomst till arbetsflödesmodeller:
- Koden för Java- och ECMA-skript använder
WorkflowSession.createNewModel
-metod. - Kommandot curl kommer åt modellen direkt med dess URL.
De exempel som används:
- Skapa en modell (med ID:t)
/var/workflow/models/mymodel/jcr:content/model
). - Ta bort modellen.
deleted
egenskap för modellens metaData
underordnad nod till true
.När du skapar en ny modell:
-
Arbetsflödesmodellredigeraren kräver att modellerna använder en viss nodstruktur nedan
/var/workflow/models
. Modellens överordnade nod måste vara av typencq:Page
harjcr: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 dessjcr: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
NOTE
Skapa, läsa eller ta bort arbetsflödesmodeller - 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);
%>
Skapa, läsa eller ta bort arbetsflödesmodeller - ECMA-skript
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);
Ta bort en arbetsflödesmodell - REST med vändning
# 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/se/support/programs/eol-matrix.html). Find the supported versions [here](https://experienceleague.adobe.com/docs/?lang=sv).
curl -u admin:admin -X DELETE http://localhost:4502/etc/workflow/models/{id}
Filtrera ut systemarbetsflöden när arbetsflödesstatus kontrolleras
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
Gå automatiskt vidare till deltagarsteget efter en timeout
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
Interagera med arbetsflödesinstanser
Nedan finns grundläggande exempel på hur du interagerar (programmatiskt) med arbetsflödesinstanser.
Interagera med arbetsflödesinstanser - 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);
Interagera med arbetsflödesinstanser - 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);
Interagera med arbetsflödesinstanser - REST med vändning
-
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
Detta kommer att omfatta 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"} ]
NOTE
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
Interagera med arbetsuppgifter
Nedan följer grundläggande exempel på hur du interagerar (programmatiskt) med arbetsobjekt.
Interagera med arbetsuppgifter - 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));
Interagera med arbetsuppgifter - 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));
Interagera med arbetsobjekt - REST med vändning
-
Visar arbetsobjekt från inkorgen
# listing the work items curl -u admin:admin http://localhost:4502/bin/workflow/inbox
Information om de 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
NOTE
Thedelegatee
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
Lyssna efter arbetsflödeshändelser
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;
}
}
Experience Manager
- Utveckla användarhandboken - översikt
- Introduktion för utvecklare
- Komma igång med utveckling i AEM Sites – WKND-självstudiekurs
- AEM kärnbegrepp
- Struktur för det AEM användargränssnittet med pekskärm
- Koncepten i det AEM användargränssnittet med pekskärm
- AEM - riktlinjer och bästa praxis
- Använda bibliotek på klientsidan
- Developing and Page Diff
- Begränsningar för redigerare
- CSRF Protection Framework
- Datamodellering - David Nueschelers modell
- Bidrar till AEM
- Dokumentskydd
- Referensmaterial
- Skapa en webbplats med alla funktioner (Classic UI)
- Designer och Designer (Classic UI)
- Plattform
- Fusklapp för Sling
- Använda Sling-adaptrar
- Taggbibliotek
- Mallar
- Använda Sling Resource Merger i AEM
- Övertäckningar
- Namnkonventioner
- Skapa en ny GRE-fältkomponent
- Query Builder
- Taggar
- Anpassa sidor som visas av felhanteraren
- Anpassade nodtyper
- Lägga till teckensnitt för grafikåtergivning
- Ansluta till SQL-databaser
- Extern URL
- Skapa och använda jobb för avlastning
- Konfigurerar cookie-användning
- Så här programmässigt kommer du åt AEM JCR
- Integrera tjänster med JMX-konsolen
- Developing the Bulk Editor
- Utveckla rapporter
- eCommerce
- Komponenter
- Kärnkomponenter
- Formatsystem
- Komponenter - översikt
- AEM - Grunderna
- Utveckla AEM
- Utveckla AEM - kodexempel
- JSON-exporterare för innehållstjänster
- Aktivera JSON-export för en komponent
- Bildredigeraren
- Dekoration-tagg
- Använda Dölj villkor
- Konfigurera flera redigerare på plats
- Utvecklarläge
- Testa användargränssnittet
- Komponenter för innehållsfragment
- Hämta sidinformation i JSON-format
- Internationalisering
- Klassiska gränssnittskomponenter
- Headless Experience Management
- Headless och Hybrid with AEM
- Aktivera JSON-export för en komponent
- Enkelsidiga program
- SPA introduktion och genomgång
- SPA WKND - självstudiekurs
- Getting Started with SPA in AEM - React
- Komma igång med SPA i AEM - Angular
- Implementera en React Component for SPA
- SPA djupdykning
- SPA
- Utveckla SPA för AEM
- SPA Blueprint
- SPA
- Dynamisk mappning av modell till komponent för SPA
- SPA
- SPA och Adobe Experience Platform Launch Integration
- SPA- och serveråtergivning
- SPA referensmaterial
- HTTP-API
- Innehållsfragment
- Experience Fragments
- Utvecklingsverktyg
- Utvecklingsverktyg
- AEM Modernization Tools
- Dialogruteredigeraren
- Verktyget Dialogkonvertering
- Utveckla med CRXDE Lite
- Hantera paket med Maven
- Utveckla AEM projekt med Eclipse
- Skapa AEM projekt med Apache Maven
- Utveckla AEM projekt med IntelliJ IDEA
- Så här använder du VLT-verktyget
- Så här använder du proxyserververktyget
- AEM Brackets Extension
- AEM Developer Tools for Eclipse
- AEM
- Personanpassning
- Utöka AEM
- Anpassa sidredigering
- Anpassa konsolerna
- Anpassa vyer av Sidegenskaper
- Konfigurera din sida för gruppredigering av sidegenskaper
- Anpassa och utöka Content Fragments
- Utöka arbetsflöden
- Utöka Multi Site Manager
- Spårning och analys
- Cloud Services
- Skapa anpassade tillägg
- Forms
- Integrera tjänster med JMX-konsolen
- Developing the Bulk Editor
- Utöka Classic UI
- Testning
- Bästa praxis
- Mobil webb