我是Adobe Experience Manager的新手。我的任务是从数据库中检索未使用的图像列表,并需要通过UI删除它。
我给出了一个选择查询,该查询显示未使用的图像列表。谷歌搜索后,我有一个想法,那就是如何在Adobe Experience Manager中使用QueryBuilder,但是我不知道在下面的代码中将该选择查询放置在何处。
SQLQuery = "Select * from [nt:file]
where isdesplay([/home/cam/Bwits/master/images/top_images])
and NAME() LIKE 'cq5dam.thumbnail.140.100.png'";
以下代码也是我从Adobe支持网站获得的。对于普通的Jsp,我知道如何检索文件列表,但是现在对于使用adobe(AEM)api的JSP中的相同文件来说
I found some code an adobe help blog that is how to delete a node or folder from jsp.
在CQ创作环境中如何从JSP删除内容节点
通过AJAX通话删除
节点删除路径:
(例如“ / content / testdelete / deletePage1”)
字符集:
命令:
强制删除:
(真假)
<div id=”respText”></div>
function performDelete() {
var response = null;
var url = “/bin/wcmcommand”;
var pathObj= document.getElementById(‘pathAJ’);
if(pathObj)
{
var params = “path=”+encodeURIComponent(pathObj.value)+”&_charset_=utf-8&cmd=deletePage&force=false”;
var request = document.all ? new ActiveXObject(“Microsoft.XMLHTTP”) : new XMLHttpRequest();
//alert(params);
request.open(“post”, url, false);
request.setRequestHeader(“Content-Type”, “application/x-www-form-urlencoded”);
request.send(params);
var resp= request.responseText;
document.getElementById(‘respText’).innerHTML=resp;
}
}
</script>
</HTML>
现在,我必须借助SQL Query获取节点列表,并且需要一次从此JSP中删除该节点。
请建议我在哪里放置sql查询以从数据库中检索图像列表。
感谢您的提前配合
最佳答案
正如其他人指出的那样,那里有多个论坛(主要是Adobe)发布了各种解决该问题的方法。但是,本着多元化和丰富SO的精神,我认为这个问题值得一个新的答案。
以下解决方案基于JS,但没有理由不能以任何其他语言(例如Java,Ruby,bash(使用CURL)或PowerShell)实现此逻辑。同样,此方法不适用于从CSS和JS文件引用的DAM资产。
以geometrixx OOTB DAM库为例,请考虑大多数资产位于/content/dam/geometrixxx
文件夹下
您需要构建一个递归的迭代循环,以线性方式一次遍历DAM库一次。可以使用以下逻辑来完成:
步骤1:
通过以下HTTP调用获取内容的根目录文件夹结构:http://localhost:4502/content/dam/geometrixx.1.json
这将返回类似:
{
"jcr:primaryType":"sling:OrderedFolder",
"jcr:mixinTypes":[
"rep:AccessControllable"
],
"jcr:createdBy":"admin",
"jcr:title":"Geometrixx",
"jcr:created":"Mon Feb 27 2017 13:54:20 GMT+0000",
"portraits":{
"jcr:primaryType":"sling:OrderedFolder",
"jcr:createdBy":"admin",
"jcr:title":"Portraits",
"jcr:created":"Mon Feb 27 2017 13:54:20 GMT+0000"
},
"drm":{
"jcr:primaryType":"sling:OrderedFolder",
"jcr:createdBy":"admin",
"jcr:created":"Mon Feb 27 2017 13:54:20 GMT+0000"
},
"banners":{
"jcr:primaryType":"sling:OrderedFolder",
"jcr:createdBy":"admin",
"jcr:title":"Banners",
"jcr:created":"Mon Feb 27 2017 13:54:20 GMT+0000"
}
}
第2步:迭代
递归地遍历此结构,直到获得该项目的DAM资产。例如,当您迭代:
http://localhost:4502/content/dam/geometrixx/banners.1.json
时,您将获得类似以下内容的信息:{
"jcr:primaryType":"sling:OrderedFolder",
"jcr:createdBy":"admin",
"jcr:title":"Banners",
"jcr:created":"Mon Feb 27 2017 13:54:20 GMT+0000",
"banner-mono.png":{
"jcr:primaryType":"dam:Asset",
"jcr:createdBy":"admin",
"jcr:created":"Mon Feb 27 2017 13:54:20 GMT+0000"
},
"banner-retro.png":{
"jcr:primaryType":"dam:Asset",
"jcr:createdBy":"admin",
"jcr:created":"Mon Feb 27 2017 13:54:20 GMT+0000"
},
"banner-web20.png":{
"jcr:primaryType":"dam:Asset",
"jcr:createdBy":"admin",
"jcr:created":"Mon Feb 27 2017 13:54:20 GMT+0000"
}
}
因此,关键逻辑是获取文件夹节点的子节点并处理所有
dam:Asset
节点。步骤3:查找参考
命中DAM资产后,您可以使用内置的参考查找器
http://localhost:4502/bin/wcm/references.json?path=
查找参考。例如,使用以下引用实用程序:
http://localhost:4502/bin/wcm/references.json?path=/content/dam/geometrixx/banners/techsummit.jpg
将为您提供所有参考:
{
"pages":[
{
"srcPath":"/content/dam/geometrixx/banners/techsummit.jpg",
"srcTitle":"Tech Summit",
"path":"/content/geometrixx/en/events/techsummit",
"title":"TechSummit",
"references":[
"/content/geometrixx/en/events/techsummit/jcr:content/image/fileReference",
"/content/geometrixx/en/events/techsummit/jcr:content/par/image/fileReference"
],
"published":false,
"isPage":"true"
}
]
}
pages
数组为空的任何资产都是未使用的资产。步骤4:删除
删除只是节点路径上的HTTP DELETE请求。例如,如果要删除
/content/dam/geometrixx/banners/techsummit.jpg
DAM资产,只需在以下位置发送HTTP DELETE请求:http://localhost:4502/content/dam/geometrixx/banners/techsummit.jpg
就是这样,您的内容将被删除。