カスタム注文ルールの実装
Liferayでは、特定の条件を満たした注文に対して注文ルールを設定することができます。 最少注文金額のルールは、すぐに利用可能です。 特定の値以下の注文のチェックアウトを防ぐことができます。 新しい注文ルールを追加するには、 COREntryType
インターフェースを実装する必要があります。 詳しくは、 コマースの注文ルール をご覧ください。
カスタム注文ルールのデプロイと言語キーの追加
新しいLiferay DXPインスタンスを起動し、以下を実行します。
メールアドレス test@liferay.com とパスワード test を使用して、http://localhost:8080でLiferayにサインインしてください。 プロンプトが表示されたら、パスワードを learn に変更します。
次に、以下の手順に従います。
-
Acme Commerce Order Ruleをダウンロードし、解凍します。
-
サンプルをビルドしてデプロイします。
noteこのコマンドは、デプロイされたjarをDockerコンテナの
/opt/liferay/osgi/modules
にコピーするのと同じです。 -
Dockerコンテナコンソールでデプロイを確認します。
-
管理者としてログインし、 グローバルメニュー(
) を開き、 [コントロールパネル] → [言語オーバーライド] をクリックしてください。 追加 ボタン(
)をクリックし、以下のキーを追加します。
言語キー 値 x9k1-minimum-order-quantity X9K1 最小注文数 minimum-quantity 最小数 importantLiferay DXP 7.4 U4以降、またはLiferay Portal 7.4 GA8以降の言語オーバーライドツールで言語キーを追加することができます。 以前のバージョンでは、ビルドとデプロイの前に、
/src/main/resources/content/
の下にLanguage.properties
ファイルを追加し、キーを指定する必要があります。 -
グローバルメニュー(
) を開き、 [commerce] → [注文ルール] をクリックしてください。
-
追加 ボタン(
)をクリックし、以下の情報を入力します。
名前: Minimum Order Quantity - 3
[Description]: Testing minimum order quantity of 3 items
[Type]: X9K1 Minimum Order Quantity
-
[Submit] をクリックします 。
-
[Configuration] セクションで、 [Minimum Quantity] を 3 に設定します。
-
新しい注文ルールを有効にするには、[アクティブ]トグルをクリックします。
-
[Publish] をクリックします。
-
グローバルメニュー(
) を開き、 [コントロールパネル] → [サイト] をクリックし、新しいMiniumデモサイトを追加してください。
-
バイヤーとしてログインし、商品をカートに追加します。 Submit をクリックしてチェックアウトします。
注文数が3個以下の場合、警告メッセージが表示されます。 この条件を満たすまで、チェックアウトはできません。
注文ルールを有効にすると、すべてのアカウント、アカウントグループ、注文タイプ、チャネルに適用されます。 適合性をコントロールするには、注文ルールの*[適合性]*タブをクリックし、適切なオプションを選択します。
カスタム注文ルールの仕組み
この例では、主に9つの手順を示します。
- OSGi登録用に注文ルールに注釈を付ける
COREntryType
インターフェイスを確認するCOREntryType
の実装を完了する- ディスプレイコンテキストを追加する
- 最小数値を取得するユーティリティクラスを追加する
- OSGi登録用のJSPコントリビュータに注釈を付ける
COREntryTypeJSPContributor
インターフェイスを確認する- JSPコントリビューターの実装を完了する
- 注文ルールの設定をレンダリングするJSPを追加する
OSGi登録用に注文ルールに注釈を付ける
Liferay Commerceが注文ルールレジストリの他のものと区別できるように、注文ルールに個別のキーを指定する必要があります。 すでに使用されているキーを指定すると、既存の関連付けられているタイプが上書きされます。 順番は、ドロップダウンでのソート順で決まります。 この場合、順序は1であり、ドロップダウンの2番目の項目として表示されます。
COREntryType
インターフェイスを確認する
以下のメソッドを実装します。
このメソッドは、注文ルールを評価し、条件が満たされるかどうかによって、trueまたはfalseを返します。
評価されたメソッドがfalseを返した場合、このメソッドはユーザーに警告を表示するエラーメッセージを含む文字列を返します。
このメソッドは、注文ルールの一意のキーを返します。 既存のキーを使用すると、その注文ルールが上書きされます。
このメソッドは、UIに表示される注文ルールの名前を返します。 これは、言語キーまたは文字列です。
COREntryType
の実装を完了する
オーダールールを完了するには、上記のメソッドを実装する必要があります。 注文ルールで設定された注文数と最小数を取得するための2つのユーティリティメソッドが追加されました。 最初に上書きされるメソッドは evaluate()
で、現在の注文が注文ルールをパスするかどうかをチェックします。 そうであればtrueを、そうでなければfalseを返します。
2番目のメソッドは、注文ルールを満たさない注文のエラーメッセージを取得します。 すべての用語を含むStringBuilder
から変換された Stringを返します。 3番目のメソッドはユニークキーを返し、最後のメソッドはUIに表示されるラベルを返します。
注文ルールの最小数と合計注文数を取得するための2つのメソッドが追加されています。 最初のメソッドは、ユーティリティクラス X9K1MinimumQuantityUtil
にあります。 2 つ目のメソッドは _getOrderQuantity(CommerceOrder commerceOrder)
です。 注文に含まれる個々の商品の数量の合計として、合計注文数を返します。
ディスプレイコンテキストを追加する
このコードは、 COREntry
というタイプの単一のフィールドを含む表示コンテキストから、注文ルール用に設定された最小数の値を取得し、作成された注文ルールを使って設定されます。 表示コンテキストには、オーダールールに設定された最小数を取得するためのメソッドが1つあり、以下の詳細なユーティリティクラスを使用します。
最小数値を取得するユーティリティクラスを追加する
X9K1MinimumQuantityUtil
クラスは、注文ルールに設定された最小量を取得します。 JSPkeyで設定されたプロパティ名で値を取得します。
OSGi登録用のJSPコントリビュータに注釈を付ける
commerce.order.rule.entry.type.jsp.contributor.key
プロパティは、JSPコントリビュータが実装される注文ルールを決定します。
COREntryTypeJSPContributor
インターフェイスを確認する
COREntryTypeJSPContributor
インターフェースは、JSPをレンダリングするメソッドを1つ含んでいます。 このメソッドは、引数として注文ルールのIDと、 HTTPServletRequest
およびHTTPServletResponse
型のオブジェクトを要求します。
JSPコントリビューターの実装を完了する
JSPコントリビューターを完了させるには、render()
メソッドを実装する必要があります。 _corEntryLocalService
とcorEntryId
を用いて、 COREntry
を取得します。 次に、取得したcorEntry
を使用して、 X9K1MinimumQuantityDisplayContext
型の新しい表示コンテキストを作成します。 このコンテキストには、httpServletRequest
が設定されます。 servletContext
は、bnd.bnd
ファイルから Bundle-Symbolic-Nameを参照します。 JSPRenderer
はrenderJSP()
メソッドでJSPファイルをレンダリングします。 引数として、JSPの相対パス、servletContext
、 httpServletRequest
、httpServletResponse
を許可します。
注文ルールの設定をレンダリングするJSPを追加する
JSPには、注文ルールの最小数を許可する入力フィールドが1つあります。 これは、表示コンテキストを通じて取得され、カスタム注文ルール内で評価されます。 表示コンテキストはユーティリティクラスを使用し、タイプ設定コンフィギュレーションから最小量
の名前を使用してフィールドを取得します。 getMinimumQuantity()
メソッドは、既存の値がある場合はそれを取得します。
まとめ
これでCOREntryType
インターフェースの実装の基本がわかり、Liferay Commerceに新しい注文ルールが追加されました。