フィールド検証の追加
Liferay DXP 2023.Q3+/ポータル GA92+
検証は、有効なフィールドエントリーを決定するためのルールを設定します。 各検証には独自のトリガー、条件、エラー メッセージがあり、これらはオブジェクト UI から設定できます。 Groovy スクリプト または Liferay 式を使用して検証を定義できます。
Liferay DXP 2024.Q1+/GA112+ 以降では、3番目のタイプの検証が利用できます: 複合キー検証。 複合キー検証を使用して、2 つ以上のフィールドの組み合わせが一意であることを要求します。

- すぐに使用できる検証がニーズを満たさない場合は、
objectValidationRuleクライアント拡張機能を使用してカスタム検証を作成できます。 詳細については、 マイクロサービス クライアント拡張 を参照してください。 - システム オブジェクトの検証メッセージは、ネイティブ UI に表示されない場合があります。 ただし、検証は期待どおりに実行されます。
検証を追加するには、
-
グローバル メニュー (
) を開き、 コントロール パネル タブに移動して、 オブジェクトをクリックします。 -
オブジェクト定義の編集を開始します。
-
検証 タブに移動し、 追加 (
) をクリックします。 -
ラベル を入力し、検証タイプを選択します: Groovy、 式ビルダー、または 複合キー。
オブジェクト検証ルールのクライアント拡張機能をインスタンスにデプロイしている場合は、それらもオプションとして表示されます。

-
[保存]をクリックします。
-
検証の編集を開始します。
-
基本情報タブで検証を有効にします。

-
検証をいつ実行するかを決定するには、 トリガー イベント を選択します。
各検証は、1つのトリガーイベントしか持つことができません。
-
検証ルールを追加します。
Groovy および Expression Builder の検証の場合は、 条件 タブに移動して、検証に条件を追加します。
条件には、複雑なロジックを実行するための複数のフィールドと関数を含めることができます。

Groovyを使用する場合、サイドパネルから利用可能なデータフィールドを参照し、条件に追加することができます。 詳細については、 Groovy 検証の使用 を参照してください。
エクスプレッションビルダーを使用する場合、サイドパネルからフィールド、演算子、関数を参照し、条件に追加できます。 詳細については、 式ビルダー検証の使用 を参照してください。
重要- Groovy スクリプト検証は、Liferay PaaS および Liferay DXP Self-Hosted でのみ利用できます。
- DXP 2024.Q3 以降、スクリプトはデフォルトで無効になっています。 システム設定 → スクリプト管理 (セキュリティ カテゴリ) で有効にできます。
複合キー検証を設定するには、 「一意の複合キー 」タブに移動し、複合キーとして使用するフィールドを選択します。 詳細については、 複合キー検証の使用 を参照してください。

-
ローカライズ可能な エラーメッセージを入力します。 このメッセージは、検証がトリガーされ、フィールドエントリが定義された条件の 1 つ以上を満たしていない場合に表示されます。
-
出力検証タイプを選択して、エラー メッセージが表示される場所を決定します。
完全検証(フォームサマリー): フォームの上部にエラーメッセージを表示します。
部分検証(インラインフィールド): 指定されたフィールドの横にエラーメッセージを表示します。 この機能はオブジェクト レイアウトでは動作しません。

-
[保存]をクリックします。
有効になっている間、すべての新しいオブジェクト エントリに対して検証が実行され、 レイアウト と フォーム コンテナーに表示されます。

Groovy検証の使用
Liferay PaaSとLiferay DXPセルフホスト
DXP 2024.Q3 以降、スクリプトはデフォルトで無効になっています。 システム設定 → スクリプト管理 (セキュリティ カテゴリ) で有効にできます。
Groovy 検証は、すべての標準 Groovy スクリプト 機能をサポートします。 条件を定義する場合、 invalidFields 変数を使用する必要があります。 LiferayはinvalidFieldsがtrueを返す場合にのみ、確認エラーメッセージを表示します。

Liferay は、 GroovyShell クラス を使用して、 [保存]をクリックしたときに、Groovy スクリプトの構文が有効かどうかを確認します。 スクリプトが無効な場合、Liferayはエラーメッセージを表示します。
エクスプレッションビルダー検証の使用
エクスプレッションビルダーには、定義済みのフィールド、演算子、関数が用意されており、要素サイドパネルからアクセスすることができます。 要素をクリックすると、その要素が条件エディタに追加されます。 これらの関数は、ブール値を返します。 提供されている演算子と関数の完全なリストについては、 式ビルダー検証リファレンス を参照してください。
式ビルダー検証は、テキスト、数値、日付、ブール値のフィールド タイプでのみ使用できます。

「保存」をクリックすると、Liferay は式の有効な構文をチェックします。 式が無効な場合、Liferayはエラーメッセージを表示します。
エクスプレッションビルダーの演算子
この表は、エクスプレッションビルダーの検証で利用できる演算子の一覧です。
| 演算子 | 説明 |
|---|---|
そして ( AND) | 依存した関係を表すのに使用される等位接続詞 |
Divided By ( / ) | 除算の数学演算子 |
マイナス ( -) | 除算の数学演算子 |
または ( または) | 独立した関連を表すのに使用される等位接続詞 |
プラス ( +) | 加算の数学演算子 |
Multiply ( * ) | 乗算の数学演算子 |
エクスプレッションビルダーの関数
この表は、利用可能なエクスプレッションビルダー関数とその互換性のあるフィールドタイプの一覧です。
| 演算子 | テキストフィールド | 数値フィールド | 日付フィールド | 説明 |
|---|---|---|---|---|
| 日付を比較 | ✔ | 日付フィールドの値が設定された値と同じかどうかを確認します。 | ||
| 連結 | ✔ | 複数の文字列またはテキスト フィールドを結合し、他の検証関数で使用できる単一の文字列を返します。 | ||
| 条件 | ✔ | ✔ | ✔ | ユーザー入力が 1 つ以上の条件を満たしているかどうかを確認し、ブール値を返します。 |
| が以下を含む | ✔ | ✔ | フィールドに指定された値が含まれているかどうかを確認し、ブール値を返します。 | |
| 含まない | ✔ | ✔ | フィールドに指定された値が含まれていないかどうかを確認し、ブール値を返します。 | |
| 未来の日付 | ✔ | 日付フィールドの値が将来かどうかを確認し、ブール値をします。 | ||
| URL である | ✔ | テキストフィールドがURLであるかどうかを確認し、ブール値を返します。 | ||
| メールアドレスである | ✔ | テキストフィールドがメールアドレスであるかどうかを確認し、ブール値を返します。 | ||
| 小数である | ✔ | 数値フィールドが小数であるかどうかを確認し、ブール値を返します。 | ||
| が空の場合 | ✔ | テキストフィールドが空であるかどうかを確認し、ブール値を返します。 | ||
| が以下と等しい | ✔ | ✔ | フィールド値が指定された値と等しいかどうかを確認し、ブール値を返します。 | |
| 以上 | ✔ | 数値フィールドが特定の数値より大きいかどうかを確認し、ブール値を返します。 | ||
| 以上もしくは等しい | ✔ | 数値フィールドが特定の数値以上もしくは等しいかどうかを確認し、ブール値を返します。 | ||
| 整数である | ✔ | 数値フィールドが整数であるかどうかを確認し、ブール値を返します。 | ||
| 以下 | ✔ | 数値フィールドが特定の数値以下かどうかを確認し、ブール値を返します。 | ||
| 以下もしくは等しい | ✔ | 数値フィールドが特定の数値以下もしくは等しいかどうかを確認し、ブール値を返します。 | ||
| 等しくない | ✔ | ✔ | フィールド値が指定された値と異なるかどうかを確認し、ブール値を返します。 | |
| 一致 | ✔ | テキストフィールドが特定のString値または正規表現と一致するかどうかを確認し、ブール値を返します。 | ||
| 古い値 | ✔ | ✔ | ✔ | 指定されたフィールドの前の値を取得します。 |
| 過去の日付 | ✔ | 日付フィールドの値が過去かどうかを確認し、ブール値をします。 | ||
| 範囲 | ✔ | 日付範囲が過去の日付で始まり、将来の日付で終わるかどうかを確認し、ブール値を返します。 | ||
| 合計 | ✔ | 複数の数値フィールドを加算し、他の検証関数で使用できる単一の数値を返します。 |
詳細と例については、 式ビルダー検証リファレンス を参照してください。
利用可能なフィールドのリファレンス
条件を作成する際、オブジェクトのカスタムフィールドやシステムフィールドのいずれかを使用できます。 Liferay DXP 2025.Q2+ からは、1対多の関係の子側の関係フィールドから選択することもできます。
以下は、カスタムオブジェクトで利用可能なすべてのデフォルトフィールドです。
| 項目 | 説明 |
|---|---|
companyId | エントリーが作成されたポータルインスタンス |
createDate | エントリーが作成された日時 |
currentDate | エントリー提出日 |
currentUserId | エントリを送信したユーザーのID |
externalReferenceCode | エントリーの外部参照コード |
groupId | エントリーが作成されたサイトID |
lastPublishDate | エントリーが最後に公開された日付 |
modifiedDate | エントリーが最後に更新された日付 |
mvccVersion | エントリーのMVCCバージョン |
objectDefinitionId | エントリーのオブジェクトのID |
objectEntryId | エントリーのID |
status | エントリーのワークフローステータス |
statusByUserId | ワークフローで割り当てられたユーザーのID |
statusByUserName | ワークフローで割り当てられたユーザーの名前 |
statusDate | ワークフローステータスが最後に更新された日付 |
userId | エントリー作成者のID |
userName | エントリー作成者のユーザー名 |
uuid | エントリーの重複しないユニバーサルID |
システムオブジェクトは、上記の表と重複する部分もありますが、独自のデフォルトフィールドを持っています。
複合キー検証の使用
Liferay DXP 2024.Q1+/GA112+ (リリース機能フラグ)
Liferay DXP 2024.Q3+/Portal GA125+(一般提供)
お使いの Liferay のバージョンで必要な場合は、まず複合キー検証のリリース機能フラグを有効にします。 グローバル メニュー (
) → コントロール パネル → インスタンス設定 → 機能フラグに移動します。 リリース セクションを開き、 フィールド検証の改善 (LPS-187854)を有効にします。
一部のデータ モデルおよびアプリケーションでは、一意の複合キーが必要です。 たとえば、注文オブジェクトでは、顧客 ID と注文日の各組み合わせがシステム内で一意であることが要求される場合があります。 この複合キーを適用すると、一意の注文エントリを検索して操作できるようになります。 一意の複合キー検証により、フィールドの組み合わせがオブジェクトのスコープ内で一意であることが保証されます。 サイト スコープのオブジェクトはサイト内で一意の複合キーを持つことができ、インスタンス スコープのオブジェクトはインスタンス全体で一意の複合キーを持つことができます。
複合キーでは、テキスト、整数、および選択リスト フィールドを使用できます。 1 対多の関係の子側で関係フィールドを使用することもできます。

すでにデータが存在する場合、複合キーにフィールドを追加することはできません。

特定のアクションはドラフト オブジェクトでのみサポートされます。
| 操作 | オブジェクトステータス | サポートされています |
|---|---|---|
| 検証を削除する | 下書き 公開済み | ✔ ✔ |
| 検証からフィールドを削除する | 下書き 公開済み | ✔ ✘ |
| 検証に使用されているフィールドを削除する | 下書き 公開済み | ✘ ✘ |
APIを使用した検証ルールの実行
Liferay DXP 2025年第2四半期以降
すぐに使用できるトリガー イベントが 1 つあります: On Submission。 これがユースケースを満たさない場合は、カスタム オブジェクトの 検証 API エンドポイントを使用して検証をトリガーすることを検討してください。 たとえば、 マルチステップフォーム では、次のページに移行する前に各ページを検証する必要がある場合があります。 オブジェクト エントリを POST する権限を持つユーザーは、その検証エンドポイントを呼び出すこともできます。
検証エンドポイントを使用するには、トリガーする検証ルールの外部参照コード (ERC) をリクエスト本体で渡します。検証ルールの ERC を渡さない場合は、すべての検証ルールがトリガーされます。 さらに、検証するフィールド名と値をリクエスト本文に渡します。 この例では、単一の検証ルール ERC を使用して 2 つの日付が渡されます。 この検証ルールは、 startDate フィールドの値が常に endDate の値よりも前になることを保証します。
curl \
"http://localhost:8080/o/c/timeoffrequests/validate" \
--data-raw '
{
"objectValidationRuleExternalReferenceCodes": ["{validationRuleERC}"],
"values": {
"endDate": "2025-06-01",
"startDate": "2025-06-08"
}
}' \
--header "Content-Type: application/json" \
--request "POST" \
--user "test@liferay.com:learn"
オブジェクト定義内の検証ルールの ERC に {validationRuleERC} を置き換えます。
オブジェクト定義の検証ルール ERC を見つけるには、object-admin API を使用します。 たとえば、オブジェクト定義の ERC が C_TIMEOFFREQUESTの場合、次の GET リクエストを実行できます。
curl \
"http://localhost:8080/o/object-admin/v1.0/object-definitions/by-external-reference-code/C_TIMEOFFREQUEST/object-validation-rules" \
--user "test@liferay.com:learn"
デモのために基本認証を使用しています。 本番環境では、 OAuth2経由でユーザーを認証する必要があります。 OAuth2 を使用するサンプル React アプリケーションについては、 OAuth2 を使用してユーザーを承認する を参照してください。