サービスビルダーアプリケーションとオブジェクトの統合
既存の Service Builder アプリケーションをオブジェクト フレームワークと統合できます。 統合されると、カスタム エンティティは、すぐに使用できる Liferay エンティティ (ユーザーやアカウントなど) と同様に、変更できないシステム オブジェクトになります。 これらのオブジェクト定義では、ほとんどの構成はオブジェクト UI から変更できません。 エントリタイトルフィールド、フィールドラベル、および 必須 設定を変更できます。 関係、検証、アクションを追加することもできます。
この例では、Service Builder に基づく単純な CRUD アプリケーションがオブジェクトと統合されています。 統合は、サービス モジュールに SystemObjectDefinitionManager クラスを含めることによって行われます。
K3N1サービスビルダーアプリケーションコードを入手する
新しいLiferay インスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.132-ga132
http://localhost:8080でLiferayにサインインします。 メールアドレス test@liferay.com とパスワード testを使用してください。 プロンプトが表示されたら、パスワードを learnに変更します。
次に、以下の手順に従います。
-
K3N1 Service Builder プロジェクトをダウンロードして解凍します 。
curl https://resources.learn.liferay.com/examples/liferay-k3n1.zip -Ounzip liferay-k3n1.zip -
モジュールのルートから、ビルドおよびデプロイします。
./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)注このコマンドは、デプロイされたjarをDockerコンテナ上の
/opt/liferay/osgi/modulesにコピーするのと同じです。 -
Liferay Dockerコンテナコンソールでデプロイを確認します。
STARTED com.acme.k3n1.api_1.0.0 [1433] STARTED com.acme.k3n1.service_1.0.0 [1434] STARTED com.acme.k3n1.web_1.0.0 [1435] -
ブラウザで
https://localhost:8080を開きます。 -
K3N1 ポートレットをページに追加します。 サンプルポートレットは、サンプルウィジェットの下にあります。
-
K3N1 ポートレットのエントリを追加します (例: 名前に
k3n1を入力し、説明にk3n1を入力します)。 -
[送信]をクリックします。

K3N1エントリオブジェクトに検証を追加する
説明と名前が等しくならないように検証ルールを追加します。 これは大文字と小文字を区別しますが、構成されたエラー メッセージは UI に表示されないことに注意してください。
-
グローバル メニュー (
) → コントロール パネル → オブジェクトを開きます。 -
K3N1 エントリ オブジェクトを見つけてクリックします。
-
検証 に移動し、 追加 (
) をクリックします。 -
ラベル 名前は説明と等しくてはいけません を入力し、 保存をクリックします。
-
新しい検証のラベルをクリックします。
-
検証を有効にします。
-
条件 タブを開き、
名前 != 説明と入力します。 -
エラー メッセージ 名前と説明のフィールドを同じにすることはできませんを入力し、 保存をクリックします。
-
K3N1 ポートレットのあるページに戻り、同じ名前と説明の値を持つエントリを追加します。
検証により、エントリは追加されませんが、構成されたエラー メッセージは表示されません。 システム オブジェクト UI はオブジェクト フレームワークの制御下にないため、これは予想された動作です。 したがって、ポートレットの表示コードを、エラー メッセージが表示されるように調整する必要があります。
提供されたエラー メッセージは Liferay ログに出力されます。
2025-02-03 21:49:57.261 ERROR [http-nio-8080-exec-8][PortletServlet:109] Unable to process portlet com_acme_k3n1_web_internal_portlet_K3N1Portlet: com.liferay.portal.kernel.exception.ModelListenerException: com.liferay.object.exception.ObjectValidationRuleEngineException: The name and description fields cannot be the same.
考慮事項と制限事項
サイト スコープのエンティティは、サイト スコープのオブジェクトに変換できません。 groupId は SystemobjectDefinitionManager とそのメソッドに渡されず、サービス呼び出し時に使用できません。
エンティティに REST API がない場合には、いくつかの制限があります。 REST Builder を使用してエンティティのヘッドレス API を追加し、次に SystemObjectDefinitionManager#getJaxRsApplicationDescriptor メソッドを更新してエンティティの新しい記述子を作成することを検討してください。 これにより、特にカスタム エンティティを他のオブジェクトに関連付ける場合に、追加の機能を使用できるようになります。
retun new JaxRsApplicationDescriptor(
String applicationName, String applicationPath, String path,
String version);
このコード サンプルの JSP アプローチと同様に、アプリケーションの UI を作成する必要があります。 オブジェクトおよびページ構築機能は、変更不可能なシステム オブジェクトのアプリケーション UI の構築には使用できません。