カスタム清算ステップの実装¶
このチュートリアルでは、 CommerceCheckoutStep インターフェースを実装して、カスタム清算ステップを追加する方法を紹介します。
清算ステップは、顧客の清算プロセスの1つの画面を表します。 Liferay Commerceには、 支払方法ステップ や 注文確認ステップ などの基本的なステップを含む、いくつかの清算ステップが標準で組み込まれています。
サンプルをデプロイする¶
このセクションでは、清算ステップをLiferay Commerceのインスタンスで実行する例を示します。 次の手順を実行します:
Liferay Commerceを開始します。
docker run -it -p 8080:8080 liferay/portal:7.4.3.22-ga22
Acme Commerce Checkout Step をダウンロードして解凍します。
curl https://learn.liferay.com/commerce/latest/en/developer-guide/sales/liferay-n8n6.zip -O
unzip liferay-n8n6.zip
サンプルをビルドしてデプロイします。
./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
注釈
このコマンドは、デプロイされた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
を構成する¶
バンドルのシンボル名を使用して 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
詳細は、 アプリケーションのローカライズ を参照してください。