価格設定フックを作成する
学習の目的
この単元を完了すると、次のことができるようになります。
- 価格設定フックの目的を説明する。
- 価格設定フックが Industries CPQ インターフェースと連携するしくみを説明する。
- Industries EPC で価格設定フックを設定する方法を説明する。
場所別の価格
Infiwave の開発者である Eliza は、EPC の高度な価格設定機能を求める多数の依頼に精力的に取り組んでいます。今回、マーケティングチームは Industries CPQ カート内の商品の価格を顧客の場所に基づいて設定したいと考えています。そうすれば、特定の市場に魅力的な価格を設定し、注文履行コストが高い場所で価格を上げることができるようになります。
有能な開発者である Eliza は、基盤となるプログラミングコードを手動で調整して場所ベースの価格設定を行うことができます。ただし、このような調整を行えば、いずれメンテナンスが必要になり、アプリケーションがやたらと複雑になってしまうことを知っています。簡潔にしておくのが一番です。そこで価格設定フックが役立ちます。
価格設定フック
EPC では、アプリケーションの本来の動作や基盤となるコードを変更することなく、カスタムロジックを実装するためのフックを記述できます。フックによってコマンドを捕捉することで、アプリケーションで通常実行されるアクションを変更できます。
フックには幅広い用途があります。価格設定の観点から見た場合、フックによって次のことが可能になります。
- 新しい価格設定機能を追加する。
- 価格設定計算で追加項目を公開する。
- 商品の価格設定を変更する。
Industries CPQ では、CpqAppHandler というグローバルインターフェースで機能が管理され、このインターフェースにはカートで CPQ プロセスを実行するいくつかのメソッドが用意されています。このプロセスのデフォルト動作を、呼び出し前のフックを使用して実際のインターフェースが実行する前に変更したり、呼び出し後のフックを使用して実行後に変更したりすることができます。これを行うには、CpqAppHandler のフックインターフェースに CpqAppHandlerHook というカスタム実装を作成します。
次の図では、呼び出し前のフックと呼び出し後のフックによって、デフォルトの CPQ プロセスの前後にカスタム処理が挿入されています。
呼び出し前の処理はルール、価格設定、検証、処理の前に実行され、呼び出し後の処理はこのデフォルト処理の後に実行されます。
CpqAppHandlerHook を使用して CPQ メソッドの入力と出力を管理できます。
- 入力パラメーターを追加、変更、削除する。
- 出力応答を追加、変更、削除する。
- 入力と出力を検証して、問題をデバッグする。
- 場合によっては、商品の修正を待つ間に問題の回避策を提供する。
さらに、次のようなビジネスロジックを追加できます。
- 条件付き処理を実装する。
- 実行チェーンのさらに下流で使用される情報を事前に読み込む。
- カスタム項目を処理する。
- カスタム機能を実装する。
- コールアウトを行う。
CpqAppHandlerHook は、InvokeService がコールされると自動的に呼び出されます。InvokeService はインターフェース名にフック文字列 (「Hook」など) を付加し、その名前の有効なインターフェースがあるかどうかを判断します。もしあれば、フックインターフェースにある有効な実装を開始します。
そして、メソッド名の末尾に .preInvoke を追加し、フック実装の PreInvoke メソッドを呼び出します。フックされたクラスメソッドの処理が完了した後、対応する .postInvoke メソッドがフック実装上で呼び出されます。
この実装を使用して、条件付き処理の実行、情報の事前読み込み、カスタム項目の処理などを行うことも可能です。価格設定フックがバックグラウンドで機能するしくみについての詳細は、「リソース」セクションのリンク先を参照してください。
フックのしくみを説明するために、Eliza がカートの価格計算パラメーターをどのように変更できるかを考えてみましょう。現在、顧客がカートに電話商品を追加すると、CPQ は選択された商品数量を 1 回限りの請求金額で乗算します。もし顧客が合計金額に適用された消費税も表示してほしいとしたらどうすればよいでしょうか? Eliza は、請求金額と数量を乗算した額に、適用される消費税率を乗算する価格設定フックを挿入できます。カートを変更して、この消費税の計算を示すカスタム列を表示することも可能です。
カスタムコードの挿入は正しく実行されれば強力ですが、いつでもどこでもフックを使用するようなことはやめてください。以下に、フックの実装に関する推奨事項を紹介します。
- フックを使用するニーズに対応する機能がすでに存在していないことを確認します。
- フック内のカスタムコードによって、Apex ガバナ制限を超える実行が引き起こされないことを確認します。
- フックコードの周りに try-catch を置き、カスタムコードによってスローされる例外をキャッチします。
- フックコードを単体テストする場合、フックコードで想定される入力をモックすることでテスト設定を最小限に抑え、コードカバー率が高くなる場合があります。Test.isRunningTest() を使用して、inputMap または静的対応付けからモック入力を抽出します。
必要でないフックを作成しないように、このガイドラインに従ってください。
郵便番号に基づく価格設定のための価格フック設定
マーケティングチームの依頼に対応する準備が整っている Eliza は、顧客の郵便番号に基づいてヘッドフォン商品の価格を変更するためにフックを使用することにしました。プラクティスガイド「Create a Pricing Hook (価格設定フックを作成する)」に記載されている手順に沿って Eliza と一緒に実装してみましょう。
価格設定フックが正常に作成されたため、Eliza は新しい注文を起動し、ヘッドフォン商品をカートに追加して、テストします。
価格は、顧客の郵便番号 (請求先) の範囲に対応する金額に自動調整されます。
次の単元
Eliza は、Industries CPQ アプリケーション自体に変更を加えることなくカスタム機能を挿入できると知って感激しています。フックのとりこになったと言っても過言ではありません。次の単元では、Eliza が顧客の商品利用状況に基づく価格設定を行う手順を一緒に見ていきましょう。