Inheritance Value Map in Experience Fragment | Community
Skip to main content
Level 6
March 8, 2024
Solved

Inheritance Value Map in Experience Fragment

  • March 8, 2024
  • 1 reply
  • 525 views

I have experience Fragment Footer/master.


There is a tag field (cq:tags) available on both Footer and Master. I have authored on Footer but not on master

 

Now if I try to run a workflow on master and try to fetch cq:tags using InheritanceValueMap I am not able to fetch from Footer properties.

 

InheritanceValueMap inheritanceValueMap = new HierarchyNodeInheritanceValueMap(resource);
String[] tagValue = inheritanceValueMap.getInherited("cq:tags", String[].class);

 

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

I've tried by initiating a Workflow Model on the master node. And I can have the value of cq:tags I have set on the parent Footer Experience Fragment.

My Workflow Model has a custom WorkflowProcess. Here is the simplified version of the code - 

@Slf4j @Component(service = WorkflowProcess.class, property = {"process.label=Test Workflow Process"}) public class TestProcess implements WorkflowProcess { @9944223 public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap metaDataMap) throws WorkflowException { try { Session session = workflowSession.adaptTo(Session.class); WorkflowData workflowData = workItem.getWorkflowData(); if ("JCR_PATH".equals(workflowData.getPayloadType()) && workflowData.getPayload() != null) { String payloadData = workflowData.getPayload().toString(); String pagePath = session.itemExists(payloadData) ? payloadData : StringUtils.EMPTY; Resource resource = workflowSession.adaptTo(ResourceResolver.class).getResource(pagePath); String[] tagValue = new HierarchyNodeInheritanceValueMap(resource).getInherited("cq:tags", String[].class); log.info(String.join(", ", tagValue)); } } catch (RuntimeException | RepositoryException e) { log.error("error due to {}", e.getMessage(), e); } } }

 

Please make sure that your imports are from com.adobe.granite.workflow. Here are the ones I used - 

import com.adobe.granite.workflow.WorkflowException; import com.adobe.granite.workflow.WorkflowSession; import com.adobe.granite.workflow.exec.WorkItem; import com.adobe.granite.workflow.exec.WorkflowData; import com.adobe.granite.workflow.exec.WorkflowProcess; import com.adobe.granite.workflow.metadata.MetaDataMap; import com.day.cq.commons.inherit.HierarchyNodeInheritanceValueMap; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; import org.osgi.service.component.annotations.Component; import javax.jcr.RepositoryException; import javax.jcr.Session;

 

1 reply

arifuzzamanAccepted solution
March 8, 2024

I've tried by initiating a Workflow Model on the master node. And I can have the value of cq:tags I have set on the parent Footer Experience Fragment.

My Workflow Model has a custom WorkflowProcess. Here is the simplified version of the code - 

@Slf4j @Component(service = WorkflowProcess.class, property = {"process.label=Test Workflow Process"}) public class TestProcess implements WorkflowProcess { @9944223 public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap metaDataMap) throws WorkflowException { try { Session session = workflowSession.adaptTo(Session.class); WorkflowData workflowData = workItem.getWorkflowData(); if ("JCR_PATH".equals(workflowData.getPayloadType()) && workflowData.getPayload() != null) { String payloadData = workflowData.getPayload().toString(); String pagePath = session.itemExists(payloadData) ? payloadData : StringUtils.EMPTY; Resource resource = workflowSession.adaptTo(ResourceResolver.class).getResource(pagePath); String[] tagValue = new HierarchyNodeInheritanceValueMap(resource).getInherited("cq:tags", String[].class); log.info(String.join(", ", tagValue)); } } catch (RuntimeException | RepositoryException e) { log.error("error due to {}", e.getMessage(), e); } } }

 

Please make sure that your imports are from com.adobe.granite.workflow. Here are the ones I used - 

import com.adobe.granite.workflow.WorkflowException; import com.adobe.granite.workflow.WorkflowSession; import com.adobe.granite.workflow.exec.WorkItem; import com.adobe.granite.workflow.exec.WorkflowData; import com.adobe.granite.workflow.exec.WorkflowProcess; import com.adobe.granite.workflow.metadata.MetaDataMap; import com.day.cq.commons.inherit.HierarchyNodeInheritanceValueMap; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; import org.osgi.service.component.annotations.Component; import javax.jcr.RepositoryException; import javax.jcr.Session;