Interagera med arbetsflöden programmatiskt

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.

OBSERVERA

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:

OBSERVERA

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 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"}
]
OBSERVERA

Detta curl -kommandot kan användas med alla arbetsflödesstatus i stället för RUNNING.

Ä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
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
OBSERVERA

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:

  1. Skapa en modell (med ID:t) /var/workflow/models/mymodel/jcr:content/model).
  2. Ta bort modellen.
OBSERVERA

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 ny 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

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
curl -u admin:admin -X DELETE http://localhost:4502/etc/workflow/models/{id}
OBSERVERA

På grund av den detaljnivå som krävs anses kurl inte vara praktiskt när du skapar och/eller läser en modell.

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:

  1. Implementera en OSGI-händelseavlyssnare för att lyssna på när uppgifter skapas och ändras.

  2. Ange en tidsgräns (deadline) och skapa sedan ett schemalagt snedstreck som ska utlösas vid den tidpunkten.

  3. 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

OBSERVERA

De åtgärder som skall vidtas måste vara klart definierade för att kunna använda detta tillvägagångssätt.

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"}
    ]
    
    OBSERVERA

    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
    
    OBSERVERA

    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
    

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;
 }
}

På denna sida