Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Aem 如何以编程方式创建CQ5页面的新版本?_Aem - Fatal编程技术网

Aem 如何以编程方式创建CQ5页面的新版本?

Aem 如何以编程方式创建CQ5页面的新版本?,aem,Aem,是否可以通过编程方式创建一个新版本的CQ5页面,该页面在将来某个时候有一个开始时间 例如,假设我们有一个显示税率的页面。我们有一个组件,允许作者上传一个新的费率表(以css文件的形式),并创建费率页面内容。我们希望允许作者上传将于下个月一日生效的费率 我知道jcr支持多个版本的节点,但不清楚这与cq5页面版本控制有何关系。还有,未来是否可以激活新版本。我个人没有尝试过,但是 我假设您可以使用PageManager服务的createRevision方法,然后如果该方法返回而不引发异常,则可以调用p

是否可以通过编程方式创建一个新版本的CQ5页面,该页面在将来某个时候有一个开始时间

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


我知道jcr支持多个版本的节点,但不清楚这与cq5页面版本控制有何关系。还有,未来是否可以激活新版本。

我个人没有尝试过,但是

我假设您可以使用PageManager服务的createRevision方法,然后如果该方法返回而不引发异常,则可以调用page.getContentResource.adapto(Node.class),并从中获取返回的节点,编辑税率组件的JCR属性


请参见

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

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

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

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

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

更新(基于您的评论):

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

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

另一个选项,这个选项在我的脑海中定义较少,因此需要一些实验,将使用CQs内置的“稍后激活”和“稍后取消激活”功能


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

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

我想您指的是csv,而不是css文件?这是我们目前实现的。我们正是担心缓存。看起来我们应该能够更好地利用cq5/sling/jcr提供的功能。