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