Getting cq:lastReplicationAction value after Page deletion. | Community
Skip to main content
Level 7
November 26, 2023
Solved

Getting cq:lastReplicationAction value after Page deletion.

  • November 26, 2023
  • 2 replies
  • 1066 views

Hello,

I have created AEM page. At this time, there will not be any entry for cq:lastReplicationAction. I have created ReplicationEventHandler that will trigger during page activation, deactivation, deletion time.  

Now, I have 2 scenario's.  1: Page is deleted before any publishing the page (Not even published single time) .  2:  Page is deleted After publishing earlier. 

Now, I have deleted this page. When I Read the "cq:lastReplicationAction" from page Properties in my ReplicationEventHandler  file, for both scenario's it gives me: "Delete" . Actually, for the 1st scenario I was expecting null and for the 2nd scenario I was expecting some value, since that page is published earlier.

 

Thanks in advance.

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 Rezwanur

Hi @mahesh_gunaje, Actually, EventHandler gets triggered after the event occurs, so by that time the "cq:lastReplicationAction" property value is already assigned.

In your case, you need to use a preprocessor to process the replication action before it happens.

Here is an example for your convenience:

@Component(
service = Preprocessor.class,
immediate = true,
property = {Constants.SERVICE_RANKING + ":Integer=1"}
)
public class ReplicationPreprocessor implements Preprocessor {

@Reference
private ResourceResolverFactory resourceResolverFactory;

@Override
public void preprocess(ReplicationAction action, ReplicationOptions options) {
ResourceResolver resourceResolver = resourceResolverFactory.getThreadResourceResolver();
PageManager pageManager;

if (resourceResolver != null) {
pageManager = resourceResolver.adaptTo(PageManager.class);

if (pageManager != null) {
Page currentPage = pageManager.getPage(action.getPath());

if(currentPage != null) {
ValueMap properties = currentPage.getProperties();
String lastReplicationAction = properties.get("cq:lastReplicationAction", "");
// Work with this 'lastReplicationAction' value
}
}
}
}
}

 

Let me know if this works for you.
Thanks

2 replies

Rezwanur
RezwanurAccepted solution
Level 2
November 27, 2023

Hi @mahesh_gunaje, Actually, EventHandler gets triggered after the event occurs, so by that time the "cq:lastReplicationAction" property value is already assigned.

In your case, you need to use a preprocessor to process the replication action before it happens.

Here is an example for your convenience:

@Component(
service = Preprocessor.class,
immediate = true,
property = {Constants.SERVICE_RANKING + ":Integer=1"}
)
public class ReplicationPreprocessor implements Preprocessor {

@Reference
private ResourceResolverFactory resourceResolverFactory;

@Override
public void preprocess(ReplicationAction action, ReplicationOptions options) {
ResourceResolver resourceResolver = resourceResolverFactory.getThreadResourceResolver();
PageManager pageManager;

if (resourceResolver != null) {
pageManager = resourceResolver.adaptTo(PageManager.class);

if (pageManager != null) {
Page currentPage = pageManager.getPage(action.getPath());

if(currentPage != null) {
ValueMap properties = currentPage.getProperties();
String lastReplicationAction = properties.get("cq:lastReplicationAction", "");
// Work with this 'lastReplicationAction' value
}
}
}
}
}

 

Let me know if this works for you.
Thanks

arunpatidar
Community Advisor
Community Advisor
November 27, 2023

Hi @mahesh_gunaje 
When you delete the page(using UI or pageMagaer api), the page is unpublished automatically , so you don't need to explicitly write any event listener to listen delete/unpublish events.

Arun Patidar