Liferay DynamicQuery — сравнение xPath и массива

Моя конечная цель - получить plid и portletId, которые могут отображать мою статью (или запись любого типа, если это возможно).

У меня есть sql-запрос, который возвращает мне любой доступный портлет для отображения моей статьи. Но когда мне приходится использовать dynamicQuery для получения тех же результатов, у меня возникает проблема со сравнением xPath и массива, пожалуйста, помогите!

SELECT * FROM portletpreferences pr
WHERE pr.preferences != '<portlet-preferences />' AND pr.ownerid = 0 AND pr.portletid ilike '%_INSTANCE_%' AND pr.plid IN(
    SELECT layout.plid FROM layout 
          WHERE layout.type_ = 'portlet' AND layout.groupid = 19 AND layout.hidden_ is false)
AND pr.portletpreferencesid IN (
        SELECT pr.portletpreferencesid FROM portletpreferences pr
          WHERE 'true' = ANY(xpath('//preference[name="anyAssetType"]/value/text()', XMLPARSE(DOCUMENT pr.preferences))::text[])
               OR (SELECT (array(SELECT id_ FROM journalstructure))::text[]) &&  xpath('//preference[name="classTypeIds"]/value/text()', XMLPARSE(DOCUMENT pr.preferences))::text[] )

person user1487380    schedule 10.08.2012    source источник
comment
Почему вы используете запросы, а не API и сервисы, которые предоставляет Liferay?   -  person fimez    schedule 10.08.2012
comment
:-? я не знаю, когда создаю новый тип отображения для assetspublisher на портале liferay, я просто копирую существующий файл и редактирую код, он всегда включает много файлов, которые мне нужны, однако, когда я это делаю, я могу использовать только API и сервисы liferay   -  person user1487380    schedule 10.08.2012
comment
Чтобы добавить новый стиль отображения издателя ресурсов, вы должны использовать это: liferay.com/community/wiki/-/wiki/Main/Asset+Publisher+Portlet. Вам просто нужен 1 файл JSP и изменение файла свойств. Я не совсем понимаю, зачем вам нужно делать DynamicQuery для достижения нового стиля отображения?   -  person fimez    schedule 10.08.2012
comment
Я хочу открыть свой контент на другой странице и в портлете, поэтому мне нужно настроить viewURL, используя dynamicQuery, чтобы узнать, на какой странице (plid и portletId) может отображаться мой контент.   -  person user1487380    schedule 11.08.2012
comment
Если вы просто хотите отобразить контент на другой странице, вы можете использовать опцию «Отображать страницу» в Asset Publisher: liferay.com/documentation/liferay-portal/6.1/user-guide/ -/ай/   -  person fimez    schedule 12.08.2012
comment
хм, я не хочу давать конечному пользователю право выбирать, какие страницы будет отображать его контент, это должно быть автоматически. В моем случае я изменил свой алгоритм, используя dynamicQuery, чтобы узнать, какие страницы - и - издатели ресурсов имеют одинаковый заголовок с именем структуры или, по крайней мере, любой издатель ресурсов с таким же заголовком. Однако спасибо за ответ   -  person user1487380    schedule 13.08.2012
comment
Конфигурация этих параметров предназначена только для пользователей с достаточными разрешениями, и обычно вы не даете конечным пользователям такие разрешения, только администраторам.   -  person fimez    schedule 13.08.2012


Ответы (2)


Если вы склонны использовать тот же самый запрос, то используйте этот запрос напрямую с Custom-SQL в liferay, создав настраиваемые средства поиска вместо использования DynamicQuery. Это дало бы вам большую гибкость в использовании любого типа SQL-запроса напрямую.

Я не думаю, что этот запрос можно преобразовать в DynamicQuery, но если вам удастся его преобразовать, опубликуйте его здесь :-)

person Prakash K    schedule 13.08.2012

DynamicQuery очень мощный, см., например. мой ответ, как найти макеты с конкретными журнальными статьями. Я думаю, что ваше требование похоже на это: /12038652#12038652">Liferay: как найти все макеты с определенной статьей журнала в портлетах AssetPublisher?

person Community    schedule 20.08.2012