Expandosでカスタムフィールドにアクセスする
アプリケーションに追加のフィールドが必要な場合は、いつでも サービスモデル定義 に追加して、サービスビルダーを再実行することができます。 これにより、データベースのテーブルに新しいカラムが追加されます。 これは機能しますが、面倒です。ユーザーを新しいスキーマに移行するためのアップグレードプロセスを書かなければならなくなります。 しかし、LiferayのExpando機能を使えば、データベースを修正することなく、フィールドを追加することができます。 Expandosは、Javaでオブジェクトに追加のプロパティを追加することで機能します。 サンプルプロジェクトでは、ユーザーがカスタムフィールドにアクセスするデモを行っています。
サンプルプロジェクトを参照する
新しいLiferay DXPインスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/dxp:7.4.13-u55。
メールアドレス[email protected]_とパスワード_test_を使用して、http://localhost:8080でLiferayにサインインしてください。 プロンプトが表示されたら、パスワードを _learn_に変更します。
次に、以下の手順に従います。
[コントロールパネル] → [ユーザーと組織] へ移動します。 管理者ユーザーのオプションアイコン(
)をクリックし、 [編集] をクリックします。 [一般]タブで[カスタムフィールド]までスクロールします。 [追加] ボタンをクリックします。
項目タイプとして、 [入力フィールド] を選択します。 [ Field Name]に
f5a3Text
を入力します。 [Starting Value]に’test’などと入力します。 [Save]をクリックします。Accessing Expando をダウンロードし、解凍します。
curl https://resources.learn.liferay.com/dxp/latest/ja/building-applications/data-frameworks/expando-framework/liferay-f5a3.zip -O
unzip liferay-f5a3.zip
モジュールのルートから、ビルドおよびデプロイします。
./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
noteこのコマンドは、デプロイされたjarをDockerコンテナの/opt/liferay/osgi/modulesにコピーするのと同じです。
Liferay Dockerコンテナコンソールでデプロイを確認します。
STARTED com.acme.f5a3.web_1.0.0 [1034]
サンプルのモジュールが機能していることを確認します。 ブラウザで
https://localhost:8080
を開きます。サイトページに移動し、編集アイコン(
)をクリックします。 F5A3ポートレットをページに追加します。 ウィジェットは、サンプルウィジェットの下にあります。
ポートレットには、先ほど作成したユーザーのカスタムフィールドが表示されます。
ポートレットを調べる
サンプルプロジェクトでは、シンプルなMVCポートレットを使用して、カスタムフィールドを表示するJSPファイルをレンダリングしています。 ポートレットには、デフォルトのJSPファイルを表示するだけなので、コードはありません。
詳しくは、 MVCの使用をご覧ください。
JSPファイルを調べる
<liferay-theme:defineObjects>
タグは、LiferayUser
オブジェクトにアクセスするためにJSPに含まれています。 多くのLiferayオブジェクトと同様に、User
オブジェクトはExpandoBridge
サービスを継承しており、カスタムフィールドの値を作成(つまりaddAttribute()
)、設定(つまりsetAttribute()
)、取得(つまりgetAttribute()
)する方法が含まれています。 すべてのインターフェースのメソッドを見るには、 ExpandoBridge javadocs をご覧ください。
<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme" %>
<%@ page import="com.liferay.expando.kernel.model.ExpandoBridge" %>
<liferay-theme:defineObjects />
<h4>F5A3 Portlet</h4>
<%
ExpandoBridge expandoBridge = user.getExpandoBridge();
%>
F5A3 Text: <%= expandoBridge.getAttribute("f5a3Text") %>
サンプルプロジェクトでは、ユーザーのf5a3Text
カスタムフィールドに関連する値を取得する簡単な例を示しています。 アプリケーションでは、カスタムフィールドを作成、設定、取得するための独自のコードを記述してください。