2023.09.08[Fri]

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種類のアプローチがあります。

    1. こちらの投稿の回答で紹介しているように、メタフィールドをアップデートするアクション内であれば自由にliquidを記載できることを活かして、動的な日時比較を行う方法
    2. 予定時刻トリガーで、毎日決まった時間にアクションを実行する方法

    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つのアプローチのメリットとデメリットをお伝えした中で、どちらの方法も要件によっては「もう一工夫必要」と記載しました。その工夫が何なのか知りたいという方は、ぜひ、お問い合わせください。

    やりたいことやストアの状況によっても「工夫の仕方」が変わってくるので個別の対応が必要になります。

    お問い合わせはこちらから

    それでは。

    Share

    Dawnのスライドショーで画像全体にリンクを設定する方法Dawnのスライドショーにスマートフォン用の画像を追加する方法