Documentation

Expandosでカスタムフィールドにアクセスする

アプリケーションに追加のフィールドが必要な場合は、いつでも サービスモデル定義 に追加して、サービスビルダーを再実行することができます。 これにより、データベースのテーブルに新しいカラムが追加されます。 これは機能しますが、面倒です。ユーザーを新しいスキーマに移行するためのアップグレードプロセスを書かなければならなくなります。 しかし、LiferayのExpando機能を使えば、データベースを修正することなく、フィールドを追加することができます。 Expandosは、Javaでオブジェクトに追加のプロパティを追加することで機能します。 サンプルプロジェクトでは、ユーザーがカスタムフィールドにアクセスするデモを行っています。

サンプルプロジェクトを参照する

新しいLiferay DXPインスタンスを起動し、以下を実行します。

docker run -it -m 8g -p 8080:8080 liferay/dxp:7.4.13-u29。

メールアドレス_test@liferay.com_とパスワード_test_を使用して、http://localhost:8080でLiferayにサインインしてください。 プロンプトが表示されたら、パスワードを _learn_に変更します。

次に、以下の手順に従います。

  1. コントロールパネル] → [ユーザーと組織] へ移動します。 管理者ユーザーのオプションアイコン(オプションアイコン)をクリックし、 [編集] をクリックします。 [一般]タブで[カスタムフィールド]までスクロールします。 [追加] ボタンをクリックします。

  2. 項目タイプとして、 [入力フィールド] を選択します。 [ Field Name]にf5a3Textを入力します。 [Starting Value]に'test'などと入力します。 [Save]をクリックします。

    Create a custom field called f5a3Text for Users.

  3. Accessing Expando をダウンロードし、解凍します。

    curl https://learn.liferay.com/dxp/latest/ja/building-applications/data-frameworks/expando-framework/liferay-f5a3.zip -O
    
    unzip liferay-f5a3.zip
    
  4. モジュールのルートから、ビルドおよびデプロイします。

    ./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
    

    注釈

    このコマンドは、デプロイされたjarをDockerコンテナの/opt/liferay/osgi/modulesにコピーするのと同じです。

  5. Liferay Dockerコンテナコンソールでデプロイを確認します。

    STARTED com.acme.f5a3.web_1.0.0 [1034]
    
  6. サンプルのモジュールが機能していることを確認します。 ブラウザでhttps://localhost:8080を開きます。

  7. サイトページに移動し、編集アイコン(Edit icon)をクリックします。 F5A3ポートレットをページに追加します。 ウィジェットは、サンプルウィジェットの下にあります。

    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カスタムフィールドに関連する値を取得する簡単な例を示しています。 アプリケーションでは、カスタムフィールドを作成、設定、取得するための独自のコードを記述してください。