3

是否可以以编程方式创建在未来某个时间开始时间的 CQ5 页面的新版本?

例如,假设我们有一个显示税率的页面。我们有一个组件允许作者上传新的费率表(以 css 文件的形式)并创建费率页面内容。我们希望允许作者上传下个月第一天生效的费率。

我知道 jcr 支持多个版本的节点,但不清楚这与 cq5 页面版本控制如何(或是否)相关。并且,进一步,未来是否可以激活新版本。

4

4 回答 4

1

鉴于您描述的要求,我可能会以稍微不同的方式完成任务......

与其将我的费率表信息直接存储在页面的 jcr:content 节点(或它们的子节点)中,我可能会将其抽象到存储库中的其他位置。然后,如果您愿意,您可以创建某种管理界面,以允许内容作者上传他们的新费率 csv 文件,并根据需要将其摄取到存储库中。或者,假设数据来自某种数据库,您可能只需编写一个作业,通过使用来自 CQ 的 JDBC 连接在某种预定的基础上自动注入它。一旦数据在存储库中,您就可以编写显示组件以从存储库中读取数据,而不是直接在页面内。

这种方法的优点是可以在 CQ 中重复使用该数据,以便在多个页面、多个站点甚至许多不同的显示格式(如果需要)上显示。此外,您可以设计您的 jcr 结构以支持您对数据更新的任何要求,包括每日、每月、每周、每年等,显然这将取决于具体要求。

这样做的一个缺点是,由于数据和显示数据的页面之间存在分离,因此您可能需要找到一种方法来确保在数据发生更改时正确清除缓存。

更新(根据您的评论):

我预见到对页面进行版本控制的问题,并且我没有尝试过,所以也许它会起作用,一次只能有一个活动版本。因此,一旦下个月的数据上传,您需要同时维护旧数据(活动)和新数据(尚未活动)。如果您在该窗口期间需要单独的内容更改会发生什么......从业务流程的角度来看,这对我来说似乎很混乱。

回到缓存清除问题,如果您知道受影响的页面,特别是如果它们都在一个子树中,您可以编写一个自定义工作流程,使用复制器服务来清除受影响页面的缓存,然后设置一个启动器来运行节点上的 wf 更改数据。

另一种选择,这个在我的脑海中定义较少,因此需要进行一些实验,将使用内置的 CQ 稍后激活并停用以后的功能。

也许为费率数据创建一个特定的模板,隐含的要求是一次只有一个使用该模板的页面处于活动状态。您的显示组件可以使用查询来查找当前活动的费率数据。

于 2013-01-11T21:35:50.517 回答
0

我没有亲自尝试过,但是...

我假设您可以使用 PageManager 服务的 createRevision 方法,然后如果它返回而不抛出异常,您可以调用 page.getContentResource.adaptTo(Node.class),然后从那里获取返回的节点并编辑 JCR 属性对于您的税率组件。

请参阅页面管理器

于 2013-01-11T19:30:47.997 回答
0

您可以编写一个工作流,其中包含一个由日历日期的到来触发的发布步骤。具有新税率的页面版本以草稿形式保留在工作流管道中,并且仅在日期到达时发布/激活。(因此,您需要某种每天唤醒一次的过程来检查日历。)

于 2013-01-11T21:13:15.690 回答
0

每次修改页面时,cq 都会创建该页面的一个版本。该修改页面的修改时间在页面的 jcr:lastModified 属性中设置。可以操作此属性以保存未来日期并在该日期激活页面,尽管它不是首选方式。您可以将未来日期作为属性存储在页面中。稍后,正如@David 所建议的那样,您可以创建一个工作流或计划作业,以激活具有未来日期的页面。

于 2013-09-23T10:36:40.463 回答