我正在试图解决的应用程序是:
查找/apps下所有组件的所有页面引用。 也就是说,首先查找正在使用组件的所有页面,然后对/apps下的所有组件执行此操作。
通过使用Adobe:https://adobe-consulting-services.github.io/acs-aem-commons/features/report-builder/configuring.html的报表生成器工具
我正在尝试的查询:
SELECT * FROM [nt:base] AS s
WHERE [sling:resourceType] IN (SELECT path FROM [cq:Component] AS s WHERE [componentGroup] IS NOT NULL AND ISDESCENDANTNODE([/apps]))
AND ISDESCENDANTNODE([/content])背景:--我只需要清理内部查询中的结果集。如果不进行卫生处理,它将吐出表单/apps/acs-commons/components/utilities/report-builder/columns/text的路径,而吊索:外部查询中的资源类型只能接受acs-commons/components/utilities/report-builder/columns/text。因此,我需要从内部查询结果集路径中删除/apps/。
这里是错误消息:
Caused by: java.text.ParseException: Query: SELECT * FROM [nt:base] AS s
WHERE [sling:resourceType] IN (SELECT(*)CAST(path, AS STRING) FROM [cq:Component] AS s WHERE [componentGroup] IS NOT NULL AND ISDESCENDANTNODE([/apps]))
AND ISDESCENDANTNODE([/content]); expected: static operand发布于 2018-09-24 06:57:49
我认为您无法使用jcr sql2语法操作结果集,存储的procs通常用于操作类似于PL/SQL的结果集,而我在jcr文档中没有找到对此的任何引用。事实上,据我所知,jcr甚至不支持聚合函数,如MAX()、COUNT()等。
要执行这个->,您可能需要先执行内部查询,以检索/apps中的所有组件,手动修改结果集(去掉/apps),然后将其提供给外部查询。
SELECT * FROM [nt:unstructured] AS comp
WHERE ISDESCENDANTNODE(comp, "/content/prj")
AND [sling:resourceType] IN ("prj/components/content/accordion","prj/components/content/breadcrumb")要加快处理速度,可以使用像notepad++这样的文本编辑器,它可以帮助您进行块选择(ctrl + alt + shift,然后单击鼠标左键并拖动以选择)来删除/apps、添加开始/结束双引号、逗号和替换换行符字符,将其全部放在一行中并构造整个查询。
会有兴趣知道其他人是怎么想的,以及这是否可以用jcr sql2语法实现。
https://stackoverflow.com/questions/52452446
复制相似问题