0

私の最終的な目標は、私の記事(または可能であれば任意のタイプのエントリ)を表示できる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[] )
4

2 に答える 2

0

これと同じクエリを使用することに傾倒している場合は、を使用するCustom-SQL代わりにカスタムファインダーを作成して、liferayでこのクエリを直接使用してDynamicQueryください。これにより、あらゆるタイプのSQLクエリを直接使用する際に多くの柔軟性が得られます。

このクエリをに変換できるとは思いませんがDynamicQuery、変換できた場合は、ここに投稿してください:-)

于 2012-08-13T10:39:09.103 に答える
0

DynamicQuery は非常に強力です。たとえば、特定の JournalArticles でレイアウトを見つける方法についての私の回答を参照してください。あなたの要件はこれに似ていると思います: Liferay: AssetPublisher ポートレットで特定の JournalArticle を含むすべてのレイアウトを見つける方法は?

于 2012-08-20T13:53:08.553 に答える