1

これが状況です。以前のWebサイトからの「古い」ニュースを新しいLiferay6.1サイトのアセットパブリッシャーポートレットに追加したいと思います。問題は、過去に追加したかのように表示してほしいということです。

だから、私は理解します、それを変更するのはどれほど難しいcreateDateでしょうか?createDateそれ以来、MySQLデータベースに直接アクセスして、記事オブジェクトのフィールドを更新することができました。ただし、キャッシュのクリア、検索インデックスのインデックスの再作成、Liferayの再起動に関係なく、Liferayデプロイメントに伝播されないようです。createDateデータベースに変更した値として表示されていても、Webコンテンツは「元の」状態を維持します。

これが私が使用したクエリです:

mysql> UPDATE JournalArticle SET createDate='2012-03-08 15:17:12' WHERE ArticleID = 16332;

それ以来、データベース/ Liferayのダイナミクスは、Liferayがルックアップを実行するほど単純ではないため、データベースを直接操作することはノーノーであることを学びました。つまり、ここsetCreateDateに示すように、LiferayAPIを使用する必要があるようです。

しかし、APIをどこでどのように活用するかはまったくわかりません。このAPI呼び出しを使用することのみを目的として、ダミーのポートレットを作成する必要がありますか?または、Liferayデプロイメントを実行しているサーバーのどこかに.javaファイルを作成し、それを実行してこのメ​​ソッドを活用できますか?

これを行うために必要な記事は15件しかありません。ArticleIDとGroupIDを参照することでそれらを見つけることができます。

どんな助けでも大歓迎です。私はgrepLiferayデプロイメントをsetCreateDate調べて、ナレッジベースポートレット内の.javaファイル内で頻繁に使用されていることを発見しましたが、ポートレットを作成せずにそれらを直接使用する方法を他に知ることはできません。

一方、データベースを伝播させる方法を誰かが知っている場合は、それがダーティハックであることを知っていても、Liferayデプロイメントへの変更はおそらく最も簡単です。

ありがとう; ほんとうにありがとう。

4

2 に答える 2

3

もちろん、Liferay API を使用するのが明確で優れた方法ですが、15 件の記事については、データベースから直接変更しようとしました。

データベースを確認したところ、Liferay は次のテーブルにデータを保存しているようです:JOURNALARTICLEASSETENTRY.

これらの両方のテーブルで作成日を変更してみてください。

次に、キャッシュをリロードします: [コントロール パネル] -> [サーバー管理] -> [データベース キャッシュをクリア]。

于 2012-05-09T19:07:34.953 に答える
0

アプリケーション起動イベントのフックを記述できます。このようにして、liferay が最初に起動されるたびに、必要に応じて作成日が変更されます。後でフックを取り外したい場合は、簡単に行うことができます。フックを作成してデプロイする方法については、こちらを参照してください。

http://www.liferay.com/community/wiki/-/wiki/Main/Portal+Hook+Plugins

また、データベース自体を変更することは、1つの値/記事であってもまったく推奨されません。Liferay が提供するサービス API を常に使用して変更します。

于 2012-05-11T11:12:03.383 に答える