本記事ではArcESBを使ってスマレジの売上データをCSVファイルに出力する方法を説明します。
スマレジはiPadやiPhoneといったスマートデバイスをハードウェアとして活用できるクラウドPOSシステムです。 POSレジの機能に加えて顧客管理、在庫管理、その他色々な機能をスマートフォンデバイスで操作することが出来ます。
- ArcESB
- シナリオ
- 取得項目
- 事前準備:Smaregi ADO.NET Driverのインストール
- フローの作成
- CDataコネクタ:スマレジのデータ取得
- XMLMapコネクタ:データのフラット化
- CSVMapコネクタ:CSVへの出力
- 動作確認
- 自動実行
- おわりに
ArcESB
ArcESB はノーコードでETL/EAIなどのデータ連携やEDIなどの企業間での各種取引情報連携を実現できるWebアプリケーションです。 インストール方法などについては以下の記事をご参考ください。
シナリオ
今回実現するシナリオを以下に示します。
入力データ
取得するスマレジのデータは以下の通りです。 2020/9/1~2020/9/30に記録された3件の売上履歴を対象とします。
出力データ
今回スマレジから出力するデータは注文番号、購入店舗名、店舗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の操作で連携を設定します。
事前準備:Smaregi ADO.NET Driverのインストール
CData Software Japan社のCData Smaregi ADO.NET Provider ダウンロードページからCData Smaregi ADO.NET Providerを入手し、ArcESBがインストールされている環境へインストールしてください。
フローの作成
今回作成するフローは以下のように3つのコネクタで構成されます。
テンプレートファイルの作成
フローの中ではXMLMap, CSVMapと二つのマッピングコネクタを使用します。 マッピングコネクタでは入力と出力のデータ形式を定義したテンプレートファイルを読み込ませる必要があるため、あらかじめテンプレートファイルを作成しておきます。
XMLMapコネクタ出力テンプレートの作成
CDataコネクタから取得したスマレジのデータは階層化されているため、このXMLMapコネクタのマッピング機能でデータをフラット化します。 マッピングを行うにあたり、出力するXML形式を定義したテンプレートファイルを作成し、これを読み込ませてコネクタ上に定義を設定します。
今回は以下のようなテンプレートファイルを作成しました。
<Items> <Transaction> <注文番号 /> <購入店舗名 /> <店舗ID /> <注文日 /> <税金 /> <合計 /> <スタッフID /> <商品コード /> <数量 /> </Transaction> </Items>
CSVMap出力テンプレートの作成
CSVMapコネクタではXMLMapでフラット化したスマレジのデータ項目を、出力するCSVファイルのデータ項目にマッピングします。 この対応付けを行うにあたり、出力先のカラムを定義したテンプレートファイルを作成し、これを読み込ませてコネクタ上に定義を設定します。
今回は以下のようなテンプレートファイルを作成しました。
注文番号,購入店舗名,店舗ID,注文日,税金,合計,スタッフID,商品コード,数量
CDataコネクタ:スマレジのデータ取得
それではフローを作成します。 はじめに起点となるCDataコネクタを配置します。
CDataコネクタではスマレジに接続するための接続設定と、取得するデータを定義する出力設定を行います。
接続設定
配置したCDataコネクタの[設定]タブで以下項目を設定してください。 スマレジのAPIを利用する方法についてはこちらの記事を参考にしてください。
設定項目 | 設定値 |
---|---|
データソース | 「CData Smaregi (バージョン番号) 」 |
Access Token | スマレジのアクセストークン |
Contract Id | スマレジのContract Id |
設定が完了したら[接続テスト]をクリックして接続をテストしてください。
データ出力設定
それでは出力するデータの設定を行います。 ここではデータ取得元の3つのテーブルについて、テーブルの選択、カラムの選択、フィルタの定義、テーブル関連付けの定義をそれぞれ行います。 少し複雑な作業になりますが、手っ取り早く設定したいという場合はこちらの内容をコピーし、アウトプットマッピングのコード(「</>」アイコンをクリックして表示)に貼り付けてください。
親テーブルTransactionHeadsの追加
はじめに親テーブルのTransactionHeadsテーブルを追加します。 [マッピング]セクションの[アウトプット]タブを開き、[+]をクリックして[テーブルまたはビュー]を選択します。
テーブルの一覧から「TransactionHeads」テーブルを選択し、[次]をクリックします。
続いて取得するカラムを選択します。 カラムのチェックを一旦全て解除し、StaffId, StoreId, TaxIncludeTotal, Total, TransactionDateTime, TransactionHeadIdをチェックします。
TransactionHeadsのデータを取得するにはフィルタ条件を指定する必要があります(参考)。 今回はフィルタ条件として取引日時を指定します。 [フィルタ]セクションの[ルールを追加]をクリックするとルールが追加されます。
二つルールを追加し、以下項目のフィルタを追加します。
- TransactionDateTime (取得期間の開始日)
- TransactionDateTime (取得期間の終了日)
子テーブルTransactionDetailsの追加
続いて子テーブルTransactionDetailsを追加します。 マッピングの[追加]をクリックして子テーブルの選択ダイアログを開きます。
テーブルの一覧から「TransactionDetails」を選択し、[追加]をクリックします。
カラムリストからTransactionDetailId, ProductId, Quantityをチェックします。
TransactionDetailsの参照もフィルタ条件の指定が必要です(参考)。 TransactionHeadsと同様に取引日時を指定します。
続いて親テーブルと子テーブルを結びつけるキーを指定します。 フィルタを一つ追加し、「TransactionHeadId」を選択します。 比較条件として「Equals」、フィルタ値のタイプとして「REF」を選択します。
参照先として親テーブルの外部キーを選択します。 ここでは親テーブル(TransactionHeads)の「TransactionHeadId」を選択します。
子テーブルStoresの追加
TransactionDetailsと同様に、TransactionHeadsの子テーブルとしてStoresを追加します。 カラムリストでStoreNameをチェックします。 親テーブルとの参照設定として、フィルタ条件に「StoreId」を選択し、参照先に親テーブルのStoreIdを指定します。
バッチ出力の設定
CDataコネクタはデフォルトでは1レコードずつ取得しますが、1度のアクセスで複数レコードを取得できるように設定します。 アウトプットマッピングの「</>」アイコンをクリックしてコードを編集します。
TransactionHeadsにbatchResults="true"の属性を追加し、[保存]をクリックします。
スマレジデータ取得の確認
ここで一度スマレジのデータ取得を確認してみます。 [アウトプット]タブの[受信]をクリックしてください。
データの取得に成功するとステータスが「Received」となり、取得したデータが記述されたメッセージ(XMLファイル)が受信されます。 メッセージファイルのリンクをクリックし、[Download Message]をクリックするとメッセージがダウンロードされます。
このメッセージから取得したデータの内容が確認できます。 今回は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コネクタと連結します。 この時点で一度フローを保存してください。
XMLMapのソースとデスティネーションにそれぞれメッセージのテンプレートを設定します。 入力元、出力先のコネクタと連結されている状態でフローを保存すると、ソース、デスティネーションにメッセージのテンプレートが自動的に設定されます。
今回は入力元にスマレジのCDataコネクタが連結しているため、ソース側のテンプレートが自動的に設定されています。 XMLMapの設定を開き、[ソースファイル]にCDataコネクタ出力のテンプレートが設定されていることを確認してください。
デスティネーション側のテンプレートを設定します。 [デスティネーションファイル]を開き、[サンプルファイルをアップロード]を選択します。
予め作成しておいたテンプレートファイル(sample.xml)を選択し[アップロード]をクリックしてください。
ソースとデスティネーションのテンプレートが設定されると、以下のように[マッピング]にそれぞれの項目が表示されます。
この画面で項目の対応付けを行います。 [ソース]の項目を[デスティネーション]の対応する項目にドラッグすると対応付けが行われます。
全ての項目の対応付けが完了したら[変更を保存]をクリックして保存してください。
CSVMapコネクタ:CSVへの出力
CSVMapコネクタを配置し、XMLMapコネクタと連結します。 この時点で一度フローを保存してください。
CSVMapコネクタもXMLMapと同様にソースとデスティネーションにそれぞれメッセージのテンプレートを設定します。 XMLMapコネクタと連結しているため、ソース側のテンプレートが自動的に設定されています。 CSVMapの設定を開き、[ソースファイル]にXMLMapコネクタ出力のテンプレートが設定されていることを確認してください。
XMLMapと同様に、[デスティネーション]に予め作成しておいたテンプレートファイル(sample.csv)をアップロードします。
テンプレートの設定が完了すると、以下のように[ソースフィールド]と出力先の[デスティネーションフィールド]に項目が表示されます。 今回は必要ありませんがこの画面で対応項目を編集することもできます。
設定が完了したら[変更を保存]をクリックして保存してください。
動作確認
それでは作成したフローを実行してみます。 フローの起点となるCDataコネクタの設定画面を開き、[アウトプット]タブの[受信]をクリックします。 これによりCDataコネクタがスマレジからデータを取得し、フローが開始されます。
フローが完了するとCSVファイルが生成されます。 フロー終端のCSVMapコネクタの設定画面を開き、[アウトプット]タブのファイルリストにCSVファイルが出力されていることを確認してください。
CSVファイルの内容を見るとスマレジのデータが出力されていることを確認できます。
コネクタの出力先フォルダは[Advanced]タブの[アウトプットフォルダ]で指定します。
CSVMapの出力先フォルダを下記のように設定するとC:\Work\ArcESBOutput
にCSVファイルが出力されます。
クラウドストレージへの出力
ArcESBはGoogle DriveやAmazon S3, Box, Dropbox, OneDriveなどのクラウドストレージとのファイル連携をサポートしています。 今回はフローで出力されるCSVファイルをGoogle Driveへ出力してみます。
[MFT]のGoogle Driveコネクタを配置します。
Google Driveの認証情報を設定し[接続]をクリックします。 必要な認証情報についてはこちらをご参考ください。
設定を保存し、フローを実行します。 以下のようにGoogle Drive上にファイルが送信されていることが確認できます。
自動実行
ArcESBはコネクタの受信処理のスケジュールを設定することによりフローの実行を自動化できます。 起点となるCDataコネクタの[オートメーション]タブを開きます。 [受信]セクションの[受信]をチェックし、[受信間隔]とその値を設定します。
例えば上記のように[受信間隔]を「Daily」に、値を「12:00」に設定すると毎日12:00にCDataコネクタの受信処理が行われます。 今回作成したフローのCDataコネクタにこの設定を適用した場合、毎日12:00にスマレジにアクセスしてフローが開始されます。
おわりに
今回はArcESBを使用し、複数のテーブルにまたがるスマレジの売上データをCSVで出力する方法を説明しました。 ご不明な点やご要望があればArcESBサポートまでお気軽にお問い合わせください。