Liferayにデプロイされているポートレットのサービスビルダーによって作成されたテーブルに自動的にデータを入力する方法が必要です。どうすればそれを達成できますか?スタートアップフックを考えていましたが、特定のポートレットのサービスにアクセスできません。それで、ポートレット自体を介してそれを移入する方法はありますか?
2 に答える
破壊的な変更を行わないように管理している場合 (たとえば、スタートアップごとに入力しないように注意する)、StartupAction (またはスタートアップ フック) で変更できます。このフックをポートレット プロジェクトに追加できます。これは問題なく機能します。別の方法として、liferay-plugin-package.properties でポートレットに依存するフック (またはその逆) を宣言することもできます。これにより、サービスが利用可能になります。しかし、この目的のために、すべてを 1 つのポートレット プラグインにパッケージ化します。
そこに破壊的な変更がある可能性がある場合は、アップグレード アクションの方が安全です。これは 1 回だけ実行されることが保証されています。
例については、古い Sevencogs サンプルを参照してください (ポインターが必要な場合はお知らせください。それから取得します)。
更新: このようなフックをポートレット プロジェクトに含めるには、次の内容で WEB-INF/liferay-hook.xml を追加します (または、Liferay IDE のウィザードを使用してプロジェクトにフックを追加するだけです)。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hook PUBLIC "-//Liferay//DTD Hook 6.1.0//EN" "http://www.liferay.com/dtd/liferay-hook_6_1_0.dtd">
<hook>
<portal-properties>portal.properties</portal-properties>
</hook>
また、次のオプションで WEB-INF/src/portal.properties を作成します。
application.startup.events=com.example.MyStartupAction
そしてもちろん、前述の起動アクションを作成し、拡張しますcom.liferay.portal.kernel.events.SimpleAction