Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
Bedrock Mission!

Learn more

View all

Sign in to view all badges

Adobe Summit 2023 [19th to 23rd March, Las Vegas and Virtual] | Complete AEM Session & Lab list
SOLVED

Lock Page with initiator or author user from workflow

Avatar

Level 1

Is there any option where we can lock the page in workflow from workflow process step with initiator or author user.

1 Accepted Solution

Avatar

Correct answer by
Community Advisor

Hi @sai2teja 

Passing same code from @DEBAL_DAS

Page lock workflow process step -

/**
 * 
 */
package com.aem.demo.core.workflows;

import java.util.Objects;

import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.osgi.framework.Constants;
import org.osgi.service.component.annotations.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

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.WorkflowProcess;
import com.adobe.granite.workflow.metadata.MetaDataMap;
import com.day.cq.wcm.api.Page;
import com.day.cq.wcm.api.WCMException;

/**
 * @author debal This workflow step is responsible to lock AEM page.
 */

@Component(property = { Constants.SERVICE_DESCRIPTION + "=This workflow step is responsible to lock AEM page",
		Constants.SERVICE_VENDOR + "=AEM Demo Debal", "process.label" + "=Page lock process" })
public class PageLockWorkflowStep implements WorkflowProcess {

	private final Logger logger = LoggerFactory.getLogger(PageLockWorkflowStep.class);

	@Override
	public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap metaDataMap)
			throws WorkflowException {

		String payloadPath = workItem.getWorkflowData().getPayload().toString();

		ResourceResolver resourceResolver = workflowSession.adaptTo(ResourceResolver.class);

		Resource resource = resourceResolver.getResource(payloadPath);

		if (Objects.nonNull(resource) && resource.isResourceType("cq:Page")) {

			Page page = resource.adaptTo(Page.class);
			try {
				page.lock();
			} catch (WCMException e) {

				logger.error("Unable to lock the given Page", e.getMessage());
			}

		} else {
			logger.info("**** Resource isn't a page**** {} ");
		}
	}

}

 

Similar question here: https://experienceleaguecommunities.adobe.com/t5/adobe-experience-manager/lock-and-unlock-publish-pa...


Regards,
Santosh

3 Replies

Avatar

Correct answer by
Community Advisor

Hi @sai2teja 

Passing same code from @DEBAL_DAS

Page lock workflow process step -

/**
 * 
 */
package com.aem.demo.core.workflows;

import java.util.Objects;

import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.osgi.framework.Constants;
import org.osgi.service.component.annotations.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

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.WorkflowProcess;
import com.adobe.granite.workflow.metadata.MetaDataMap;
import com.day.cq.wcm.api.Page;
import com.day.cq.wcm.api.WCMException;

/**
 * @author debal This workflow step is responsible to lock AEM page.
 */

@Component(property = { Constants.SERVICE_DESCRIPTION + "=This workflow step is responsible to lock AEM page",
		Constants.SERVICE_VENDOR + "=AEM Demo Debal", "process.label" + "=Page lock process" })
public class PageLockWorkflowStep implements WorkflowProcess {

	private final Logger logger = LoggerFactory.getLogger(PageLockWorkflowStep.class);

	@Override
	public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap metaDataMap)
			throws WorkflowException {

		String payloadPath = workItem.getWorkflowData().getPayload().toString();

		ResourceResolver resourceResolver = workflowSession.adaptTo(ResourceResolver.class);

		Resource resource = resourceResolver.getResource(payloadPath);

		if (Objects.nonNull(resource) && resource.isResourceType("cq:Page")) {

			Page page = resource.adaptTo(Page.class);
			try {
				page.lock();
			} catch (WCMException e) {

				logger.error("Unable to lock the given Page", e.getMessage());
			}

		} else {
			logger.info("**** Resource isn't a page**** {} ");
		}
	}

}

 

Similar question here: https://experienceleaguecommunities.adobe.com/t5/adobe-experience-manager/lock-and-unlock-publish-pa...


Regards,
Santosh

Avatar

Community Advisor

Hi @sai2teja ,
There is OOTB process to lock payload. You can't lock for specific user. You you want payload/page to be looked for specific user, You have to implement custom functionality. 

OOTB process - Lock Payload Process

Avatar

Level 1

Hey Sunil,

 

I tried in the below mentioned 3 ways:

 

1 - By impersonating with author user I tried to lock the page with author it didn't worked.

 

2 - By getting author user session, I tried to lock the page it didn't worked as well.

 

3 - I tried updating the lockowner property value to author, but no luck.