AEM 6.3设置PageEvent处理程序/侦听器



我目前正在为aem上的页面创建和删除设置一个事件处理程序,然后调用我们的供应商之一API。

我的工作基于我们已经拥有的一个模块,该模块可以监听复制事件。

到目前为止,我能够在我的模块上重现这种行为,并在复制时触发代码。但是,我只需要调用页面发布和删除上的API。

我一直在努力寻找如何区分复制、页面删除和激活。

到目前为止,AEM似乎将crx复制和页面发布作为同一类型的事件"type=ACTIVATION"来处理。

如果我删除一个页面,它会将类型设置为"delete",这样我就可以使用它来调用API,但对于我所提到的丢失的页面发布,AEM看起来像是将CRX复制和页面发布作为同一类型来处理。

经过一番研究,我发现了PageEvent API,并试图设置页面事件侦听器,但它不会在发布或删除页面时触发,因此我不确定我试图做的事情是否可能,或者我的组件是否位于项目的错误部分以侦听页面事件。

事先感谢

下面的代码可以很好地检测页面删除事件:

@Component(
service = {
EventHandler.class,
JobConsumer.class
},
immediate = true,
configurationPolicy = ConfigurationPolicy.OPTIONAL,
property = {
"event.topics=" + PageEvent.EVENT_TOPIC,
JobConsumer.PROPERTY_TOPICS + "=" + "aem/custom/event"
}
)
public class CustomEventHandler implements EventHandler, JobConsumer {
@Override
public void handleEvent(Event event) {
PageEvent pageEvent = PageEvent.fromEvent(event);
Map<String, Object> properties = new HashMap<>();
properties.put("pageEvent", pageEvent);
jobManager.addJob("aem/custom/event", properties);
}
@Override
public JobResult process(Job job) {
PageEvent pageEvent = (PageEvent) job.getProperty("pageEvent");
try {
if (pageEvent != null && pageEvent.isLocal()) {
Iterator<PageModification> modificationsIterator = pageEvent.getModifications();
while (modificationsIterator.hasNext()) {
PageModification modification = modificationsIterator.next();
if (PageModification.ModificationType.DELETED.equals(modification.getType())) {
// Your logic
}
}
}
} catch (Exception e) {
logger.error("Error : ", e);
}
return JobResult.OK;
}
}