我正在尝试获取CQ 5.4中的页面列表,在特定日期之后修改以及修改页面时的信息以及由谁
我已经创建了一个XPath查询来查找在特定日期之后修改的所有页面:
/jcr:root/path/to/portal//element(*, cq:Page)[
(@jcr:content/cq:lastModified >= xs:dateTime('YYYY-MM-DDT00:00:00.000+02:00'))
] order by jcr:content/@cq:lastModified descending
在CRXDE中运行它只给出了以下页面列表:
/path/to/portal/page1
/path/to/portal/page4
/path/to/portal/page2
我还需要显示cq:lastModified,cq:lastModifiedBy的值。最好显示为:
/path/to/portal/page1 | user1 | YYYY-MM-DDT00:00:00.000+02:00
/path/to/portal/page4 | user1 | YYYY-MM-DDT00:00:00.000+02:00
/path/to/portal/page2 | user2 | YYYY-MM-DDT00:00:00.000+02:00
我尝试过列说明符,如:
/jcr:root/path/to/portal//element(*, cq:Page)/(@cq:lastModifiedBy | @cq:lastModified)[
(@jcr:content/cq:lastModified >= xs:dateTime('YYYY-MM-DDT00:00:00.000+02:00'))
] order by jcr:content/@cq:lastModified descending
但它什么也没给我。
有没有办法在CQ中运行此查询以获得我需要的结果?
答案 0 :(得分:0)
您尚未显示用于访问QueryResult的任何代码。
理论上,QueryResult.getRows().nextRow().getValues()
会以与Value[]
相同的顺序返回QueryResult.getColumnNames()
。
实际上,查询会返回资源或节点的迭代器 - 您可以将这些迭代器调整为ValueMap以获取单个属性。我在http://itgumby.github.io/blog/2014/10/cq-queries-demystified/上写了一篇关于不同类型查询的博客文章,其中显示了用于访问查询结果的JSP代码示例。
如果使用像groovy这样的语言,可以将结果操作简化为:
String query = "/jcr:root/path/to/portal//element(*, cq:Page)/(@cq:lastModifiedBy | @cq:lastModified)[(@jcr:content/cq:lastModified >= xs:dateTime('YYYY-MM-DDT00:00:00.000+02:00'))] order by jcr:content/@cq:lastModified descending"
Collection<Resource> results = resourceResolver.findResources(query, Query.XPATH).collect { it as Resource }
results.each { rsc ->
def props = rsc.adapTo(ValueMap)
String path = rsc.path
String user = props.get('jcr:content/cq:lastModifiedBy', '')
String lastMod = props.get('jcr:content/cq:lastModified', '')
// do what you need with path/user/lastMod
}
此外,如果您从cq:Page
更改为cq:PageContent
,则可以从后续访问中删除jcr:content/
。