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