AEM 6.3设置PageEvent Handler / Listener

时间:2019-02-07 19:32:39

标签: events listener replication aem

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

我的工作一直基于已经存在的侦听复制事件的模块。

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

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

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

如果我删除页面,它会将类型设置为“ DELETE”,因此我可以使用它来调用API,但是对于丢失的页面出版物,因为如上所述,AEM看起来像它处理CRX复制和页面出版物相同类型。

经过一番研究,我找到了PageEvent API,并尝试设置一个页面事件监听器,但是它不会在发布或删除页面时触发,因此我不确定是否尝试执行此操作我的竞争对手位于项目的错误部分,无法收听Page Events。

预先感谢

1 个答案:

答案 0 :(得分:0)

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

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