Obter objetos de fluxo de trabalho em scripts ECMA
Conforme descrito em Localização do script, AEM (via Apache Sling) fornece um mecanismo de script ECMA que executa scripts ECMA do lado do servidor. O org.apache.sling.scripting.core.ScriptHelper
A classe está imediatamente disponível para seus scripts como sling
variável.
O ScriptHelper
fornece acesso à SlingHttpServletRequest
que você pode usar para obter o WorkflowSession
objeto; por exemplo:
var wfsession = sling.getRequest().getResource().getResourceResolver().adaptTo(Packages.com.adobe.granite.workflow.WorkflowSession);
Uso da API REST do fluxo de trabalho
O console Fluxo de trabalho utiliza pesadamente a REST API; assim, esta página descreve a REST API para fluxos de trabalho.
As seguintes ações são compatíveis com a REST API:
- iniciar ou parar um serviço de workflow
- criar, atualizar ou excluir modelos de fluxo de trabalho
- iniciar, suspender, retomar ou encerrar instâncias de fluxo de trabalho
- concluir ou delegar itens de trabalho
POST
solicitação.Nesta página, presume-se que AEM seja executado em localhost na porta 4502
e que o contexto de instalação é " /
" (raiz). Se não for o caso de sua instalação, os URIs, aos quais as solicitações HTTP se aplicam, precisam ser adaptados adequadamente.
A renderização suportada para GET
solicitações é a renderização JSON. Os URLs para GET
deve ter .json
, por exemplo:
http://localhost:4502/etc/workflow.json
Gerenciamento de instâncias de fluxo de trabalho
Os seguintes métodos de solicitação HTTP se aplicam a:
http://localhost:4502/etc/workflow/instances
Gerenciando uma Instância de Workflow pelo Estado
Os seguintes métodos de solicitação HTTP se aplicam a:
http://localhost:4502/etc/workflow/instances.{state}
método de solicitação HTTP | Ações |
---|---|
GET | Lista as instâncias de fluxo de trabalho disponíveis e seus estados ( RUNNING , SUSPENDED , ABORTED ou COMPLETED ) |
Gerenciamento de uma instância de fluxo de trabalho pela ID
Os seguintes métodos de solicitação HTTP se aplicam a:
http://localhost:4502/etc/workflow/instances/{id}
Gerenciamento de modelos de fluxo de trabalho
Os seguintes métodos de solicitação HTTP se aplicam a:
http://localhost:4502/etc/workflow/models
Exemplo: no navegador, uma solicitação para http://localhost:4502/etc/workflow/models.json
gera uma resposta json semelhante ao seguinte:
[
{"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"}
]
Gerenciar um modelo de fluxo de trabalho específico
Os seguintes métodos de solicitação HTTP se aplicam a:
http://localhost:4502*{uri}*
Onde *{uri}*
é o caminho para o nó modelo no repositório.
Exemplo: no navegador, uma solicitação para http://localhost:4502/var/workflow/models/publish_example.json
retorna um json
que é semelhante ao seguinte 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":
{
}
}
]}
Gerenciar um modelo de fluxo de trabalho por sua versão
Os seguintes métodos de solicitação HTTP se aplicam a:
http://localhost:4502/etc/workflow/models/{id}.{version}
método de solicitação HTTP | Ações |
---|---|
GET | Obtém os dados do modelo na versão especificada (se existir). |
Gerenciar caixas de entrada (usuário)
Os seguintes métodos de solicitação HTTP se aplicam a:
http://localhost:4502/bin/workflow/inbox
Gerenciando uma Caixa de Entrada (Usuário) pela ID de Item de Trabalho
Os seguintes métodos de solicitação HTTP se aplicam a:
http://localhost:4502/bin/workflow/inbox/{id}
método de solicitação HTTP | Ações |
---|---|
GET | Obtém os dados (definição e metadados) da caixa de entrada WorkItem identificado por sua ID. |
Exemplos
Como obter uma lista de todos os fluxos de trabalho em execução com suas IDs
Para obter uma lista de todos os workflows em execução, faça um GET para:
http://localhost:4502/etc/workflow/instances.RUNNING.json
Como obter uma lista de todos os fluxos de trabalho em execução com suas IDs - REST usando curl
Exemplo usando curl:
curl -u admin:admin http://localhost:4502/etc/workflow/instances.RUNNING.json
O uri
exibidos nos resultados podem ser usados como a instância id
Em outros comandos; por exemplo:
[
{"uri":"/etc/workflow/instances/server0/2017-03-08/request_for_activation_1"}
]
Como alterar o título do fluxo de trabalho
Para alterar o Título do fluxo de trabalho exibido no Instâncias do console do fluxo de trabalho, envie um POST
comando:
-
para:
http://localhost:4502/etc/workflow/instances/{id}
-
com os seguintes parâmetros:
action
: O seu valor deve ser:UPDATE
workflowTitle
: o título do fluxo de trabalho
Como alterar o título do fluxo de trabalho - REST usando curl
Exemplo usando 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/br/support/programs/eol-matrix.html). Find the supported versions [here](https://experienceleague.adobe.com/docs/?lang=pt-BR).
curl -u admin:admin -d "action=UPDATE&workflowTitle=myWorkflowTitle" http://localhost:4502/etc/workflow/instances/server0/2017-03-08/request_for_activation_1
Como listar todos os modelos de fluxo de trabalho
Para obter uma lista de todos os modelos de fluxo de trabalho disponíveis, faça uma GET para:
http://localhost:4502/etc/workflow/models.json
Como listar todos os modelos de fluxo de trabalho - REST usando curl
Exemplo usando curl:
curl -u admin:admin http://localhost:4502/etc/workflow/models.json
Obter um objeto WorkflowSession
O com.adobe.granite.workflow.WorkflowSession
classe é adaptável a partir de um javax.jcr.Session
objeto ou um org.apache.sling.api.resource.ResourceResolver
objeto.
Obter um objeto WorkflowSession - Java
Em um script JSP (ou código Java para uma classe de servlet), use o objeto de solicitação HTTP para obter um SlingHttpServletRequest
que fornece acesso a um ResourceResolver
objeto. Adapte o ResourceResolver
objeto para 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);
%>
Obter um objeto WorkflowSession - Script ECMA
Use o sling
para obter a variável SlingHttpServletRequest
objeto usado para obter um ResourceResolver
objeto. Adapte o ResourceResolver
para WorkflowSession
objeto.
var wfsession = sling.getRequest().getResource().getResourceResolver().adaptTo(Packages.com.adobe.granite.workflow.WorkflowSession);
Como criar, ler ou excluir modelos de fluxo de trabalho
Os exemplos a seguir mostram como acessar modelos de fluxo de trabalho:
- O código para Java e ECMA script usa a variável
WorkflowSession.createNewModel
método . - O comando curl acessa o modelo diretamente usando seu URL.
Os exemplos usados:
- Criar um modelo (com a ID
/var/workflow/models/mymodel/jcr:content/model
). - Exclua o modelo.
deleted
propriedade do modelo metaData
nó filho para true
.Ao criar um novo modelo:
-
O editor de modelo de fluxo de trabalho requer que os modelos usem uma estrutura de nó específica abaixo
/var/workflow/models
. O nó pai do modelo deve ser do tipocq:Page
ter umjcr:content
nó com os seguintes valores de propriedade:sling:resourceType
:cq/workflow/components/pages/model
cq:template
:/libs/cq/workflow/templates/model
Ao criar um modelo, você deve primeiro criar
cq:Page
nó e use seujcr:content
como o pai do nó modelo. -
O
id
O argumento que alguns métodos exigem para identificar o modelo é o caminho absoluto do nó do modelo no repositório:/var/workflow/models/<*model_name>*/jcr:content/model
NOTE
Criação, leitura ou exclusão de modelos de fluxo de trabalho - 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);
%>
Criação, Leitura ou Exclusão de Modelos de Fluxo de Trabalho - Script 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);
Exclusão de um modelo de fluxo de trabalho - REST usando 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/br/support/programs/eol-matrix.html). Find the supported versions [here](https://experienceleague.adobe.com/docs/?lang=pt-BR).
curl -u admin:admin -X DELETE http://localhost:4502/etc/workflow/models/{id}
Filtrar workflows do sistema ao verificar o status do workflow
Você pode usar o API WorkflowStatus para recuperar informações sobre o status do workflow de um nó.
Vários métodos têm o parâmetro :
excludeSystemWorkflows
Esse parâmetro pode ser definido como true
para indicar que os fluxos de trabalho do sistema devem ser excluídos dos resultados relevantes.
Você pode atualizar a configuração do OSGi Fluxo de trabalho do Adobe Granite PayloadMapCache que especifica o workflow Models
para ser considerado como workflows do sistema. Os modelos de fluxo de trabalho padrão (tempo de execução) são:
/var/workflow/models/scheduled_activation/jcr:content/model
/var/workflow/models/scheduled_deactivation/jcr:content/model
Avançar automaticamente etapa do participante após um tempo limite
Se você precisar avançar automaticamente um Participante etapa que não foi concluída em um tempo predefinido, é possível:
-
Implemente um ouvinte de evento OSGI para acompanhar a criação e a modificação da tarefa.
-
Especifique um tempo limite (prazo) e crie um trabalho de sling agendado para ser disparado nesse momento.
-
Escreva um manipulador de tarefas que seja notificado quando o tempo limite expirar e acione o trabalho.
Esse manipulador executará a ação necessária na tarefa se ela ainda não estiver concluída
Interação com instâncias de fluxo de trabalho
Os seguintes fornecem exemplos básicos de como interagir (programaticamente) com instâncias de fluxo de trabalho.
Interação com instâncias de fluxo de trabalho - 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);
Interagir com instâncias de fluxo de trabalho - Script 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);
Interagir com instâncias de fluxo de trabalho - REST usando curl
-
Iniciar um workflow
# 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
-
Listar as instâncias
# listing the instances curl -u admin:admin http://localhost:4502/etc/workflow/instances.json
Isso listará todas as instâncias; por exemplo:
[ {"uri":"/var/workflow/instances/server0/2018-02-26/prototype-01_1"} ,{"uri":"/var/workflow/instances/server0/2018-02-26/prototype-01_2"} ]
NOTE
Consulte Como obter uma lista de todos os fluxos de trabalho em execução com suas IDs para listar instâncias com um status específico. -
Suspensão de um fluxo de trabalho
# 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
-
Retomar um workflow
# 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
-
Encerrar uma instância de fluxo de trabalho
# 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
Interagir com Itens de Trabalho
Os seguintes fornecem exemplos básicos de como interagir (programaticamente) com itens de trabalho.
Interagir com itens de trabalho - 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));
Interagir com itens de trabalho - Script 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));
Interagir com Itens de Trabalho - REST usando curl
-
Listar itens de trabalho da caixa de entrada
# listing the work items curl -u admin:admin http://localhost:4502/bin/workflow/inbox
Os detalhes dos itens de trabalho que estão na Caixa de entrada serão listados; por exemplo:
[{ "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" }
-
Delegar itens de trabalho
# 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
Odelegatee
deve ser uma opção válida para a etapa do fluxo de trabalho. -
Concluir ou avançar itens de trabalho para a próxima etapa
# 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
Acompanhamento de eventos de fluxo de trabalho
Use a estrutura de evento OSGi para acompanhar eventos que a variável com.adobe.granite.workflow.event.WorkflowEvent
classe define. Essa classe também fornece vários métodos úteis para obter informações sobre o assunto do evento. Por exemplo, a variável getWorkItem
método retorna WorkItem
para o item de trabalho envolvido no evento.
O código de exemplo a seguir define um serviço que escuta eventos de fluxo de trabalho e executa tarefas de acordo com o 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;
}
}