EC-CUBE東京ユーザグループ勉強会
2019/02/07
chihiro-adachi (足立 智広)
株式会社イーシーキューブ
- @chihiro-adachi
- EC-CUBEエバンジェリスト
アジェンダ
● 導入
○ 今日のゴール
○ PurchaseFlowとは
● カスタマイズ例(デモ)
● PurchaseFlowの仕組み
● カスタマイズ例の解説
● まとめ
今日のゴール
● PurchaseFlowの仕組みがわかる
● Processorのカスタマイズができるようになる
PurchaseFlowとは
● 受注の集計処理や整合性チェック・受注明細の操作を拡
張できる仕組み
● たとえば...
○ 値引きの計算を行う
○ 送料計算を行う
○ 合計金額を集計する
○ 在庫切れ商品のチェックを行う
PurchaseFlowとは
● 集計処理や、在庫チェックなどのバリデーションは、受注に関わる共通したロ
ジック
● 従来は、利用される画面で個別に実装されており、カスタマイズ時の影響が
読みづらい、再利用しにくいなどの課題があった
● 集計フローを制御するPurchaseFlowと、各処理を行うProcessorに分離し、ロ
ジックを差し替えたり、新たなバリデーションを追加したりなど拡張できるよう
に対応
https://github.com/EC-CUBE/ec-cube/pull/2424
カスタマイズ例(デモ)
カスタマイズ例(デモ)
● 「10,000円以上の購入で500円の値引き」を作る
● 作成するファイルは一つだけ
○ app/Customize/Service/PurchaseFlow/Processor/NebikiProcessor.
php
● ソースコード
○ https://github.com/chihiro-adachi/ec-cube/tree/demo-tokyo
○ https://github.com/chihiro-adachi/ec-cube/compare/ad03d2d0078f8
347c0a8fae9acc1ced74bf6e967...demo-tokyo
PurchaseFlowの仕組み
PurchaseFlowとProcessor
● PurchaseFlow
○ 明細処理や集計処理の全体のフローを制御する
Processorを順次実行していく
● Processor
○ 受注や明細に対するバリデーションや操作を行う
○ たとえば
■ 値引き明細を追加する
■ 販売制限数のチェックを行う
○ 実行タイミングはアノテーションや実装するインター
フェースで指定する(後述)
PurchaseFlowの流れ
①受注明細のバリデーション
②受注のバリデーション
金額集計
③受注の操作
④値引き明細の操作
⑤金額確定後の操作・バリデー
ション
金額集計
金額集計
金額集計
※PurchaseFlow::validate()の処理
金額集計
2系・3系の購入処理の流れ
https://github.com/EC-CUBE/ec-cube/pull/2424
PurchaseFlowの流れ
概要 具体例(一部抜粋) 実装するインターフェース
明細のバリデーション 商品価格の変更チェック
商品の公開ステータスチェック
ItemValidator
受注のバリデーション 在庫チェック
販売制限数のチェック
ItemHolderValidator
受注の操作 注文番号の払い出し
送料の明細の追加
送料無料条件の適用
支払い手数料の明細の追加
ItemHolderPreprocessor
値引き明細の操作 ポイント値引明細の追加 DiscountProcessor
金額確定後の操作・バリデーション 合計金額のマイナスチェック ItemHolderPostValidator
3種類のフロー
● CartFlow
○ カート画面、カートブロックで実行される
● ShoppingFlow
○ 購入確認画面、完了画面で実行される
● OrderFlow
○ 管理画面の受注登録画面で実行される
カスタマイズ例の解説
(ソースコード見ながら)
まとめ
覚えるのは3つだけ
● PurchaseFlowは集計や明細処理のフロー全体を制御し、
Processorを実行していく
● Processorはバリデーションや明細の操作をする
● Processorをどのタイミングで実行するかは、アノテーショ
ンや実装するインターフェースで指定
Thanks
#eccube

2019/2/7 EC-CUBE東京UG勉強会-PurchaseFlowの使い方-