Interactuar con flujos de trabajo mediante programación
- Temas:
- Developing
Creado para:
- Developer
When personalización y ampliación de los flujos de trabajo puede acceder a los objetos de flujo de trabajo:
Uso de la API Java del flujo de trabajo
La API Java del flujo de trabajo consiste en la variable com.adobe.granite.workflow
y varios subpaquetes. El miembro más significativo de la API es com.adobe.granite.workflow.WorkflowSession
Clase . La variable WorkflowSession
proporciona acceso a los objetos de flujo de trabajo en tiempo de diseño y en tiempo de ejecución:
- modelos de flujo de trabajo
- elementos de trabajo
- instancias de flujo de trabajo
- datos de flujo de trabajo
- elementos de bandeja de entrada
La clase también proporciona varios métodos para intervenir en los ciclos de vida del flujo de trabajo.
En la tabla siguiente se proporcionan vínculos a la documentación de referencia de varios objetos Java clave que se deben utilizar al interactuar mediante programación con flujos de trabajo. Los siguientes ejemplos muestran cómo obtener y utilizar los objetos de clase en el código.
Obtención de objetos de flujo de trabajo en scripts ECMA
Tal como se describe en Localización de la secuencia de comandos, AEM (a través de Apache Sling) proporciona un motor de secuencias de comandos ECMA que ejecuta secuencias de comandos ECMA del lado del servidor. La variable org.apache.sling.scripting.core.ScriptHelper
está disponible inmediatamente para las secuencias de comandos, ya que la sling
variable.
La variable ScriptHelper
proporciona acceso a la SlingHttpServletRequest
que puede usar para obtener finalmente la variable WorkflowSession
objeto; por ejemplo:
var wfsession = sling.getRequest().getResource().getResourceResolver().adaptTo(Packages.com.adobe.granite.workflow.WorkflowSession);
Uso de la API de REST del flujo de trabajo
La consola Flujo de trabajo utiliza en gran medida la API de REST; por lo tanto, esta página describe la API de REST para flujos de trabajo.
Las siguientes acciones son compatibles con la API de REST:
- iniciar o detener un servicio de flujo de trabajo
- crear, actualizar o eliminar modelos de flujo de trabajo
- iniciar, suspender, reanudar o finalizar instancias de flujo de trabajo
- completar o delegar elementos de trabajo
POST
solicitud.En esta página se da por hecho que AEM se ejecuta en localhost en el puerto 4502
y que el contexto de instalación es " /
" (raíz). Si no es el caso de su instalación, las URI, a las que se aplican las solicitudes HTTP, deben adaptarse en consecuencia.
La renderización admitida para GET
es la renderización JSON. Las direcciones URL de GET
debe tener la variable .json
, por ejemplo:
http://localhost:4502/etc/workflow.json
Administración de instancias de flujo de trabajo
Los siguientes métodos de solicitud HTTP se aplican a:
http://localhost:4502/etc/workflow/instances
GET
POST
-
model
: el ID (URI) del modelo de flujo de trabajo correspondiente-
payloadType
: que contiene el tipo de carga útil (por ejemplo JCR_PATH
o URL).La carga útil se envía como parámetro
payload
. A 201
(CREATED
) se devuelve con un encabezado de ubicación que contiene la dirección URL del nuevo recurso de instancia de flujo de trabajo.Administración de una instancia de flujo de trabajo por su estado
Los siguientes métodos de solicitud HTTP se aplican a:
http://localhost:4502/etc/workflow/instances.{state}
GET
RUNNING
, SUSPENDED
, ABORTED
o COMPLETED
)Administración de una instancia de flujo de trabajo por su ID
Los siguientes métodos de solicitud HTTP se aplican a:
http://localhost:4502/etc/workflow/instances/{id}
GET
POST
state
y debe tener uno de los siguientes valores: RUNNING
, SUSPENDED
o ABORTED
.Si el nuevo estado no está disponible (por ejemplo, al suspender una instancia terminada), se puede establecer un
409
(CONFLICT
) se devuelve al cliente.Administración de modelos de flujo de trabajo
Los siguientes métodos de solicitud HTTP se aplican a:
http://localhost:4502/etc/workflow/models
GET
POST
title
se envía, se crea un nuevo modelo con el título especificado. Adjuntar una definición de modelo JSON como parámetro model
crea un nuevo modelo de flujo de trabajo según la definición proporcionada.A
201
Respuesta (CREATED
) se devuelve con un encabezado de ubicación que contiene la dirección URL del nuevo recurso de modelo de flujo de trabajo.Lo mismo ocurre cuando se adjunta una definición de modelo como un parámetro de archivo denominado
modelfile
.En ambos casos, la variable
model
y modelfile
parámetros, un parámetro adicional llamado type
es necesario para definir el formato de serialización. Se pueden integrar nuevos formatos de serialización mediante la API OSGI. Se entrega un serializador JSON estándar con el motor de flujo de trabajo. Su tipo es JSON. Consulte a continuación un ejemplo del formato.Ejemplo: en el explorador, una solicitud para http://localhost:4502/etc/workflow/models.json
genera una respuesta json similar a la siguiente:
[
{"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"}
]
Administración de un modelo de flujo de trabajo específico
Los siguientes métodos de solicitud HTTP se aplican a:
http://localhost:4502*{uri}*
Donde *{uri}*
es la ruta al nodo de modelo en el repositorio.
GET
HEAD
versión del modelo (definición y metadatos).PUT
HEAD
versión del modelo (crea una nueva versión).La definición completa del modelo para la nueva versión del modelo debe agregarse como parámetro denominado
model
. Además, type
se necesita como al crear nuevos modelos y debe tener el valor JSON
.POST
PUT
operaciones.DELETE
POST
que contiene un X-HTTP-Method-Override
entrada de encabezado con valor DELETE
también se aceptará como DELETE
solicitud.Ejemplo: en el explorador, una solicitud para http://localhost:4502/var/workflow/models/publish_example.json
devuelve un valor json
respuesta similar al siguiente código:
{
"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":
{
}
}
]}
Administración de un modelo de flujo de trabajo por su versión
Los siguientes métodos de solicitud HTTP se aplican a:
http://localhost:4502/etc/workflow/models/{id}.{version}
GET
Administración de bandejas de entrada (de usuario)
Los siguientes métodos de solicitud HTTP se aplican a:
http://localhost:4502/bin/workflow/inbox
GET
POST
item
y avanza la instancia de flujo de trabajo correspondiente a los siguientes nodos, que se definen mediante el parámetro route
o backroute
en caso de retroceder un paso.Si el parámetro
delegatee
se envía, el elemento de trabajo identificado por el parámetro item
se delega al participante especificado.Administración de una bandeja de entrada (de usuario) mediante el ID de WorkItem
Los siguientes métodos de solicitud HTTP se aplican a:
http://localhost:4502/bin/workflow/inbox/{id}
GET
WorkItem
identificado por su ID.Ejemplos
Cómo obtener una lista de todos los flujos de trabajo en ejecución con sus ID
Para obtener una lista de todos los flujos de trabajo en ejecución, haga una GET a:
http://localhost:4502/etc/workflow/instances.RUNNING.json
Cómo obtener una lista de todos los flujos de trabajo en ejecución con sus ID: REST mediante curl
Ejemplo con curl:
curl -u admin:admin http://localhost:4502/etc/workflow/instances.RUNNING.json
La variable uri
mostrado en los resultados se puede utilizar como instancia id
en otros comandos; por ejemplo:
[
{"uri":"/etc/workflow/instances/server0/2017-03-08/request_for_activation_1"}
]
Cómo cambiar el título del flujo de trabajo
Para cambiar el Título del flujo de trabajo se muestra en la Instancias de la consola de flujo de trabajo, envíe un POST
comando:
-
hasta:
http://localhost:4502/etc/workflow/instances/{id}
-
con los siguientes parámetros:
action
: su valor debe ser:UPDATE
workflowTitle
: el título del flujo de trabajo
Cambio del título del flujo de trabajo: REST con curl
Ejemplo 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/es/support/programs/eol-matrix.html). Find the supported versions [here](https://experienceleague.adobe.com/docs/?lang=es).
curl -u admin:admin -d "action=UPDATE&workflowTitle=myWorkflowTitle" http://localhost:4502/etc/workflow/instances/server0/2017-03-08/request_for_activation_1
Lista de todos los modelos de flujo de trabajo
Para obtener una lista de todos los modelos de flujo de trabajo disponibles, haga una GET a:
http://localhost:4502/etc/workflow/models.json
Lista de todos los modelos de flujo de trabajo: REST con curl
Ejemplo con curl:
curl -u admin:admin http://localhost:4502/etc/workflow/models.json
Obtención de un objeto WorkflowSession
La variable com.adobe.granite.workflow.WorkflowSession
es adaptable desde un javax.jcr.Session
objeto o org.apache.sling.api.resource.ResourceResolver
objeto.
Obtención de un objeto WorkflowSession: Java
En una secuencia de comandos JSP (o código Java para una clase servlet), utilice el objeto de solicitud HTTP para obtener un SlingHttpServletRequest
que proporciona acceso a un ResourceResolver
objeto. Adaptar el ResourceResolver
objeto a 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);
%>
Obtención de un objeto WorkflowSession: secuencia de comandos ECMA
Utilice la variable sling
para obtener la variable SlingHttpServletRequest
objeto que utiliza para obtener un ResourceResolver
objeto. Adaptar el ResourceResolver
al WorkflowSession
objeto.
var wfsession = sling.getRequest().getResource().getResourceResolver().adaptTo(Packages.com.adobe.granite.workflow.WorkflowSession);
Creación, lectura o eliminación de modelos de flujo de trabajo
Los siguientes ejemplos muestran cómo acceder a los modelos de flujo de trabajo:
- El código para Java y el script ECMA utiliza la variable
WorkflowSession.createNewModel
método. - El comando curl accede al modelo directamente usando su URL.
Los ejemplos utilizados:
- Creación de un modelo (con el ID
/var/workflow/models/mymodel/jcr:content/model
). - Elimine el modelo.
deleted
propiedad del modelo metaData
nodo secundario a true
.Al crear un modelo nuevo:
-
El editor de modelos de flujo de trabajo requiere que los modelos utilicen una estructura de nodos específica a continuación
/var/workflow/models
. El nodo principal del modelo debe ser del tipocq:Page
tener unjcr:content
con los siguientes valores de propiedad:sling:resourceType
:cq/workflow/components/pages/model
cq:template
:/libs/cq/workflow/templates/model
Al crear un modelo, primero debe crear esto
cq:Page
nodo y utilice sujcr:content
como nodo principal del nodo modelo. -
La variable
id
el argumento que algunos métodos requieren para identificar el modelo es la ruta absoluta del nodo de modelo en el repositorio:/var/workflow/models/<*model_name>*/jcr:content/model
NOTE
Creación, lectura o eliminación de modelos de flujo de trabajo - 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);
%>
Creación, lectura o eliminación de modelos de flujo de trabajo: secuencia de comandos ECMA
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);
Eliminación de un modelo de flujo de trabajo: REST con 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/es/support/programs/eol-matrix.html). Find the supported versions [here](https://experienceleague.adobe.com/docs/?lang=es).
curl -u admin:admin -X DELETE http://localhost:4502/etc/workflow/models/{id}
Filtrado de los flujos de trabajo del sistema al comprobar el estado del flujo de trabajo
Puede usar la variable API WorkflowStatus para recuperar información sobre el estado del flujo de trabajo de un nodo.
Varios métodos tienen el parámetro :
excludeSystemWorkflows
Este parámetro se puede establecer en true
para indicar que los flujos de trabajo del sistema deben excluirse de los resultados relevantes.
You puede actualizar la configuración de OSGi Carga útil de flujo de trabajo de Granite de AdobeMapCache que especifica el flujo de trabajo Models
para considerarse como flujos de trabajo del sistema. Los modelos de flujo de trabajo predeterminados (en tiempo de ejecución) son:
/var/workflow/models/scheduled_activation/jcr:content/model
/var/workflow/models/scheduled_deactivation/jcr:content/model
Avance automático del paso del participante después de un tiempo de espera
Si necesita avanzar automáticamente un Participante paso que no se haya completado en un tiempo predefinido, puede:
-
Implemente un detector de eventos OSGI para escuchar la creación y modificación de tareas.
-
Especifique un tiempo de espera (fecha límite) y, a continuación, cree un trabajo de sling programado para que se active en ese momento.
-
Escriba un controlador de trabajo al que se notifique cuando caduque el tiempo de espera y se déclencheur el trabajo.
Este controlador realizará la acción necesaria en la tarea si la tarea aún no se ha completado
Interactuar con instancias de flujo de trabajo
A continuación se proporcionan ejemplos básicos de cómo interactuar (de forma programática) con instancias de flujo de trabajo.
Interactuar con instancias de flujo de trabajo - 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);
Interactuar con instancias de flujo de trabajo: secuencia de comandos ECMA
// 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);
Interactuar con instancias de flujo de trabajo: REST con curl
-
Inicio de un flujo de trabajo
# 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
-
Lista de instancias
# listing the instances curl -u admin:admin http://localhost:4502/etc/workflow/instances.json
Se enumerarán todas las instancias; por ejemplo:
[ {"uri":"/var/workflow/instances/server0/2018-02-26/prototype-01_1"} ,{"uri":"/var/workflow/instances/server0/2018-02-26/prototype-01_2"} ]
NOTE
Consulte Cómo obtener una lista de todos los flujos de trabajo en ejecución con sus ID para enumerar instancias con un estado específico. -
Suspender un flujo de trabajo
# 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
-
Reanudación de un flujo de trabajo
# 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
-
Finalización de una instancia de flujo de trabajo
# 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
Interactuar con elementos de trabajo
A continuación se proporcionan ejemplos básicos de cómo interactuar (mediante programación) con elementos de trabajo.
Interactuar con elementos de trabajo - 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));
Interactuar con elementos de trabajo: secuencia de comandos ECMA
// 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));
Interactuar con elementos de trabajo: REST con curl
-
Listado de elementos de trabajo de la bandeja de entrada
# listing the work items curl -u admin:admin http://localhost:4502/bin/workflow/inbox
Se enumerarán los detalles de los elementos de trabajo que se encuentran actualmente en la Bandeja de entrada; por ejemplo:
[{ "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" }
-
Delegación de elementos de trabajo
# 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
La variabledelegatee
debe ser una opción válida para el paso del flujo de trabajo. -
Finalización o avance de elementos de trabajo al paso siguiente
# 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
Escucha de eventos de flujo de trabajo
Utilice el marco de eventos OSGi para detectar eventos que com.adobe.granite.workflow.event.WorkflowEvent
define la clase. Esta clase también proporciona varios métodos útiles para obtener información sobre el asunto del evento. Por ejemplo, la variable getWorkItem
devuelve el valor WorkItem
para el elemento de trabajo involucrado en el evento.
El siguiente código de ejemplo define un servicio que escucha los eventos de flujo de trabajo y realiza tareas según el tipo de 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;
}
}