Workflow to be triggered based on xpath query results aem6.5 | Community
Skip to main content
srinivas_chann1
Level 7
September 12, 2022

Workflow to be triggered based on xpath query results aem6.5

  • September 12, 2022
  • 3 replies
  • 1750 views

Hello,

 

In the cronjob , based on the xpath query results .I will need to triggered workflow

 

Could you please provide inputs with any samples as how could be this be achieved.

 

Regards,

Srinivas

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.

3 replies

Sachin_Arora_
Community Advisor
Community Advisor
September 12, 2022

This should work in your case

try {
Map<String, String> map = new HashMap<>();
//update query as per requirement
map.put("path", "path");
map.put("type", "dam:Asset");
QueryBuilder queryBuilder = resolver.adaptTo(QueryBuilder.class);
Session session = resolver.adaptTo(Session.class);
final WorkflowSession workflowSession = resolver.adaptTo(WorkflowSession.class);
Query query = queryBuilder.createQuery(PredicateGroup.create(map), session); SearchResult searchResult = query.getResult(); for (Hit hit : searchResult.getHits()) { finalString payloadPath = hit.getPath(); final String model = "/var/workflow/models/metadata_map_example"; final WorkflowModel workflowModel = workflowSession.getModel(model); final WorkflowData workflowData = workflowSession.newWorkflowData("JCR_PATH", payloadPath); // Start the workflow! workflowSession.startWorkflow(workflowModel, workflowData, workflowMetadata); log.info("Workflow: {} started", model); } } catch (WorkflowException | IOException e) { log.error(e.getMessage(), e); }

Links :

 

srinivas_chann1
Level 7
September 13, 2022

Hello @sachin_arora_ 

It is throwing java.lang.IllegalStateException: Resource resolver is already closed.

In the  workflows methods when they  are getting triggered .How could I resolve this??

 

 try {
           for (Hit hit : searchResult.getHits()) {
           }
} catch (WorkflowException | IOException e) {
              log.error(e.getMessage(), e);

} finally{
       if(resolver!=null){
            resolver.close();
        }
}

Sachin_Arora_
Community Advisor
Community Advisor
September 13, 2022

Please confirm where exactly you are getting the error. Which line of code is failing. 

 

Please check this link :

https://helpx.adobe.com/in/experience-manager/kb/Random-Resource-resolver-is-already-closed-in-the-logs-AEM.html

 

HeenaMadan
Community Advisor and Adobe Champion
Community Advisor and Adobe Champion
September 12, 2022

Execute querybuilder api to fetch results in scheduler. Refer below code and modify as per your requirements

Map<String, String> queryMap = new HashMap<>();
queryMap.put("path", "queryPath..");
 queryMap.put("type", "cq:Page");
//add query criteria in queryMap
 QueryBuilder queryBuilder = resourceResolver.adaptTo(QueryBuilder.class);
Session session = resourceResolver.adaptTo(Session.class);
Query query = queryBuilder.createQuery(PredicateGroup.create(queryMap), session);
SearchResult result = query.getResult();
List<Hit> hits = result.getHits();
for (Hit hit : hits) {
try{
finalString payloadPath = hit.getPath();
final ResourceResolver resolver = request.getResourceResolver();
final WorkflowSession workflowSession = resolver.adaptTo(WorkflowSession.class);
String model = "/var/workflow/models/yourworkflowModel";
final WorkflowModel workflowModel = workflowSession.getModel(model);
		final WorkflowData workflowData = workflowSession.newWorkflowData("JCR_PATH", payloadPath);
workflowSession.startWorkflow(workflowModel, workflowData, workflowMetadata);
}
catch (WorkflowException | IOException e) {
   log.error(e.getMessage(), e);
  }

Refer https://aem.redquark.org/2019/12/workflows-in-aem-05-trigger-workflow.html

 

srinivas_chann1
Level 7
September 14, 2022

Hello ,

 

Could any help me on this.

 

In the xpath query results after triggering the workflows based on asset path , If there is any workflow does not execute successfully and throws an exception can I capture the workflow  path In array list in the cronjob , I tried doing , but it completes the cronjob without waiting for workflows to complete the execution.

 

How to solve this

 

Regards,

Srinivas