カスタムチェックアウトステップの実装
このチュートリアルでは、 CommerceCheckoutStep インターフェースを実装して、カスタムチェックアウトステップを追加する方法を紹介します。
チェックアウトステップは、お客様のチェックアウトプロセスを1つの画面で示します。 Liferay Commerceは、 支払方法ステップ や 注文確認ステップ などの重要なステップを含むいくつかのチェックアウトステップをすぐに利用できるように提供しています。
概要
サンプルをデプロイする
このセクションでは、チェックアウトステップをLiferay Commerceのインスタンスで実行する例を示します。 新しいLiferay インスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.112-ga112。
http://localhost:8080でLiferayへのサインインします。 メールアドレス test@liferay.com とパスワード test を使用してください。 プロンプトが表示されたら、パスワードを learn に変更します。
次に、以下の手順に従います。
-
Acme Commerce Checkout Step をダウンロードし、解凍してください。
curl https://resources.learn.liferay.com/commerce/latest/ja/developer-guide/sales/liferay-n8n6.zip -O
liferay-n8n6.zipを解凍してください。
-
サンプルをビルドしてデプロイします。
./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
noteこのコマンドは、デプロイされたjarをDockerコンテナの
/opt/liferay/osgi/modules
にコピーするのと同じです。 -
Dockerコンテナコンソールでデプロイを確認します。
STARTED com.acme.n8n6.web_1.0.0
-
サンプルのチェックアウトステップが追加されたことを確認します。 ブラウザーで
https://localhost:8080
を開き、Liferay Commerceサイトのカタログに移動します。 カートにアイテムを追加し、カートを表示して、[チェックアウト]をクリックします。 新しい[N8N6 Commerce Checkout Step]がチェックアウトステップのリストに表示されます。
これで、CommerceCheckoutStep
を実装する新しいチェックアウトステップのビルドとデプロイが完了しました。
さらに詳しく見ていきましょう。
サンプルの説明
このセクションでは、デプロイしたサンプルについて確認します。 最初に、OSGi登録用のクラスに注釈を付けます。 次に、 CommerceCheckoutStep
インターフェイスを確認します。 最後に、CommerceCheckoutStep
の実装を完了します。
CommerceCheckoutStep
の実装を簡単にするために、その基本機能であるBaseCommerceCheckoutStep
を拡張しています。
OSGi登録用のクラスに注釈を付ける
@Component(
property = {
"commerce.checkout.step.name=n8n6",
"commerce.checkout.step.order:Integer=21"
},
service = CommerceCheckoutStep.class
)
public class N8N6CommerceCheckoutStep extends BaseCommerceCheckoutStep {
Liferay Commerceがこのチェックアウトステップを既存のチェックアウトステップと区別できるように、チェックアウトステップ名は一意の値である必要があります。
commerce.checkout.step.order
値は、チェックアウトプロセスでこのチェックアウトステップが表示される範囲を示します。 例えば、 配送方法チェックアウトステップ の値は20です。 チェックアウトステップの値を21とすることで、配送方法ステップの直後に表示されるようにしました。
CommerceCheckoutStep
インターフェイスを確認する
基本クラスを拡張することに加えて、次のメソッドを実装します。
public String getName();
このメソッドは、チェックアウトステップの名前を返します。 この名前は、UIに表示される名前に対応する 言語キー である可能性があります。
public void processAction(
ActionRequest actionRequest, ActionResponse actionResponse)
throws Exception;
バックエンド処理が必要な場合は、
processAction
メソッドを使用して、ActionRequest
を介して渡された情報でビジネスロジックを実装できます。
public void render(
HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse)
throws Exception;
ここで、チェックアウトステップに合わせてカスタマイズされた画面をレンダリングするためのコードを追加します。
チェックアウトステップを完了する
チェックアウトステップは、カスタム画面と入力を処理するバックエンドロジックで構成されます。 以下を行います。
- モジュールに
ServletContext
を構成する。 render
メソッドを実装します。- ビジネスロジックを
processAction
に追加する 。 - JSPを追加して、カスタム画面をレンダリングする。
- 言語キーを
Language.properties
に追加する。
モジュールにServletContext
を構成する
バンドルのシンボル名を使用してServletContext
を定義し、モジュールでJSPを見つけられるようにします。
@Reference(target = "(osgi.web.symbolicname=com.acme.n8n6.web)")
private ServletContext _servletContext;
osgi.web.symbolicname
に設定した値は、 bnd.bndファイル のBundle-SymbolicName
の値と一致します。 これらの値は、JSPを見つけるためにServletContext
と一致する必要があります。また、
ServletContext
が正しく生成されるように、bnd.bndファイルでWeb-ContextPath
一意の値を宣言する必要があります。 この例では、Web-ContextPath
は/ n8n6-web
に設定されています。 これらの値のリファレンスについては、 bnd.bnd を参照してください。
render
メソッドを実装する
@Override
public void render(
HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse)
throws Exception {
_jspRenderer.renderJSP(
_servletContext, httpServletRequest, httpServletResponse,
"/terms_and_conditions.jsp");
}
@Reference
private JSPRenderer _jspRenderer;
@Reference(target = "(osgi.web.symbolicname=com.acme.n8n6.web)")
private ServletContext _servletContext;
JSPRenderer
を使用して、チェックアウトステップのJSPをレンダリングします(この場合は、 terms_and_conditions.jsp )。 作成したJSPを見つけるためのパラメーターとしてServletContext
を提供します。
ビジネスロジックをprocessAction
に追加する
今回の例では、カスタム画面にテキストを表示し、processAction
の実装ではバックエンド処理を必要としません。
JSPを追加して、カスタム画面をレンダリングする
この例では、プレースホルダーテキストを追加しています。 terms_and_conditions.jsp で実装を確認できます。
言語キーをLanguage.properties
に追加する
モジュール内の Language.properties ファイルに言語キーとその値を追加します。
n8n6-commerce-checkout-step=N8N6 Commerce Checkout Step
詳細は、 アプリケーションのローカライズ を参照してください。
まとめ
これで、CommerceCheckoutStep
インターフェイスを実装するための基本を理解し、Liferay Commerceに新しいチェックアウトステップを追加しました。