# 年間の購入金額を顧客のメタフィールドに格納する

**URL:** <https://community.shopify.com/t/topic/350991>\
**Category:** Shopify アプリ\
**Created:** [August 22, 2024, 9:14am UTC](https://community.shopify.com/t/topic/350991 "2024-08-22T09:14:22Z")\
**Posts on this page:** 2\
**Page:** 1

## AI-generated summary

顧客の年間購入金額を自動的にメタフィールドに格納するShopify Flowの構築方法についての質問と回答。

**質問内容：**
- 当年（2024年4月1日～12月31日）の累計購入金額を顧客メタフィールドに格納したい
- 新規購入やキャンセル時に自動更新する仕組みを実現したい

**提案された解決策：**
- Shopify FlowのRun Code機能を使用する方法
- Order Createdをトリガーとして設定
- Run Codeで顧客の過去1年間の注文データを取得し、合計金額を計算
- 最後に顧客メタフィールドを更新

**実装の詳細：**
- GraphQLクエリで注文情報と顧客データを取得
- JavaScriptコードで年間の注文を抽出し合計金額を算出
- スクリーンショット付きでフロー全体の構成を提示

**注意点：**
- 提示されたコードは参考例であり、金額の一致について十分な検証が必要
- Order Created時の例のみで、完全なテストは未実施

<div class="post-metadata">

**Author:** ![shin\_shin](https://avatars.discourse-cdn.com/v4/letter/s/eada6e/32.png) [@shin\_shin](https://community.shopify.com/u/shin_shin)\
**Post date:** [August 22, 2024, 9:14am UTC](https://community.shopify.com/t/topic/350991/1 "2024-08-22T09:14:22Z")

</div>

年間の購入金額を顧客にメタフィールドに格納するFlowを組みたいのですが方法がわからず。。  
方法がわかる方、大変恐縮ですが、ご教示いただけますと幸いです。

【実現したいこと】

当年（20241.1-2024.12.31）の累計購入金額を顧客のメタフィールドに格納したい。

購入が増えたり、キャンセルが入るたびに更新して行きたい。

---

<div class="post-metadata">

**Author:** ![Qcoltd](https://yyz1.discourse-cdn.com/shopifyforum/user_avatar/community.shopify.com/qcoltd/32/900_2.png) [@Qcoltd](https://community.shopify.com/u/Qcoltd)\
**Post date:** [August 26, 2024, 2:48pm UTC](https://community.shopify.com/t/topic/350991/2 "2024-08-26T14:48:24Z")

</div>

@shin_shin 様

Run Codeを使用されてはどうでしょうか？

Order Createdの際の例だけになりますが、下記のようになるはずです。

[フロー全体]

 ![screenshot_20240826_01.png](https://canada1.discourse-cdn.com/shopifyforum/original/3X/5/0/50e225b9e5018c4507bd1f9c1ad17b0d3385956f.png)

[Run Code]

 ![screenshot_20240826_02.png](https://canada1.discourse-cdn.com/shopifyforum/original/3X/b/b/bbf110161eabefb7acfcde242c75fcda36f2ba1f.png)

Run Codeの入力は下記です。

```javascript
{
  order {
    createdAt
    customer {
      orders {
        currentTotalPriceSet {
          shopMoney {
            amount
          }
        }
        createdAt
      }
    }
  }
}

```

Run Codeの出力は下記です。

```javascript
type Output {
  purchaingTotalYeary: Int!
}

```

Run Codeのコードは下記です。

```markup
export default function main(input) {
  const currentDateTime = new Date(input.order.createdAt);
  const lastYearDateTime = new Date(new Date(input.order.createdAt).setFullYear(currentDateTime.getFullYear() - 1));
  const orders = input.order.customer.orders;
  let purchaingTotalYeary = 0;
  orders.forEach(order => {
    const orderCreatedAt = new Date(order.createdAt);
    if (orderCreatedAt > lastYearDateTime) {
      purchaingTotalYeary = purchaingTotalYeary + order.currentTotalPriceSet.shopMoney.amount;
    }
  });
  return {
    purchaingTotalYeary: purchaingTotalYeary
  }
}

```

Flow全体の説明をしますと、

Order Createdでトリガーし、

Run Codeでは、トリガーとなった注文の日時から1年以内の注文の合計金額を求め、

最後に顧客メタフィールドを更新しています。

十分にテストはしていませんので、

金額が一致するかは十分に検証いただく必要があります。

ご参考まで。

(キュー田辺)
