こんにちは。CData Software Japan の色川です。
B2B データ連携の自動化を担うCData Arc ではEC サイトとの連携は人気の高いシナリオの1つです。さまざまなEC サイトとの連携を実現できるArc の中でも「Shopify との連携」は特に人気が高く「Shopify コネクタ」の活用方法は良くご相談をいただきます。
Shopify との連携シナリオでご相談頂くことが多いポイントの1つが「Shopify メタフィールド」かも知れません。Shopify のメタフィールドについては、こちらの記事が参考にして頂けますが、「Metafields オブジェクトからメタフィールドの値を取得してCSV に出力したい」というお話はわりと良くご相談いただきます。
先ほどの記事でも触れていますが、Shopify のMetafields オブジェクトはやや特殊でいわゆる「縦持ち」のデータ構造となるため、単純なデータマッピングでは希望のデータ構成で出力できないケースが多いです。
そこで、この記事では「CData Arc でShopify のMetafields をCSV ファイルに出力する」方法をご紹介します。この記事は「縦持ちのデータ構造を横持ちにマッピングする方法」としても参考にしていただけるかと思います。
この記事は、CData Software Advent Calendar 2024(シリーズ 2)22日目の記事です。
Shopify
Shopifyは、個人から大企業まで対応可能なクラウド型eコマースプラットフォームです。オンラインストアを簡単に構築・運営でき、商品管理、決済、在庫管理、マーケティングツールを一元化することができます。Shopify は世界175か国以上で数百万を超えるビジネスで利用されている人気のプラットフォームです。
Shopify のメタフィールド(Metafields)
Shopify には、商品や注文などの基本的なデータモデルが準備されていますが、より複雑または具体的なデータモデルが必要な場合、カスタムデータを使用して既存のデータモデルを拡張し、独自のデータモデルを作成することができます。その中で「メタフィールド(Metafields)」は、カスタムフィールドまたは標準フィールドを定義し、商品など、Shopify の各部分と関連付けすることができます。
先ほどの記事でも触れていますが、CData のShopify Driver(および、それをベース技術としているArc のShopify コネクタ)では、Shopify のメタフィールド(Metafields)を2つのアプローチで取得することができます。IncludeCustomFields プロパティを利用するアプローチはシンプルですが、取得できる対象は「Products」「ProductVariants」に制限されます。もう1つのアプローチであるMetafields オブジェクトから取得する方法は、より広い範囲で利用できますが、データ構造がやや特殊でいわゆる「縦持ち」のデータ構造となるため、単純なデータマッピングでは希望のデータ構成で出力できないケースが多いです。ここで言う「縦持ち」は以下のようなデータ構造のことを指しています。
この記事のシナリオ
この記事では、顧客(customer)に関連付けたメタフィールドの値を顧客レコードとともに取得し、XML Map コネクタの幾つかの機能(Virtual lool やCustom Condition)を活用して、いわゆる「横持ち」のデータ構造にマッピングしてCSV に出力します。
Shopify 側ではサンプルとしてこのようなメタフィールドを設定しました。顧客(customer)に対する「独自のId(customer.originalcode)」「ニックネーム(customer.nickname)」と「最終来店日(customer.lastvisitday)」をイメージしていますが、このようなメタフィールドを定義されている方は割と多いのではないでしょうか。
このフローでは、このようなCSV ファイルとして出力するイメージです。この記事では、スキーマファイルを自動生成するために、output.template.csv として用意しました。
フロー構成自体はシンプルで、XML Map コネクタでの「縦持ちのデータ構造を横持ちにマッピングする設定」がポイントと言えるかも知れません。
連携フローの作成
それでは実際に連携フローを作成していきます。
Shopify コネクタ
最初に、顧客(Customers)とメタフィールド(Metafields)を取得するShopify コネクタを構成します。
この記事ではAccess Token で認証しました。
顧客(Customers)と関連するメタフィールド(Metafields)は、Arc のChildTables 機構を利用して親子関係のデータ構造で取得します。
複数の顧客レコードを単一のCSV ファイルとして出力するために「最大レコード数」を「-1」に構成しておきます。
XML 出力をプレビューで確認すると、期待通りのデータが取得できそうです。この時点ではMetafields のデータ構造は縦持ち(1つの顧客レコードに複数のMetafields レコードが紐づくデータ構造)で取得されるイメージです。
CSV コネクタ
次に、XML Map コネクタでマッピングしたXML 形式のデータをCSV 形式に変換するCSV コネクタを構成します。「カラムヘッダーが存在します」を有効にします。
XML Map コネクタでマッピングする時に必要なスキーマファイルを「テストファイルをアップロード」を利用して、output.template.csv から自動生成しておきます。
XML Map コネクタ
次にXML Map コネクタを構成して、Shopify で取得した連携元データを、CSV コネクタで生成したスキーマファイルの形式にマッピングします。この記事のポイントとなる部分です。
まず、レコードの繰り返し(Customers)をマッピングした後に、Customers から取得できるId はそのままマッピングします。
次に、Metafields レコードは単一の顧客(Customers)レコードに複数レコードが紐づいているため「Metafields のレコード数分を繰り返して参照」し「レコードの特定項目の値(key の値)によって妥当な項目にマッピングする設定」をしていきます。まずは「Metafields のレコード数分を繰り返して参照」するために「ループを追加」します。
この記事では、CSV として出力する「Originalcode」「Nickname」「Lastvisitday」はそれぞれMetafields レコードから取得しますので、ループの中で判断するために、loop(Virtual loop)の配下に構成します。ソース側のMetafields からloop(Virtual loop)に繰り返しのマッピングをしておきます。
次に、各項目に「マッピング条件を追加」して「入力されたXML データの"key" の値」が「マッピングしたいレコードが持つkey の場合にのみマッピングされる」ように構成します。例えば、以下はデスティネーション側の「Originalcode」項目に設定したマッピング条件で「key」が「originalcode」の場合のみ、マッピング対象として成立します。
他の項目(Nickname、Lastvisitday)も同じ要領で設定しました。
File コネクタ
最後にCSV ファイルとしてファイルシステムに出力するFile コネクタを構成します。「パス」を設定します。
連携フローの実行
トリガー開始の「手動で受信」から実行します。
期待通りの構成でCSV ファイルに出力することができました。
まとめ
この記事では「CData Arc でShopify のMetafields をCSV ファイルに出力する」方法をご紹介しました。
ごらんいただいたようにArc の中核的なコネクタの1つであるXML Map コネクタはとても強力なマッピング機能を提供しています。この記事は「縦持ちのデータ構造を横持ちにマッピングする方法」としても参考にしていただけるかと思います。
CData Arc はシンプルで拡張性の高いコアフレームワークに、豊富なMFT・EDI・エンタープライズコネクタを備えたパワフルな製品です。CData Drivers との組み合わせで270を超えるアプリケーションへの連携を実現できます。
皆さんのつなぎたいシナリオでぜひ CData Arc を試してみてください。
CData Arc - セキュアなデータ連携とマネージドファイル転送(MFT)
製品を試していただく中で何かご不明な点があれば、テクニカルサポートへお気軽にお問い合わせください。
CData Software Japan - Support Form
この記事では CData Arc™ 2024 - 24.3.9118.0 を利用しています。