Interazione con flussi di lavoro a livello di programmazione interacting-with-workflows-programmatically
Quando personalizzazione ed estensione dei flussi di lavoro è possibile accedere agli oggetti del flusso di lavoro:
Utilizzo dell’API Java per i flussi di lavoro using-the-workflow-java-api
L’API Java del flusso di lavoro è costituita dal com.adobe.granite.workflow
pacchetto e diversi pacchetti secondari. Il membro più significativo dell’API è il com.adobe.granite.workflow.WorkflowSession
classe. La WorkflowSession
class fornisce l'accesso sia agli oggetti del flusso di lavoro in fase di progettazione che di runtime:
- modelli di flusso di lavoro
- articoli di lavoro
- istanze del flusso di lavoro
- dati del flusso di lavoro
- elementi casella in entrata
La classe fornisce anche diversi metodi per intervenire nei cicli di vita del flusso di lavoro.
La tabella seguente fornisce collegamenti alla documentazione di riferimento di diversi oggetti Java chiave da utilizzare durante l’interazione programmatica con i flussi di lavoro. Gli esempi seguenti illustrano come ottenere e utilizzare gli oggetti classe nel codice.
Ottenimento di oggetti del flusso di lavoro negli script ECMA obtaining-workflow-objects-in-ecma-scripts
Come descritto in Individuazione dello script, AEM (tramite Apache Sling) fornisce un motore di script ECMA che esegue gli script ECMA lato server. La org.apache.sling.scripting.core.ScriptHelper
la classe è immediatamente disponibile per gli script come sling
variabile.
La ScriptHelper
fornisce l'accesso al SlingHttpServletRequest
che è possibile utilizzare per ottenere WorkflowSession
oggetto; ad esempio:
var wfsession = sling.getRequest().getResource().getResourceResolver().adaptTo(Packages.com.adobe.granite.workflow.WorkflowSession);
Utilizzo dell’API REST del flusso di lavoro using-the-workflow-rest-api
La console Flusso di lavoro utilizza intensamente l’API REST; questa pagina descrive quindi l’API REST per i flussi di lavoro.
Le seguenti azioni sono supportate con l’API REST:
- avviare o interrompere un servizio flusso di lavoro
- creare, aggiornare o eliminare modelli di flusso di lavoro
- avviare, sospendere, riprendere o interrompere le istanze del flusso di lavoro
- completare o delegare elementi di lavoro
POST
richiesta.In questa pagina si presume che AEM eseguito su localhost alla porta 4502
e che il contesto dell'installazione è " /
" (root). Se non è il caso dell’installazione, gli URI a cui si applicano le richieste HTTP devono essere adattati di conseguenza.
Rendering supportato per GET
richiede è il rendering JSON. Gli URL per GET
devono avere .json
ad esempio:
http://localhost:4502/etc/workflow.json
Gestione delle istanze dei flussi di lavoro managing-workflow-instances
I seguenti metodi di richiesta HTTP si applicano a:
http://localhost:4502/etc/workflow/instances
Gestione di un’istanza di flusso di lavoro per stato managing-a-workflow-instance-by-its-state
I seguenti metodi di richiesta HTTP si applicano a:
http://localhost:4502/etc/workflow/instances.{state}
GET
RUNNING
, SUSPENDED
, ABORTED
o COMPLETED
)Gestione di un’istanza di flusso di lavoro per il relativo ID managing-a-workflow-instance-by-its-id
I seguenti metodi di richiesta HTTP si applicano a:
http://localhost:4502/etc/workflow/instances/{id}
Gestione dei modelli di flussi di lavoro managing-workflow-models
I seguenti metodi di richiesta HTTP si applicano a:
http://localhost:4502/etc/workflow/models
Esempio: nel browser, una richiesta a http://localhost:4502/etc/workflow/models.json
genera una risposta json simile alla seguente:
[
{"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"}
]
Gestione di un modello di flusso di lavoro specifico managing-a-specific-workflow-model
I seguenti metodi di richiesta HTTP si applicano a:
http://localhost:4502*{uri}*
Dove *{uri}*
è il percorso del nodo del modello nel repository.
Esempio: nel browser, una richiesta a http://localhost:4502/var/workflow/models/publish_example.json
restituisce json
risposta simile al seguente codice:
{
"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":
{
}
}
]}
Gestione di un modello di flusso di lavoro per versione managing-a-workflow-model-by-its-version
I seguenti metodi di richiesta HTTP si applicano a:
http://localhost:4502/etc/workflow/models/{id}.{version}
GET
Gestione delle caselle in entrata (utente) managing-user-inboxes
I seguenti metodi di richiesta HTTP si applicano a:
http://localhost:4502/bin/workflow/inbox
Gestione di una casella in entrata (utente) tramite l’ID WorkItem managing-a-user-inbox-by-the-workitem-id
I seguenti metodi di richiesta HTTP si applicano a:
http://localhost:4502/bin/workflow/inbox/{id}
GET
WorkItem
identificato dal relativo ID.Esempi examples
Come ottenere un elenco di tutti i flussi di lavoro in esecuzione con i relativi ID how-to-get-a-list-of-all-running-workflows-with-their-ids
Per ottenere un elenco di tutti i flussi di lavoro in esecuzione, effettua una GET per:
http://localhost:4502/etc/workflow/instances.RUNNING.json
Come ottenere un elenco di tutti i flussi di lavoro in esecuzione con i loro ID - REST utilizzando curl how-to-get-a-list-of-all-running-workflows-with-their-ids-rest-using-curl
Esempio con curl:
curl -u admin:admin http://localhost:4502/etc/workflow/instances.RUNNING.json
La uri
visualizzati nei risultati può essere utilizzato come istanza id
in altri comandi; ad esempio:
[
{"uri":"/etc/workflow/instances/server0/2017-03-08/request_for_activation_1"}
]
Come modificare il titolo del flusso di lavoro how-to-change-the-workflow-title
Per modificare la variabile Titolo flusso di lavoro visualizzati nella Istanze scheda della console del flusso di lavoro, invia POST
comando:
-
a:
http://localhost:4502/etc/workflow/instances/{id}
-
con i seguenti parametri:
action
: il suo valore deve essere:UPDATE
workflowTitle
: titolo del flusso di lavoro
Come modificare il titolo del flusso di lavoro - REST utilizzando curl how-to-change-the-workflow-title-rest-using-curl
Esempio con curl:
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/it/support/programs/eol-matrix.html). Find the supported versions [here](https://experienceleague.adobe.com/docs/?lang=it).
curl -u admin:admin -d "action=UPDATE&workflowTitle=myWorkflowTitle" http://localhost:4502/etc/workflow/instances/server0/2017-03-08/request_for_activation_1
Come elencare tutti i modelli di flussi di lavoro how-to-list-all-workflow-models
Per ottenere un elenco di tutti i modelli di flusso di lavoro disponibili, effettua una GET per:
http://localhost:4502/etc/workflow/models.json
Come elencare tutti i modelli di flussi di lavoro - REST utilizzando curl how-to-list-all-workflow-models-rest-using-curl
Esempio con curl:
curl -u admin:admin http://localhost:4502/etc/workflow/models.json
Ottenimento di un oggetto WorkflowSession obtaining-a-workflowsession-object
La com.adobe.granite.workflow.WorkflowSession
La classe è adattabile da un javax.jcr.Session
oggetto o org.apache.sling.api.resource.ResourceResolver
oggetto.
Ottenimento di un oggetto WorkflowSession - Java obtaining-a-workflowsession-object-java
In uno script JSP (o codice Java per una classe servlet), utilizza l’oggetto richiesta HTTP per ottenere un SlingHttpServletRequest
che consente l'accesso a un ResourceResolver
oggetto. Adatta il ResourceResolver
oggetto 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);
%>
Ottenimento di un oggetto WorkflowSession - Script ECMA obtaining-a-workflowsession-object-ecma-script
Utilizza la sling
per ottenere la variabile SlingHttpServletRequest
oggetto utilizzato per ottenere un ResourceResolver
oggetto. Adatta il ResourceResolver
dell'oggetto WorkflowSession
oggetto.
var wfsession = sling.getRequest().getResource().getResourceResolver().adaptTo(Packages.com.adobe.granite.workflow.WorkflowSession);
Creazione, lettura o eliminazione di modelli di flussi di lavoro creating-reading-or-deleting-workflow-models
Gli esempi seguenti mostrano come accedere ai modelli di flusso di lavoro:
- Il codice per gli script Java ed ECMA utilizza la variabile
WorkflowSession.createNewModel
metodo . - Il comando curl accede direttamente al modello utilizzando il relativo URL.
Gli esempi utilizzati:
- Creare un modello (con l'ID
/var/workflow/models/mymodel/jcr:content/model
). - Elimina il modello.
deleted
proprietà del modello metaData
nodo figlio a true
.Durante la creazione di un nuovo modello:
-
L’editor del modello di flusso di lavoro richiede che i modelli utilizzino una specifica struttura di nodo
/var/workflow/models
. Il nodo padre del modello deve essere del tipocq:Page
averejcr:content
nodo con i seguenti valori di proprietà:sling:resourceType
:cq/workflow/components/pages/model
cq:template
:/libs/cq/workflow/templates/model
Quando crei un modello, devi prima crearlo
cq:Page
e utilizzarne il nodojcr:content
come nodo principale del nodo del modello. -
La
id
argomento che alcuni metodi richiedono per identificare il modello è il percorso assoluto del nodo del modello nel repository:/var/workflow/models/<*model_name>*/jcr:content/model
note note NOTE Vedi Come elencare tutti i modelli di flussi di lavoro.
Creazione, lettura o eliminazione di modelli di flussi di lavoro - Java creating-reading-or-deleting-workflow-models-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);
%>
Creazione, lettura o eliminazione di modelli di flussi di lavoro - Script ECMA creating-reading-or-deleting-workflow-models-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);
Eliminazione di un modello di flusso di lavoro - REST con curl deleting-a-workflow-model-rest-using-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/it/support/programs/eol-matrix.html). Find the supported versions [here](https://experienceleague.adobe.com/docs/?lang=it).
curl -u admin:admin -X DELETE http://localhost:4502/etc/workflow/models/{id}
Filtro dei flussi di lavoro del sistema durante il controllo dello stato del flusso di lavoro filtering-out-system-workflows-when-checking-workflow-status
È possibile utilizzare API WorkflowStatus per recuperare informazioni sullo stato del flusso di lavoro di un nodo.
Diversi metodi hanno il parametro :
excludeSystemWorkflows
Questo parametro può essere impostato su true
per indicare che i flussi di lavoro di sistema devono essere esclusi dai risultati pertinenti.
You può aggiornare la configurazione OSGi Adobe PayloadMapCache del flusso di lavoro Granite specifica il flusso di lavoro Models
da considerare flussi di lavoro di sistema. I modelli di flusso di lavoro predefiniti (runtime) sono:
/var/workflow/models/scheduled_activation/jcr:content/model
/var/workflow/models/scheduled_deactivation/jcr:content/model
Avanzamento automatico del Passaggio partecipante dopo un timeout auto-advance-participant-step-after-a-timeout
Se devi avanzare automaticamente un Partecipante passaggio che non è stato completato entro un periodo di tempo predefinito:
-
Implementa un listener di eventi OSGI per ascoltare la creazione e la modifica delle attività.
-
Specifica un timeout (scadenza), quindi crea un processo sling pianificato da attivare in quel momento.
-
Scrivi un gestore di processi che viene notificato alla scadenza del timeout e attiva il processo.
Se l'attività non è ancora stata completata, il gestore eseguirà l'azione richiesta
Interazione con le istanze del flusso di lavoro interacting-with-workflow-instances
Di seguito sono riportati alcuni esempi di base su come interagire (in modo programmatico) con le istanze del flusso di lavoro.
Interazione con le istanze del flusso di lavoro - Java interacting-with-workflow-instances-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);
Interazione con le istanze del flusso di lavoro - Script ECMA interacting-with-workflow-instances-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);
Interazione con le istanze del flusso di lavoro - REST con curl interacting-with-workflow-instances-rest-using-curl
-
Avvio di un flusso di lavoro
code language-shell # 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
-
Elenco delle istanze
code language-shell # listing the instances curl -u admin:admin http://localhost:4502/etc/workflow/instances.json
In questo modo verranno elencate tutte le istanze; ad esempio:
code language-shell [ {"uri":"/var/workflow/instances/server0/2018-02-26/prototype-01_1"} ,{"uri":"/var/workflow/instances/server0/2018-02-26/prototype-01_2"} ]
note note NOTE Vedi Come ottenere un elenco di tutti i flussi di lavoro in esecuzione con i loro ID per elencare le istanze con uno stato specifico. -
Sospensione di un flusso di lavoro
code language-shell # 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
-
Ripresa di un flusso di lavoro
code language-shell # 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
-
Terminazione di un'istanza di flusso di lavoro
code language-shell # 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
Interazione con gli elementi di lavoro interacting-with-work-items
Di seguito sono riportati alcuni esempi di base su come interagire (in modo progammatico) con gli elementi di lavoro.
Interazione con gli elementi di lavoro - Java interacting-with-work-items-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));
Interazione con gli elementi di lavoro - Script ECMA interacting-with-work-items-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));
Interazione con gli elementi di lavoro - REST con curl interacting-with-work-items-rest-using-curl
-
Inserimento di elementi di lavoro dalla casella in entrata
code language-shell # listing the work items curl -u admin:admin http://localhost:4502/bin/workflow/inbox
Vengono elencati i dettagli relativi agli elementi di lavoro attualmente presenti nella casella in entrata; ad esempio:
code language-shell [{ "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" }
-
Delega degli elementi di lavoro
code language-xml # 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 note NOTE La delegatee
deve essere un'opzione valida per il passaggio del flusso di lavoro. -
Completamento o avanzamento degli elementi di lavoro al passaggio successivo
code language-xml # 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
Ascolto degli eventi del flusso di lavoro listening-for-workflow-events
Utilizza il framework di eventi OSGi per ascoltare gli eventi che il com.adobe.granite.workflow.event.WorkflowEvent
la classe definisce. Questa classe fornisce anche diversi metodi utili per ottenere informazioni sull'oggetto dell'evento. Ad esempio, il getWorkItem
restituisce il WorkItem
oggetto per l'elemento di lavoro coinvolto nell'evento.
Il codice di esempio seguente definisce un servizio che ascolta gli eventi del flusso di lavoro ed esegue le attività in base al tipo di evento.
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;
}
}