Shopify Flowでの条件判定において動的に変化する日時と比較する方法
こんにちは。
ディレクターの田辺です。
本記事のタイトルが意味不明かと思うので、まず少し解説を。
本記事では下記のような状況でのShopify Flowでの条件判定を考えます。
・・・・・・
注文が発生した時、それが、15:00前であれば「当日発送タグ」を注文に付与したい。
・・・・・・
この「注文が発生した時、それが、15:00前であれば」というのが、Shopify Flowでは一筋縄ではいきません。
Shopify Flowにおいて、日時で条件判定しようと思うと下図のようなUIが表示されます。
ご覧の通り、何日の何時か、を設定するためのUIです。
「注文が発生した日の15:00」の「15:00」は設定できますが、「注文が発生した日」は注文が発生した日によって動的に変化しますから、このUIでは設定できないのです。
例えば、今日が9月15日だとして、上図のUIで「9月15日の15:00」という設定はもちろんできます。
しかし、明日になり9月16日になっても、「9月15日の15:00」が「9月16日の15:00」に自動的に変わるわけではありません。
9月16日の13:00に注文が発生したとしても、「9月15日の15:00」と比較するわけですから、本来の意図としては「9月16日の15:00」より前なので「真」とし「当日発送タグ」を注文につけたいところが、「9月15日の15:00」と比較すれば「9月16日の13:00」は「後」ですから「偽」となり「当日発生タグ」を注文につけられないわけです。
前置きが長くなりましたが、本記事では、このような条件判定をShopify Flowでうまくやる方法をご紹介します。
なお、本記事はShopifyコミュニティの下記の投稿への回答を元にしています。
https://community.shopify.com/c/%E7%B7%8F%E5%90%88%E7%9A%84%E3%81%AA%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3/shopify%E3%83%95%E3%83%AD%E3%83%BC%E3%81%AE%E4%BD%9C%E6%88%90%E6%96%B9%E6%B3%95%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/m-p/1805975
想定状況
本記事では、全段で記載した、
「注文が発生した時、それが、15:00前であれば「当日発送タグ」を注文に付与したい」
という状況を想定して解説します。
方法
2種類のアプローチがあります。
- こちらの投稿の回答で紹介しているように、メタフィールドをアップデートするアクション内であれば自由にliquidを記載できることを活かして、動的な日時比較を行う方法
- 予定時刻トリガーで、毎日決まった時間にアクションを実行する方法
1の方法については、投稿の回答で詳しく記載しているため、本記事では2の方法について記載します。
いきなり結論
下図のようなフローを組めば良いです。
順に設定内容を見ていきます。
まず、予定時刻トリガーの設定は下図のようになります。
3:00 pmに開始し、1日ごとに繰り返すよう設定します。
次に、下図のように注文データを取得します。Maximum number of orders
がデータ数です。これを最大の100に設定します。
クエリは、Created in the last day
を選択します。こうすることで都合が良いことに、昨日の15:00から今日の15:00までの注文を取得できます。
そして、For each loopアクションを下図のように設定します。
リストに Get order data
を指定するだけです。
最後に、Add order tagsアクションを設定します。
見ての通り、Tagsで、「当日配送」タグを設定するだけです。
2つのアプローチのメリットとデメリット
メタフィールドのアップデートアクションを利用する方法のデメリットは、この処理のために、余計にメタフィールドを用意する必要があることです。
また、比較的フローも複雑になります。
余計なものが増えることと複雑になることは、思わぬミスを呼び込む原因になりやすいです。
また、「注文が発生した時」に、当日配送かどうかを決定する必要があることも問題です。
例えば、こちらの方法では、15:00から24:00までの間に発生した注文には「当日配送タグ」が付与されません。発送のオペレーションルールが、16:00の段階で「当日配送タグ」がついている注文を発送する、だった場合、昨日の15:00から24:00までに発生した注文も、今日という視点から見れば「当日配送」なわけですが、これらの注文には「当日配送タグ」がないわけですから、ルールベースでオペレーションしようと思うと、もう一工夫必要になります。
では、予定時刻トリガーの方はというと、比較的フローが簡単に組めますし、余計なメタフィールドの追加も不要です。
また、昨日の15:00から24:00までの間に発生した注文についても「当日配送タグ」が「今日」付与されます。
一見、いいことしかないように見えますが、1つ落とし穴があります。
それは、Get order dataで扱えるデータの最大数が100件であることです。
つまり、1日に100件以上注文が発生するストアの場合、この方法は利用できない、もしくは利用するにしても、もう一工夫必要になるわけです。
まとめ
2つのアプローチのメリットとデメリットをお伝えした中で、どちらの方法も要件によっては「もう一工夫必要」と記載しました。その工夫が何なのか知りたいという方は、ぜひ、お問い合わせください。
やりたいことやストアの状況によっても「工夫の仕方」が変わってくるので個別の対応が必要になります。
それでは。