null Liferay Objectsの紹介 (1) カスタムオブジェクト定義編

こんにちは。おおたにです。

 

今回はLiferay DXP 7.4の新機能であるLiferay Objectsを紹介します。が、関連する機能も含めるとそれなりの量になるため、何本かの記事に分けて紹介する予定です。初回はLiferay Objectsの概要とカスタムオブジェクト定義についてみていきたいと思います。

なお、以下の記事ではLiferay DXP 7.4 Update 30を使って説明を行います。Liferay DXP 7.4以降ではUpdateと呼ばれる定期的なアップデートで機能が拡充されていくようになったため、ご利用のバージョンによっては紹介されている機能がない、もしくはそれ以上の機能が存在するということがあるかもしれません。

 

Liferay Objectsとは?

Liferay Objectsは、コード記述やカスタムモジュールのデプロイ無しでLiferay上にアプリケーションを構築するための機能です。カスタムオブジェクトと呼ばれるオブジェクトを定義し、入力用のフォームと表示用のビューを用意するようなイメージです。Liferay DXP 7.4で新しく実装された機能で、以前のバージョンで似たような機能として存在していたApp Builderは廃止となりました(7.3の新機能だったので1マイナーバージョンで廃止となってしまいましたが…)。

技術的には、サービスビルダによるエンティティ/サービス実装をUI上から行えるようになったと言えます。本機能を用いてカスタムオブジェクトを実装すると、データベース上にはカスタムオブジェクトを格納するためのテーブルが作成され、カスタムオブジェクトを操作するためのREST APIが生成されます。

Liferay Objectsの主な機能は以下のとおりです。今後さらに機能拡充が行われていくようです。

  • 定義関連の機能
    • カスタムオブジェクト定義
    • オブジェクト間のリレーション定義
    • 選択リスト
    • 検証(バリデーション)
    • 検索
    • ワークフロー
  • 表示関連の機能
    • レイアウト
    • ビュー
    • フォーム連携
    • コレクション表示フラグメント連携
  • 連携関連の機能
    • アクション
      • Webhook
    • ヘッドレスAPI

 

では、早速Liferay Objectsの利用方法を紹介していきますが、今回は入館申請を行うアプリを作成してみようと思います。具体的な入力項目は以下のとおりです。

  • 入館日:日付型
  • 入館先:選択肢から選択
  • 入館理由:複数行テキスト
  • 入館ユーザ:ユーザを検索して選択

 

カスタムオブジェクトを追加する

グローバルメニューを開き、「コントロールパネル」→「オブジェクト」をクリックします。

Liferay Objectsの管理画面が開きます。デフォルトでいくつかのカスタムオブジェクトが定義されています。では+ボタンをクリックしてカスタムオブジェクトを追加します。

新規カスタムオブジェクト画面が開くので、ラベルと複数のラベル、オブジェクト名を入力します。これらは後から変更することができますが、データベースに生成されるテーブル名はオブジェクト名を基に名前が決まり、後から変更することはできません。

保存をクリックして設定を保存すると、下書き状態で新たなカスタムオブジェクトが作成されます。アクションメニューから権限設定や削除、JSON形式でのエクスポートを行うことができます。

作成されたカスタムオブジェクトをクリックしてみましょう。この画面でカスタムオブジェクトの各種設定を行うことができます。

ここでは以下の設定を行い保存をクリックしましょう。

  • 範囲 : 「サイト」に変更(サイト単位でデータが保存される)
  • パネルのカテゴリキー : 「サイト管理 > コンテンツ」に変更(カスタムオブジェクトのUIがサイト管理メニューのコンテンツ欄に表示される)
  • 表示設定 : 「ウィジェットを表示」に変更(本カスタムオブジェクトを操作するウィジェットが自動的に作成・公開される)

また、各タブで出来ることは以下のとおりです。

  • 詳細(Details):ラベルの多言語化やオブジェクトデータの保存単位、グローバルメニューへの表示設定など
  • 項目(Fields):カスタムオブジェクトのフィールドを定義する
  • 関連(Relationships):カスタムオブジェクト間の関連(リレーションシップ)を設定する
  • レイアウト(Layouts):カスタムオブジェクトの入力/表示用フォームを設定する
  • 操作(Actions):カスタムオブジェクトのエンティティ操作をトリガとしたスクリプト/Webhook実行を設定する
  • 閲覧数(Views):一覧表示のためのビューを設定する
  • 検証(Validations):入力値のバリデーションを設定する

 

選択リストを作成する

選択リストは、カスタムオブジェクトのデータ入力フォーム上で利用できる選択肢リストを作成する機能です。ここで定義した選択リストは複数のフォームで再利用可能です。

今回は、入館申請の対象施設を選択リストとして作成してみましょう。まずはグローバルメニューを開き、「コントロールパネル」→「選択リスト」をクリックします。選択リスト管理画面が開くので+ボタンをクリックして名前を入力します。

保存したら、作成した選択リストをクリックします。選択リスト名を多言語化し、+ボタンから選択肢を追加します。なお、選択肢も多言語化可能なので、選択リスト「建物」、選択肢「1号館」「2号館」「3号館」と設定してみます。

 

カスタムオブジェクトにフィールドを追加する

続いて、カスタムオブジェクトにフィールドを追加します。Admission Requestの管理画面に戻り、項目タブで+ボタンからフィールドを追加します。ラベルは表示名(多言語設定可)、項目名はテーブルのカラム名を設定します。

  • ラベル「Admission date」、項目名「admissionDate」、種類「日付」、必須ON
  • ラベル「Building」、項目名「building」、種類「選択リスト」、選択リスト「建物」、必須ON
  • ラベル「Reason」、項目名「reason」、種類「長いテキスト」、必須ON

なお、カスタムオブジェクトが下書き(ドラフト)状態の場合はフィールドの削除や設定変更を行えますが、公開されたフィールドは削除できず、設定変更もラベルのみとなるのでご注意ください。

 

検証を追加する

検証を用いると、フォームの送信時にカスタムの入力値チェックを実装することができます。検証タブの+ボタンをクリックし、検証の名前とロジック実装方法を設定して新規オブジェクト検証を作成します。実装方法はGroovyスクリプトと式ビルダーの2つを選択できます。ここでは式ビルダーを選択してみましょう。

作成された検証をクリックし、条件タブで条件式とエラーメッセージを入力します。以下は理由フィールド(reason)が10文字以上であることをチェックする検証です。なお、式ビルダーについてはこちらのドキュメントを参照してください。入力し終わったら、基本情報タブに戻り「有効な検証」をONにして保存します。

 

最後に、詳細タブに移動して「公開」をクリックします。これでカスタムオブジェクトが最低限利用可能な状態で公開されました。

 

リレーションを追加する

続いて、オブジェクト間のリレーションを追加します。リレーションはデータベースのテーブル間のリレーションシップ(外部キー制約や中間テーブルを用いて実現するやつ)と同様のもので、Liferay Objectsでは1対多もしくは多対多のリレーションを設定することができます。今回は、Admission Requestに入館者欄を用意し、システムオブジェクトUserを関連付けます。

まず、Liferay Objectsの管理画面を開き、システムオブジェクトUserをクリックします。詳細タブのタイトルフィールドを「ID」から「Email Address」に変更して保存します。オブジェクトを指定したり表示したりする際に利用される設定で、この設定を行うことでユーザを指定したり一覧にユーザを表示する際の形式がメールアドレス形式になります。

続いて、関連タブに移動して+アイコンをクリックし、以下のとおり新しいリレーションを作成します。

一旦作成してから編集すると、ラベルの多言語化と削除タイプのみ変更することができます。削除タイプは防止(Prevent)、カスケード(Cascade)、関連付け解除(Disassociate)から選択することができます。

 

確認してみよう

では、動作確認してみましょう。正しく公開されていれば、適当なサイトのサイト管理メニューのコンテンツカテゴリに「Admission Requests」というメニューが追加されます。「Admission Requests」をクリックすると入館申請一覧のビューが表示され、+ボタンから入館申請エントリを追加することができます。このビューから入館申請エントリの確認/編集/削除を行うこともできます。

また、Reasonフィールドに10文字未満の文字列を入力して保存すると、検証に失敗してエラーメッセージが表示されます。

 

ウィジェットを画面に配置してみよう

カスタムオブジェクトを「ウィジェットを表示」に設定すると、上記のビューがウィジェットとしても利用できるようになります。適当なページでウィジェット追加メニューを開き、「オブジェクト」カテゴリのウィジェット「Admission Requests」をD&Dでページ上に配置し、公開してみましょう。

ページにアクセスすると、先ほどサイト管理メニューで表示されたビューがページ内に埋め込まれていることが確認できます。また、カスタムオブジェクトの作成、編集、確認、削除も同様に行うことができます。

 

検索とワークフロー

また、Liferay ObjectsはLiferay DXPのコアフレームワークと統合されているため、自動的に検索機能やワークフロー機能が利用できるようになります。例えばカスタムオブジェクトAdmission Requestsにワークフローを設定することで、入館申請→承認というアプリケーションが簡単に作成できます。

 

今回の紹介は以上になります。今回はカスタムオブジェクトを定義し、検証とリレーションを追加してみました。この状態ではカスタムオブジェクトが最低限使えるだけなので、次回以降の記事でさらに実践的な形にするための機能を紹介したいと思います。

関連記事
feature
feature

RANKING
2021.1.08
2020.12.28
2020.12.01
2020.10.30
2020.12.18