【发布时间】:2016-02-03 21:02:35
【问题描述】:
有没有办法从 CQ DAM 中找到未使用的资产?目前我们的 CQ 实例已经积累了大量的资产,目前至少有 25% 的资产没有被使用。我们的 CQ 实例在 windows (5.6) 上运行。有没有更清洁的方法来做同样的事情?
谢谢, 桑托什
【问题讨论】:
标签: aem
有没有办法从 CQ DAM 中找到未使用的资产?目前我们的 CQ 实例已经积累了大量的资产,目前至少有 25% 的资产没有被使用。我们的 CQ 实例在 windows (5.6) 上运行。有没有更清洁的方法来做同样的事情?
谢谢, 桑托什
【问题讨论】:
标签: aem
您可以使用以下 XPATH 查询来获取所有资产:
/jcr:root/content/dam//*[@jcr:primaryType='dam:Asset']
使用 QueryManger 可以获得资产节点列表:
Workspace workspace = session.getWorkspace();
QueryManager qm = workspace.getQueryManager();
Query query = qm.createQuery(xpathQuery, Query.XPATH);
QueryResult queryResult = query.execute();
result = queryResult.getNodes();
接下来您需要获取每个资产的路径并验证它是否被使用:
while(result.hasNext()) {
Node assetNode = result.nextNode();
String assetPath = assetNode.getPath();
}
要验证是否使用了资产,您需要再次运行 xpath :
/jcr:root/content/mywebsite//*[@fileReference='putAssetPathHere']
现在result.hasNext() == true 表示已使用资产
【讨论】:
另一种解决方案是使用ReferenceSearch
for (String path : paths) {
if (resourceResolver.getResource(path) != null) {
Map<String, ReferenceSearch.Info> searchResult = referenceSearch.search(resourceResolver, path);
if (searchResult.isEmpty()) {
//path is unused asset
}
//get used pages
for (Map.Entry<String, ReferenceSearch.Info> info : searchResult.entrySet()) {
info.getKey();//will return page path
}
//get used properties paths
for (Map.Entry<String, ReferenceSearch.Info> info : searchResult.entrySet()) {
for (String prop : info.getValue().getProperties()) {
//prop is property path
}
}
}
}
【讨论】:
对我来说,以下代码有效。 帮助链接:http://wemcode.wemblog.com/get_asset_reference_in_page
String damPath = "/content/dam/geometrixx/offices/basel kitchen.jpg";
for (ReferenceSearch.Info info: new ReferenceSearch().search(resourceResolver, damPath).values()) {
for (String p: info.getProperties()) {
out.println("Path is "+info.getPage().getPath());
}
【讨论】: