CQ:如何通过比较2个版本的页面来获取更新的内容?

时间:2013-06-24 11:47:04

标签: cq5

我有一个问题对应CQ5。激活页面后,将为页面创建版本。现在,如果我修改页面并将其与早期版本进行比较,那么它将以绿色显示内容为差异。

现在我希望通过代码和API来实现这一点,并将修改后的内容通过邮件发送。

有什么解决方案吗?

2 个答案:

答案 0 :(得分:3)

从页面处于“diff模式”时我可以看到,每个组件都有责任为正在渲染的内容渲染diff输出。

在您自己的组件中,似乎您可以使用DiffInfo / DiffService API来支持差异。然后,您会在自己的组件中看到内容的差异

这将为您提供当前版本与所选先前版本之间的差异:

ValueMap currentValues = ResourceUtil.getValueMap(resource);
String title = currentValues.get(NameConstants.PN_TITLE, "");

DiffInfo diffInfo = resource.adaptTo(DiffInfo.class);    
ValueMap diffValues = ResourceUtil.getValueMap(diffInfo.getContent());
String diffText = diffValues.get(NameConstants.PN_TITLE, "");

DiffService diffService = sling.getService(DiffService.class);
String diffOutput = diffInfo.getDiffOutput(diffService, title, diffText, false);

当页面上的所有组件都支持diff时,您需要获取页面的呈现输出以包含在电子邮件中。您可以使用SlingRequestProcessor执行此操作。您可能会发现这很困难,因为电子邮件客户端不会以与浏览器相同的方式呈现HTML(例如,使用外部CSS等)。

答案 1 :(得分:2)

可以通过编程方式访问节点版本历史记录,如下所示。

Workspace workspace = node.getSession().getWorkspace();
VersionManager versionManager = workspace.getVersionManager();
VersionHistory versionHistory = versionManager.getVersionHistory(nde.getPath());

VersionHistory允许您访问节点的特定javax.jcr.version.Version(版本扩展节点)。

要创建特定组件的差异,com.day.cq.commons.DiffInfo可能会让您感兴趣。 有关详细信息,请参阅http://dev.day.com/docs/en/cq/current/javadoc/com/day/cq/commons/DiffInfo.html