как получить подстроку в JCR: SQL2? - PullRequest
0 голосов
/ 22 сентября 2018

Вариант использования, который я пытаюсь найти:

Найдите все ссылки на страницы всех компонентов в каталоге / apps.

т.е. сначала найдите все страницы, на которых используется компонент, а затем сделайте это для всех компонентов в /apps.

Используя инструмент построителя отчетов для Adobe AEM: https://adobe -consulting-services.github.io / acs-aem-commons / features / построитель отчетов / 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, в то время как sling: resourceType из внешнего запроса может принимать только 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

1 Ответ

0 голосов
/ 24 сентября 2018

Я не думаю, что вы можете манипулировать результирующим набором с использованием синтаксиса jcr sql2, хранимые процедуры обычно используются для манипулирования результирующими наборами, похожими на PL / SQL, и я не нашел никакой ссылки на это в jcr docs.На самом деле, насколько мне известно, 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.

...