CData Software Blog

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

Salesforceのレコードを元に Excelファイルデータを生成:ArcESBのExcel コネクターの使い方

f:id:sugimomoto:20200427110217p:plain

こんにちは。CData Software Japan リードエンジニアの杉本です。

ローコードのデータ連携ツールであるArcESBでは様々なコネクターをサポートしていますが、ちょっと使い方がイメージしづらいものもあります。

www.arcesb.com

そこで今回はお問い合わせをよく頂く「Excel」コネクターの使い方を解説します。

Excelネクターとは?

ArcESBのExcelネクターは受け取ったXMLデータを元にExcelファイルを生成することができるコネクタです。

http://cdn.arcesb.com/help/AZF/mft/Excel.html

以下のようなテンプレートを使って、Excelファイルを出力することが可能になっています。

f:id:sugimomoto:20200427110224p:plain

なお、注意していただきたいのは、Excelファイルを生成するために使うためのコネクターであり、Excelファイルからデータを読み取ることを目的としてはいない、という点です。

もし、Excelファイルからデータを読み取りたい場合は別途 CData コネクターとCData Excel Driverの利用を検討してください。

https://www.cdata.com/jp/drivers/excel/

f:id:sugimomoto:20200427110233p:plain

前提条件

ExcelネクターSalesforceから取得したデータ、ArcESB上でのXMLの構成によって出力するアプローチが異なります。

XMLファイルが1レコード単位の場合は、そのレコード毎にExcelファイルが生成されます。 XMLファイルに複数レコードの構成(Salesforce から一括取得の構成)をしている場合は、一つのExcelファイルに複数レコードのデータを出力することが可能です。

今回の記事でデモとする対象データは共通で「Account」テーブルに含まれる「AccountNumber」「Name」「Phone」の3つの項目としました。

f:id:sugimomoto:20200427110241p:plain

以下の様なデータが取得される想定です。

f:id:sugimomoto:20200427110246p:plain

テンプレートの作成方法

サンプルExcelファイル

テンプレートは以下のように 「<rsb:call op="xmlDOMSearch?uri=[FilePath | urlencode]&xpath=/Items/Account">」「</rsb:call>」というXMLの設定と 受け取ったXMLの値を取り出すための「[xpath("Name")]」という要素で構成されます。

f:id:sugimomoto:20200427110307p:plain

XMLはコメントでもセルに入力しても大丈夫です。 「<rsb:call op="xmlDOMSearch?uri=[FilePath | urlencode]&xpath=/Items/Account">」「</rsb:call>」の間の列もしくは行の範囲内でデータを取り出すための 「[xpath("Name")]」という要素が利用できます。

また、XML設定で重要なポイントは「xpath=/Items/Account」の部分です。これは受け取ったXMLのどの深さの要素を取得するか、を定義しています。

今回は以下のようなXMLを対象とするので、Itemsに含まれる、Accountの要素を取得するため「/Items/Account」を指定しています。もし、Contactテーブルになった場合は「/Items/Contact」となります。

f:id:sugimomoto:20200427110316p:plain

作成したテンプレートは以下のようにExcelコネクタのTemplateFileへ指定します。

f:id:sugimomoto:20200427110322p:plain

1レコード・1Excelファイルに出力する場合

先程のテンプレートで実際にSalesforceからデータを取得してみます。 以下のようにSalesforceのAccountレコードはXMLファイルそれぞれで出力されます。

f:id:sugimomoto:20200427110328p:plain

最終的なエクセルテンプレートの出力も、1XMLファイル1Excelの形で出力されます。

f:id:sugimomoto:20200427110335p:plain

そして、Excelファイルを開いてみると、以下のように結果が出力されます。コメントなどに指定していたXMLは消えてします。

f:id:sugimomoto:20200427110342p:plain

複数レコード・1Excelファイルに出力する場合

複数レコードをまとめて1Excelファイルに出力したい場合は、Salesforceコネクタ側でまとまったXMLファイルを出力するようにオプションを設定します。

Salesforceコネクタを開き、対象のOutputをコードで編集します。

f:id:sugimomoto:20200427110348p:plain

そして、対象のクエリの隣に「batchResults="true"」を設定します。

f:id:sugimomoto:20200427110354p:plain

これにより取得されるXMLファイルが一つだけになります。

f:id:sugimomoto:20200427110400p:plain

中身は以下のように複数のレコードが一つのXMLファイルになっています。

f:id:sugimomoto:20200427110406p:plain

最終的に出力されるExcelファイルも一つとなり

f:id:sugimomoto:20200427110413p:plain

以下のような結果を得ることができます。 ポイントは「<rsb:call op="xmlDOMSearch?uri=[FilePath | urlencode]&xpath=/Items/Account">」「</rsb:call>」で指定された要素が繰り返しロードされていく、という点です。これで連続した帳票なども構成できます。

f:id:sugimomoto:20200427110419p:plain

シンプルな一覧を作りたい場合

サンプルExcelファイル

シンプルな一覧テーブルを作りたい場合は、以下のようなExcelテンプレートを構成します。 始点の「<rsb:call op="xmlDOMSearch?uri=[FilePath | urlencode]&xpath=/Items/Account">」をレコードの1行目に指定してください。 終点の「</rsb:call>」は次のレコードの始点になります。

f:id:sugimomoto:20200427110428p:plain

これでArcESBを実行すると、以下のようなデータが得られます。

f:id:sugimomoto:20200427110434p:plain

おわりに

今回はシンプルなテンプレートを作成しましたが、ネステッドされたXMLファイルなどを使うことでヘッダー・明細形式のようにも対応できます。

もし不明な点があれば、お気軽にテクニカルサポートまで連絡ください。