AEM 6.3 设置 PageEvent Handler/Listener
AEM 6.3 Set up PageEvent Handler/Listener
我目前正在为 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;
}
}
我目前正在为 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;
}
}