Expand my Community achievements bar.

Don’t miss the AEM Skill Exchange in SF on Nov 14—hear from industry leaders, learn best practices, and enhance your AEM strategy with practical tips.
SOLVED

Inheritance Value Map in Experience Fragment

Avatar

Level 7

I have experience Fragment Footer/master.

Ronnie09_1-1709899617114.png


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);

 

Topics

Topics help categorize Community content and increase your ability to discover relevant content.

1 Accepted Solution

Avatar

Correct answer by
Level 1

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 {
    @Override
    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;

 

View solution in original post

1 Reply

Avatar

Correct answer by
Level 1

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 {
    @Override
    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;