AEM 6.1查询求助:获取已激活且修改后未重发布页面
嘿,刚好之前在AEM 6.1里处理过一模一样的需求——找出那些已经激活(绿色高亮)但之后又被修改(蓝色高亮)的页面,也就是cq:lastModified日期晚于cq:lastReplicated的页面。下面是直接能用在CQ5 Query Debugger里的两种查询语句,你可以根据习惯选:
1. SQL2 查询语句(推荐,可读性更强)
在CQ5 Query Debugger的「Query Language」下拉框选SQL2,然后输入下面的语句:
SELECT * FROM [cq:Page] AS page WHERE ISDESCENDANTNODE(page, '/content') AND page.[cq:lastModified] > page.[cq:lastReplicated] AND page.[cq:lastReplicated] IS NOT NULL
- 细节说明:
[cq:Page]指定只查询页面类型的节点,避免把非页面的资源也查出来ISDESCENDANTNODE(page, '/content')限定查询范围为/content下的所有页面,你可以改成你的具体站点路径比如/content/we-retail来缩小查询范围page.[cq:lastModified] > page.[cq:lastReplicated]核心判断条件:页面最后修改时间晚于最后激活时间page.[cq:lastReplicated] IS NOT NULL排除从未激活过的页面(这类页面不会有绿色高亮标识,不符合你的需求)
2. XPATH 查询语句
如果更习惯用XPATH语法,在「Query Language」选XPATH,输入:
/jcr:root/content//element(*, cq:Page)[ jcr:content/cq:lastModified > jcr:content/cq:lastReplicated and jcr:content/cq:lastReplicated != '' ]
- 细节说明:
/jcr:root/content//递归查询/content下的所有节点,同样可以改成具体站点路径来缩小范围element(*, cq:Page)筛选出所有cq:Page类型的节点jcr:content/cq:lastModified > jcr:content/cq:lastReplicated实现时间对比的核心逻辑jcr:content/cq:lastReplicated != ''过滤掉从未激活过的页面
额外实用提示
- 如果查询结果太多,可以在SQL2语句末尾加
ORDER BY page.[cq:lastModified] DESC按修改时间倒序排列,或者加LIMIT 100限制单次返回的结果数量 - 确保你拥有目标路径下页面的查询权限,不然可能会返回不完整的结果或者空集
- AEM 6.1中
cq:lastModified和cq:lastReplicated都是标准的Date类型,Query Debugger会自动处理日期的比较逻辑,不用手动转换格式
内容的提问来源于stack exchange,提问作者kaushik
相关产品推荐
相关产品推荐

