CData Arc:NetSuiteの注文書データをCSVファイルに出力する

by 浦邊信太郎 | 2022年03月25日

こんにちは、CData Software Japanエンジニアの浦邊です。 本記事ではCData ArcでNetSuiteの注文書データを取得し、CSVファイルに出力する方法を紹介します。

NetSuiteの注文書は注文書番号、顧客、納期といった注文書のヘッダ情報の他に、注文製品やチームメンバーなどの明細情報を持ちます。 明細情報自体もリストになっているため通常のフラットなデータと扱いが異なります。 この記事では複数の注文書のヘッダ情報をCSVファイルに出力する方法と、一つの注文書の明細情報のリストをCSVファイルに出力する方法をそれぞれ紹介します。

紹介する方法ではCData ArcのNetSuiteコネクタを使用します。 NetSuiteの接続作成方法など基本的な使い方については以下の記事を参考にしてください。

www.cdatablog.jp

目次

1.注文書データの構造

NetSuiteの注文書は以下のように注文書の基本情報となるヘッダ情報と、注文製品リストなどの明細情報を持ちます。

f:id:urabe_shintaro:20220325144639p:plain

注文書のリストを格納するSalesOrderテーブルはこのデータを以下のように保持します。 製品など明細のリストデータはフラット化されて一つのフィールドに格納されます。

f:id:urabe_shintaro:20220325144714p:plain

CData Arcで注文書データを扱うときのメッセージを見てみます。 リストデータ(SalesOrderItem)は子要素の配列として定義されています。

<Items xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <SalesOrder>
        <Entity_Name>X社</Entity_Name>
        <Total>1000000</Total>
        <TranDate>2022-3-1</TranDate>
        <TranId>SLS00001</TranId>
        <SalesOrderItem>
                <Item_Name>製品A</Item_Name>
                <Quantity>3</Quantity>
        </SalesOrderItem>
        <SalesOrderItem>
                <Item_Name>製品A</Item_Name>
                <Quantity>4</Quantity>
        </SalesOrderItem>
    </SalesOrder>
</Items>

2. 注文書を取得する

CData Arcで注文書のリストを取得する方法を示します。 NetSuiteコネクタを配置し、コネクタの設定画面で、アクションに[Select]、テーブル名に[SalesOrder]を選択します。

f:id:urabe_shintaro:20220325143625p:plain

続いて取得するカラムをチェックします。 今回は以下のカラムをチェックします。

対象項目 カラムId
注文書番号 TranId
顧客名 Entity_Name
納期 TranDate
合計金額 Total
製品リスト SalesOrderItem

注文書が大量にある場合、全てのデータを取得すると長い時間がかかります。 今回は[フィルタ]を使って作成日(CreatedDate)で絞ります。

f:id:urabe_shintaro:20220325143712p:plain

この設定でデータを受信します。 [アウトプット][受信]をクリックするとフィルタで指定した日以降に作成された注文書データが受信されます。 一つのメッセージファイルには一つの注文書のデータが格納されています。

f:id:urabe_shintaro:20220325143806p:plain

そのうちの一つを開いてみます。 NetSuiteコネクタのカラムリストでチェックした項目が出力されていることが分かります。 現状では製品リストSalesOrderItem内の項目は選択できないため、製品に関するすべての項目が取得されます。

<?xml version="1.0" encoding="UTF-8"?>
<Items xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <SalesOrder>
        <Entity_Name>Anderson Boughton Inc.</Entity_Name>
        <Total>13599.700000</Total>
        <TranDate>2022-03-16T00:00:00.0000+09:00</TranDate>
        <TranId>SLS00000873</TranId>
        <SalesOrderItem>
                <Item_InternalId>387</Item_InternalId>
                <Item_Name>ACC00001</Item_Name>
                <QuantityAvailable>214.0</QuantityAvailable>
                <ExpandItemGroup>false</ExpandItemGroup>
                <LineUniqueKey>521440</LineUniqueKey>
                <QuantityOnHand>214.0</QuantityOnHand>
                <Quantity>50.0</Quantity>
                <Description>400 Watt Power Supply</Description>
                <Price_InternalId>1</Price_InternalId>

~以下省略~

3. 注文書をCSVに出力する

前章で紹介した注文書データの取得方法を使い、これをCSVファイルに出力する方法を紹介します。

ここでは二つのケースを紹介します。 一つ目は複数の注文書のヘッダ情報を対象に、一つの注文書の注文書番号や顧客名を1レコードとしてCSVファイルに出力します。 二つ目は指定した注文書の明細情報を対象とします。 注文番号で指定した一つの注文書の注文製品のリストをCSVファイルに出力します。

3.1 注文書のヘッダをCSVに出力する

複数の注文書のヘッダ情報のリストをCSVに出力する方法を説明します。

出力イメージを以下に示します。 一つの注文書のヘッダ情報「注文書番号」、「顧客名」、「納期」、「合計金額」を1レコードとして書き出します。

TranId Entity_Name TranDate Total
SLS00001 X社 2021/3/1 1000000
SLS00002 Y社 2021/3/8 1500000
SLS00003 Z社 2021/3/20 2000000

作成したフローを示します。 NetSuiteコネクタの出力をCSVMapコネクタでCSVとして出力します。 二つのコネクタの項目間のマッピングのためにXMLMapコネクタを使用します。

f:id:urabe_shintaro:20220325155642p:plain

NetSuiteコネクタの設定

アクションに[Select]、テーブル名に[SalesOrder]を選択し、取得するカラムとして[TranId]、[Entity_Name]、[TranDate]、[Total]をチェックします。

CData Arcは基本の設定ではデータソースの1レコードごとにメッセージファイルを生成するため、フローが出力するCSVファイルも1レコードごとに出力されてしまいます。 そこで、以下のようにデータソースのコネクタの[MaxRecords]に「-1」を設定することで、出力される全てのレコードを1つのメッセージファイルにまとめることができます。

f:id:urabe_shintaro:20220325143859p:plain

この設定により、フローは1つのCSVファイルに全てのレコードを出力します。

CSVMapコネクタの設定

CSVMapコネクタはXML形式のメッセージをCSVファイルとして出力しますが、入力XMLと出力CSVのテンプレートが必要です。 今回は以下のテンプレートファイルを用意しました。

入力テンプレート (XML)

<Items>
    <SalesOrder>
        <Entity_Name/>
        <Total/>
        <TranDate/>
        <TranId/>
    </SalesOrder>
</Items>

出力テンプレート (CSV)

TranId, Entity_Name, TranDate, Total

上記の入力テンプレートファイルを[ソースファイル]に、出力テンプレートファイルを[デスティネーションファイル]にそれぞれ設定します。

f:id:urabe_shintaro:20220325143916p:plain

テンプレートをアップロードするとマッピング設定画面に入力・出力テンプレートのフィールドが表示されます。 この画面で入力項目と出力項目間のマッピングを設定しますが、入出力で項目名が一致している項目は自動的にマッピングされます。 今回は全ての項目名(Entity_Name, Total, TranDate, TranId)が入出力で一致しているため、手動でのマッピングは必要ありません。

f:id:urabe_shintaro:20220325143929p:plain

XMLMapコネクタの設定

XMLMapコネクタでNetSuiteコネクタの出力項目とCSVMapコネクタの入力項目をマッピングします。 こちらもCSVMapと同様に入出力のテンプレートファイルを設定します。 マッピングを保存すると[ソースファイル]の入力テンプレート(NetSuiteコネクタの出力)は自動的に設定されます。 [デスティネーションファイル]の出力テンプレートにはCSVMapの入力テンプレートとして設定したXMLファイルを設定します。

f:id:urabe_shintaro:20220325143946p:plain

テンプレートをアップロードするとマッピング設定画面に入力・出力のフィールドが表示されます。 この画面でも項目名を元に自動的にマッピングが設定されますが、マッピングされていない項目がある場合は手動でマッピングを設定してください。

f:id:urabe_shintaro:20220325143955p:plain

動作確認

NetSuiteコネクタの[受信]をクリックするとNetSuiteから注文書データを取得しフローがスタートします。 フローが終了するとCSVMapコネクタの出力に1つのCSVファイルが生成されます。

f:id:urabe_shintaro:20220325144004p:plain

これを開くと以下のように注文書のヘッダ情報がリストとして出力されていることが確認できます。

TranId, Entity_Name, TranDate, Total
"SLS00000868","Gacad Publishing Co.","2022-01-25T00:00:00.0000+09:00","415.500000"
"SLS00000869","Gacad Publishing Co.","2022-01-25T00:00:00.0000+09:00","10.780000"
"SLS00000870","Caleb Attorneys Distributors","2022-02-01T00:00:00.0000+09:00","21851.340000"

3.2 注文書の明細をCSVに出力する

続いて指定した注文書の製品リスト明細情報をCSVに出力する方法を説明します。 基本的な設定内容は前節の「注文書のヘッダをCSVに出力する」を参考にしてください。

出力イメージを以下に示します。 指定した注文書にある製品リストを読み込み、一つの製品の「製品名」、「数量」、「税抜き価格」を1レコードとして書き出します。

Item_Name Quantity Amount
製品A 5 20000
製品B 2 8000
製品C 3 15000

今回のフローもNetSuiteコネクタ、XMLMapコネクタ、CSVMapコネクタで構成します。

f:id:urabe_shintaro:20220325155642p:plain

NetSuiteコネクタの設定

アクションに[Select]、テーブル名に[SalesOrder]を選択し、取得するカラムとして[TranId]と、製品リストが格納されている[SalesOrderItems]をチェックします。 全ての明細情報を一つのCSVファイルに出力するために[MaxRecords]に「-1」を設定します。

また、今回は指定した注文書番号を持つ注文書の明細情報を取得します。 そのため、以下のように[フィルタ]で注文書番号(TranId)を指定してください。

f:id:urabe_shintaro:20220325144039p:plain

CSVMapコネクタの設定

CSVMapコネクタの入出力テンプレートとして以下のファイルを作成し、それぞれ設定します。

入力テンプレート (XML)

<Items>
    <SalesOrderItem>
        <Item_Name />
        <Quantity />
        <Amount />
    </SalesOrderItem>
</Items>

出力テンプレート (CSV)

Item_Name, Quantity, Amount

XMLMapコネクタの設定

XMLMapコネクタで設定したマッピングを示します。 今回はNetSuiteの出力の子要素SalesOrderItemごとにレコードを生成するため、[ソース]のSalesOrderItemから[宛先]のSalesOrderItemへのマッピングを設定します。

f:id:urabe_shintaro:20220325144100p:plain

動作確認

設定が完了したらフローを起動してください。 CSVMapコネクタに出力されたCSVファイルを開くと以下のように指定した注文書の製品リストが出力されていることが確認できます。

Item_Name, Quantity, Amount
"ACC00001","50.0","200.0"
"ACC00002","20.0","2000.0"
"ACC00005","30.0","1000.0"

4. おわりに

本記事ではCData ArcのNetSuiteコネクタを使用し、NetSuiteの注文書データをCSVファイルに出力する方法を紹介しました。 今回はデータの出力先としてCSVファイルを選びましたが、フロー末端のコネクタを置き換えることでデータベースやクラウドサービスに出力することもできます。 記事についてのご質問がありましたらテクニカルサポートへお気軽にお問い合わせください。


この記事では CData Arc™ 2021 - 21.0.8098 を利用しています。

関連コンテンツ

トライアル・お問い合わせ

30日間無償トライアルで、CData のリアルタイムデータ連携をフルにお試しいただけます。記事や製品についてのご質問があればお気軽にお問い合わせください。