CData Software Blog

クラウド連携のCData Software の技術ブログです。

ArcESB : スマレジの売上データをCSVファイルに出力する

本記事ではArcESBを使ってスマレジの売上データをCSVファイルに出力する方法を説明します。

スマレジはiPadiPhoneといったスマートデバイスをハードウェアとして活用できるクラウドPOSシステムです。 POSレジの機能に加えて顧客管理、在庫管理、その他色々な機能をスマートフォンバイスで操作することが出来ます。

smaregi.jp

ArcESB

ArcESB はノーコードでETL/EAIなどのデータ連携やEDIなどの企業間での各種取引情報連携を実現できるWebアプリケーションです。 インストール方法などについては以下の記事をご参考ください。

www.cdatablog.jp

シナリオ

今回実現するシナリオを以下に示します。

f:id:urabe_shintaro:20210513094304p:plain

入力データ

取得するスマレジのデータは以下の通りです。 2020/9/1~2020/9/30に記録された3件の売上履歴を対象とします。

f:id:urabe_shintaro:20210513094321p:plain

出力データ

今回スマレジから出力するデータは注文番号、購入店舗名、店舗ID、注文日、税金、合計金額、スタッフID、商品コード、数量の9項目とします。 上で示した入力データを以下のようなCSVファイルとして出力します。

注文番号,購入店舗名,店舗ID,注文日,税金,合計,スタッフID,商品コード,数量
"1221","販売店A","1","2020-09-02T11:18:17.0000+09:00","2190.000000","24100.000000","3","20","1"
"1222","販売店A","1","2020-09-02T11:25:17.0000+09:00","2190.000000","24100.000000","3","20","1"
"1223","販売店A","1","2020-09-02T11:25:46.0000+09:00","890.000000","9800.000000","3","49","1"

取得項目

ArcESBのCDataコネクタで取得できるスマレジのテーブルについてはこちらをご覧ください。 今回取得する項目は3つのテーブルにまたがっています。 以下に項目の取得先のテーブルとフィールドを示します。

項目 テーブル フィールド
注文番号 TransactionHeads TransactionHeadId
店舗ID TransactionHeads StoreId
注文日 TransactionHeads TransactionDateTime
税金 TransactionHeads TaxInclude
合計金額 TransactionHeads Total
スタッフID TransactionHeads StaffId
商品コード TransactionDetails ProductId
数量 TransactionDetails Quantity
購入店舗名 Stores StoreName

TransactionDetailsとTransactionHeadsはTransactionHeadIdをキーとして、TransactionDetailsとStoresはStoreIdをキーとして関連付けを行います。 ArcESBのCDataコネクタではデータを取得するクエリにJOIN句を書くこともできますが、今回はUIの操作で連携を設定します。

f:id:urabe_shintaro:20210513123150p:plain

事前準備:Smaregi ADO.NET Driverのインストール

CData Software Japan社のCData Smaregi ADO.NET Provider ダウンロードページからCData Smaregi ADO.NET Providerを入手し、ArcESBがインストールされている環境へインストールしてください。

f:id:urabe_shintaro:20210513094346p:plain

フローの作成

今回作成するフローは以下のように3つのコネクタで構成されます。

f:id:urabe_shintaro:20210513094356p:plain

テンプレートファイルの作成

フローの中ではXMLMap, CSVMapと二つのマッピングコネクタを使用します。 マッピングコネクタでは入力と出力のデータ形式を定義したテンプレートファイルを読み込ませる必要があるため、あらかじめテンプレートファイルを作成しておきます。

XMLMapコネクタ出力テンプレートの作成

CDataコネクタから取得したスマレジのデータは階層化されているため、このXMLMapコネクタのマッピング機能でデータをフラット化します。 マッピングを行うにあたり、出力するXML形式を定義したテンプレートファイルを作成し、これを読み込ませてコネクタ上に定義を設定します。

今回は以下のようなテンプレートファイルを作成しました。

sample.xml

<Items>
    <Transaction>
        <注文番号 />
        <購入店舗名 />
        <店舗ID />
        <注文日 />
        <税金 />
        <合計 />
        <スタッフID />
        <商品コード />
        <数量 />
    </Transaction>
</Items>

CSVMap出力テンプレートの作成

CSVMapコネクタではXMLMapでフラット化したスマレジのデータ項目を、出力するCSVファイルのデータ項目にマッピングします。 この対応付けを行うにあたり、出力先のカラムを定義したテンプレートファイルを作成し、これを読み込ませてコネクタ上に定義を設定します。

今回は以下のようなテンプレートファイルを作成しました。

sample.csv

注文番号,購入店舗名,店舗ID,注文日,税金,合計,スタッフID,商品コード,数量

CDataコネクタ:スマレジのデータ取得

それではフローを作成します。 はじめに起点となるCDataコネクタを配置します。

f:id:urabe_shintaro:20210513094416p:plain

CDataコネクタではスマレジに接続するための接続設定と、取得するデータを定義する出力設定を行います。

接続設定

配置したCDataコネクタの[設定]タブで以下項目を設定してください。 スマレジのAPIを利用する方法についてはこちらの記事を参考にしてください。

設定項目 設定値
データソース 「CData Smaregi (バージョン番号) 」
Access Token スマレジのアクセストーク
Contract Id スマレジのContract Id

f:id:urabe_shintaro:20210513094521p:plain

設定が完了したら[接続テスト]をクリックして接続をテストしてください。

データ出力設定

それでは出力するデータの設定を行います。 ここではデータ取得元の3つのテーブルについて、テーブルの選択、カラムの選択、フィルタの定義、テーブル関連付けの定義をそれぞれ行います。 少し複雑な作業になりますが、手っ取り早く設定したいという場合はこちらの内容をコピーし、アウトプットマッピングのコード(「</>」アイコンをクリックして表示)に貼り付けてください。

親テーブルTransactionHeadsの追加

はじめに親テーブルのTransactionHeadsテーブルを追加します。 [マッピング]セクションの[アウトプット]タブを開き、[+]をクリックして[テーブルまたはビュー]を選択します。

f:id:urabe_shintaro:20210513094544p:plain

テーブルの一覧から「TransactionHeads」テーブルを選択し、[次]をクリックします。

f:id:urabe_shintaro:20210513103423p:plain

続いて取得するカラムを選択します。 カラムのチェックを一旦全て解除し、StaffId, StoreId, TaxIncludeTotal, Total, TransactionDateTime, TransactionHeadIdをチェックします。

f:id:urabe_shintaro:20210513103433p:plain

TransactionHeadsのデータを取得するにはフィルタ条件を指定する必要があります(参考)。 今回はフィルタ条件として取引日時を指定します。 [フィルタ]セクションの[ルールを追加]をクリックするとルールが追加されます。

f:id:urabe_shintaro:20210513103645p:plain

二つルールを追加し、以下項目のフィルタを追加します。

  • TransactionDateTime (取得期間の開始日)
  • TransactionDateTime (取得期間の終了日)

f:id:urabe_shintaro:20210513103616p:plain

子テーブルTransactionDetailsの追加

続いて子テーブルTransactionDetailsを追加します。 マッピング[追加]をクリックして子テーブルの選択ダイアログを開きます。

f:id:urabe_shintaro:20210513103500p:plain

テーブルの一覧から「TransactionDetails」を選択し、[追加]をクリックします。

f:id:urabe_shintaro:20210513103535p:plain

カラムリストからTransactionDetailId, ProductId, Quantityをチェックします。

f:id:urabe_shintaro:20210513103546p:plain

TransactionDetailsの参照もフィルタ条件の指定が必要です(参考)。 TransactionHeadsと同様に取引日時を指定します。

f:id:urabe_shintaro:20210513103616p:plain

続いて親テーブルと子テーブルを結びつけるキーを指定します。 フィルタを一つ追加し、「TransactionHeadId」を選択します。 比較条件として「Equals」、フィルタ値のタイプとして「REF」を選択します。

f:id:urabe_shintaro:20210513105929p:plain

参照先として親テーブルの外部キーを選択します。 ここでは親テーブル(TransactionHeads)の「TransactionHeadId」を選択します。

f:id:urabe_shintaro:20210513103758p:plain

子テーブルStoresの追加

TransactionDetailsと同様に、TransactionHeadsの子テーブルとしてStoresを追加します。 カラムリストでStoreNameをチェックします。 親テーブルとの参照設定として、フィルタ条件に「StoreId」を選択し、参照先に親テーブルのStoreIdを指定します。

f:id:urabe_shintaro:20210513103812p:plain

バッチ出力の設定

CDataコネクタはデフォルトでは1レコードずつ取得しますが、1度のアクセスで複数レコードを取得できるように設定します。 アウトプットマッピングの「</>」アイコンをクリックしてコードを編集します。

f:id:urabe_shintaro:20210513103831p:plain

TransactionHeadsにbatchResults="true"の属性を追加し、[保存]をクリックします。

f:id:urabe_shintaro:20210513103841p:plain

スマレジデータ取得の確認

ここで一度スマレジのデータ取得を確認してみます。 [アウトプット]タブの[受信]をクリックしてください。

f:id:urabe_shintaro:20210513103852p:plain

データの取得に成功するとステータスが「Received」となり、取得したデータが記述されたメッセージ(XMLファイル)が受信されます。 メッセージファイルのリンクをクリックし、[Download Message]をクリックするとメッセージがダウンロードされます。

f:id:urabe_shintaro:20210513103910p:plain

このメッセージから取得したデータの内容が確認できます。 今回は3件の取引履歴を取得しましたが、以下のように受信したメッセージに出力されていることが確認できました。

<?xml version="1.0" encoding="UTF-8"?>
<Items xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <TransactionHeads>
        <StoreId>1</StoreId>
        <StaffId>3</StaffId>
        <TaxInclude>2190.000000</TaxInclude>
        <Total>24100.000000</Total>
        <TransactionDateTime>2020-09-02T11:18:17.0000+09:00</TransactionDateTime>
        <TransactionHeadId>1221</TransactionHeadId>
        <TransactionDetails>
            <ProductId>20</ProductId>
            <Quantity>1</Quantity>
        </TransactionDetails>
        <Stores>
            <StoreName>販売店A</StoreName>
        </Stores>
    </TransactionHeads>
    <TransactionHeads>
        <StoreId>1</StoreId>
        <StaffId>3</StaffId>
        <TaxInclude>2190.000000</TaxInclude>
        <Total>24100.000000</Total>
        <TransactionDateTime>2020-09-02T11:25:17.0000+09:00</TransactionDateTime>
        <TransactionHeadId>1222</TransactionHeadId>
        <TransactionDetails>
            <ProductId>20</ProductId>
            <Quantity>1</Quantity>
        </TransactionDetails>
        <Stores>
            <StoreName>販売店A</StoreName>
        </Stores>
    </TransactionHeads>
    <TransactionHeads>
        <StoreId>1</StoreId>
        <StaffId>3</StaffId>
        <TaxInclude>890.000000</TaxInclude>
        <Total>9800.000000</Total>
        <TransactionDateTime>2020-09-02T11:25:46.0000+09:00</TransactionDateTime>
        <TransactionHeadId>1223</TransactionHeadId>
        <TransactionDetails>
            <ProductId>49</ProductId>
            <Quantity>1</Quantity>
        </TransactionDetails>
        <Stores>
            <StoreName>販売店A</StoreName>
        </Stores>
    </TransactionHeads>
</Items>

XMLMapコネクタ:データのフラット化

XMLMapコネクタを配置し、CDataコネクタと連結します。 この時点で一度フローを保存してください。

f:id:urabe_shintaro:20210513103923p:plain

XMLMapのソースとデスティネーションにそれぞれメッセージのテンプレートを設定します。 入力元、出力先のコネクタと連結されている状態でフローを保存すると、ソース、デスティネーションにメッセージのテンプレートが自動的に設定されます。

今回は入力元にスマレジのCDataコネクタが連結しているため、ソース側のテンプレートが自動的に設定されています。 XMLMapの設定を開き、[ソースファイル]にCDataコネクタ出力のテンプレートが設定されていることを確認してください。

f:id:urabe_shintaro:20210513103933p:plain

デスティネーション側のテンプレートを設定します。 [デスティネーションファイル]を開き、[サンプルファイルをアップロード]を選択します。

f:id:urabe_shintaro:20210513103945p:plain

予め作成しておいたテンプレートファイル(sample.xml)を選択し[アップロード]をクリックしてください。

f:id:urabe_shintaro:20210513103954p:plain

ソースとデスティネーションのテンプレートが設定されると、以下のように[マッピング]にそれぞれの項目が表示されます。

f:id:urabe_shintaro:20210513104001p:plain

この画面で項目の対応付けを行います。 [ソース]の項目を[デスティネーション]の対応する項目にドラッグすると対応付けが行われます。

f:id:urabe_shintaro:20210513104012p:plain

全ての項目の対応付けが完了したら[変更を保存]をクリックして保存してください。

f:id:urabe_shintaro:20210513104021p:plain

CSVMapコネクタ:CSVへの出力

CSVMapコネクタを配置し、XMLMapコネクタと連結します。 この時点で一度フローを保存してください。

f:id:urabe_shintaro:20210513104045p:plain

CSVMapコネクタもXMLMapと同様にソースとデスティネーションにそれぞれメッセージのテンプレートを設定します。 XMLMapコネクタと連結しているため、ソース側のテンプレートが自動的に設定されています。 CSVMapの設定を開き、[ソースファイル]にXMLMapコネクタ出力のテンプレートが設定されていることを確認してください。

f:id:urabe_shintaro:20210513104054p:plain

XMLMapと同様に、[デスティネーション]に予め作成しておいたテンプレートファイル(sample.csv)をアップロードします。

f:id:urabe_shintaro:20210513104103p:plain

テンプレートの設定が完了すると、以下のように[ソースフィールド]と出力先の[デスティネーションフィールド]に項目が表示されます。 今回は必要ありませんがこの画面で対応項目を編集することもできます。

f:id:urabe_shintaro:20210513104113p:plain

設定が完了したら[変更を保存]をクリックして保存してください。

動作確認

それでは作成したフローを実行してみます。 フローの起点となるCDataコネクタの設定画面を開き、[アウトプット]タブの[受信]をクリックします。 これによりCDataコネクタがスマレジからデータを取得し、フローが開始されます。

f:id:urabe_shintaro:20210513104124p:plain

フローが完了するとCSVファイルが生成されます。 フロー終端のCSVMapコネクタの設定画面を開き、[アウトプット]タブのファイルリストにCSVファイルが出力されていることを確認してください。

f:id:urabe_shintaro:20210513104133p:plain

CSVファイルの内容を見るとスマレジのデータが出力されていることを確認できます。

f:id:urabe_shintaro:20210513104213p:plain

コネクタの出力先フォルダは[Advanced]タブの[アウトプットフォルダ]で指定します。 CSVMapの出力先フォルダを下記のように設定するとC:\Work\ArcESBOutputCSVファイルが出力されます。

f:id:urabe_shintaro:20210513104205p:plain

クラウドストレージへの出力

ArcESBはGoogle DriveAmazon S3, Box, Dropbox, OneDriveなどのクラウドストレージとのファイル連携をサポートしています。 今回はフローで出力されるCSVファイルをGoogle Driveへ出力してみます。

[MFT]Google Driveコネクタを配置します。

f:id:urabe_shintaro:20210513192131p:plain

Google Driveの認証情報を設定し[接続]をクリックします。 必要な認証情報についてはこちらをご参考ください。

f:id:urabe_shintaro:20210513192239p:plain

設定を保存し、フローを実行します。 以下のようにGoogle Drive上にファイルが送信されていることが確認できます。

f:id:urabe_shintaro:20210513192950p:plain

自動実行

ArcESBはコネクタの受信処理のスケジュールを設定することによりフローの実行を自動化できます。 起点となるCDataコネクタの[オートメーション]タブを開きます。 [受信]セクションの[受信]をチェックし、[受信間隔]とその値を設定します。

f:id:urabe_shintaro:20210513104227p:plain

例えば上記のように[受信間隔]を「Daily」に、値を「12:00」に設定すると毎日12:00にCDataコネクタの受信処理が行われます。 今回作成したフローのCDataコネクタにこの設定を適用した場合、毎日12:00にスマレジにアクセスしてフローが開始されます。

おわりに

今回はArcESBを使用し、複数のテーブルにまたがるスマレジの売上データをCSVで出力する方法を説明しました。 ご不明な点やご要望があればArcESBサポートまでお気軽にお問い合わせください。