CData Software Blog

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

ArcESB を使ってノーコードでkintone の添付ファイルへ一括アップロードする方法

f:id:irokawah:20211227002216p:plain

こんにちは。CData Software Japanの色川です。

kintone で複数レコードの添付ファイルをまとめて処理(取得したり、更新したり)したいケースがありますよね。

この記事では、ArcESB を使ってノーコードでkintone の添付ファイルへ一括アップロードする方法をご紹介します。

反対に「kintone の添付ファイルを一括ダウンロードする方法」についてはこちらをご覧ください。

www.cdatablog.jp

ArcESB とは?

ファイル転送(MFT)とSaaSデータ連携をノーコードで実現できるデータ連携ツールです。ファイル・データベース・SaaS API、オンプレミスやクラウドにある様々なデータをノーコードでつなぐ事ができます。

www.arcesb.com

この記事のシナリオ

この記事では「kintone アプリの各レコードに含まれている添付ファイルフィールドへ、ローカルフォルダから一括でアップロードする」シナリオを実現します。

具体的には、「kintone 標準アプリ「顧客リスト」の各レコードに含まれている「会社ロゴ」フィールドへ、csvファイルで指定したレコード番号とファイルパスの情報にしたがって、一括でアップロードして更新」します。

会社ロゴフィールドへ登録するファイル群として、以下のようなフォルダとデータを用意しました。

<ローカルフォルダ>
 ├─ <レコード番号> フォルダ
 │    └ <kintone に登録されているファイル名>
 ├─ <レコード番号> フォルダ
 │   ...

f:id:irokawah:20211226235740p:plain

ArcESB の中ではレコード番号とファイルパスを指定したCSV ファイルを読み込んで処理します。

RecordId,Path
1,C:\Temp\kintone\in\1\icon-access.png
2,C:\Temp\kintone\in\2\icon-actcrm.png
3,C:\Temp\kintone\in\3\icon-activedirectory.png

なお、この記事では、各レコードの「会社ロゴ」フィールドには添付ファイルを1つずつ登録することを前提にしたフローになっています。

必要なもの

この記事のシナリオでは以下の製品を利用します。すべて30日間のトライアルが提供されています。ぜひお手元で試してみてください。

製品のインストール等はこちらの記事を参考にしてください。

www.cdatablog.jp

kintone の事前準備

今回kintone 側は、サンプルデータ付きの顧客リストアプリをそのまま利用しています。

f:id:irokawah:20211226235800p:plain

ArcESB の基本的な使い方

ArcESB の起動方法や基本的なフローの作り方についてはこちらをご覧ください。

www.arcesb.com

www.arcesb.com

はじめに(連携フローの概要)

このシナリオで作成する連携フローは以下のような流れになっています。リストされたファイル情報の読み込みや加工として、いくつか事前処理をしていますが、5と7が kintone への実際の処理です。

  コネクタ 内容
1 File CSV ファイルを取得
2 CSV CSV ファイルをXML ファイルに変換
3 Split XML ファイルを1レコードずつ分割
4 XMLMap(1) 3.のファイル情報を5.にマッピング
5 CData(kintone_Upload) kintone へファイルアップロード
6 XMLMap(2) 5.で取得したfileKey(と3.のファイル情報)を7.にマッピング
7 CData(kintone_Update) kintone 顧客リストを更新

f:id:irokawah:20211226235814p:plain

kintone でのファイルアップロードの流れ

kintone のレコードへファイルをアップロードする時は「kintone へファイルをアップロードしてfileKey を取得」して、その「fileKey をレコード情報に更新」する流れになります。

kintone からのファイルアップロードの流れについては以下のドキュメントも参考にしてください。

ファイルアップロードで必須となる3つの手順 – cybozu developer network

このシナリオでも「ファイルをアップロードしてfileKey を取得」して、次に「そのfileKey を顧客リストレコードの会社ロゴフィールドに登録」しています。

fileKey の取得とファイル情報の連携

CData kintone Driver ではファイルアップロードはストアドプロシージャとして提供されています。

cdn.cdata.com

ここで「CSV から取得したレコード番号とファイルパスを指定してアップロード」と一度でできるフローだとシンプルですが、前述のとおりkintone の場合はそうはいかず「アップロード(ストアドプロシージャ実行)して得られるfileKey を取得して、そのfileKey で対象アプリ(顧客リスト)を更新する」手順が必要です。

またCDataコネクタ(kintone)を利用してファイルアップロード(ストアドプロシージャ実行)した後に得られる情報は、ストアドプロシージャの実行結果(以下のようなスキーマ)となるのですが、その後に顧客リストを更新するときのために、そのファイル(が示すfileKey を含む実行結果)がレコード番号いくつのものであるかが分かる情報を顧客リスト更新のコネクタに連携する必要があります。

<?xml version="1.0" encoding="UTF-8"?>
<Items xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <result_set>
        <Success>true</Success>
        <FileKey>5b5f6286-ee7c-4b03-af16-603a4fde326e</FileKey>
    </result_set>
</Items>

ArcESB ではフローを流れるメッセージ(データの流れ)にはメッセージヘッダ(メタデータ)が付与され、データの流れを追跡できるようになっているのですが、今回はそのメッセージヘッダにレコード番号を示す情報を設定し、顧客リストを更新するときに使えるように連携しています。ArcESB でのメッセージの仕組みは以下のドキュメントも参考にしてください。

cdn.arcesb.com

連携フローの作成

それでは、実際に ArcESB を使って連携フローを作成していきます。

File コネクタの配置と構成

最初に用意したcsv ファイルを取得します。フローの起点となるFile コネクタを配置し、「CSV ファイルを取得」します。パスにローカルフォルダ(C:\Temp\kintone\in)を、ファイルマスクに「list.csv」を設定します。

f:id:irokawah:20211226235834p:plain

CSV コネクタの配置と構成

次に、取得したcsv ファイルをArcESB で処理するためにXML ファイルへ変換します。今回用意したcsv ファイルの1行目は項目を示すヘッダ情報ですので「Column headers present」を有効にして設定を保存します。

f:id:irokawah:20211226235911p:plain

Spilt コネクタの配置と構成

前述のとおり、今回のシナリオではフローを流れるメッセージのヘッダ情報に処理対象のレコード番号を付けて連携します。流れるメッセージをレコードごとに分割するためにSplit コネクタを配置して、File コネクタ、CSV コネクタからのフローを繋げます。これでlist.csvxml に変換した後に、list 1件ずつに分かれて処理が進みます。

f:id:irokawah:20211226235936p:plain

CData コネクタ(kintone_Upload)の配置と構成

次に、CData コネクタ(kintone_Upload)で「kintone へファイルアップロード」する設定をします。

CData kintone Driver では、ファイルアップロードはストアドプロシージャとして提供されています。

cdn.cdata.com

コアの「CData コネクタ」を選択し、フローキャンバスへ配置して、kintone への接続を設定してください。

f:id:irokawah:20211226235949p:plain

Action に「Execute Stored Procedure」を選択して、実行するStored Procedure には「UploadFile」を選択します。

f:id:irokawah:20211227000000p:plain

XMLMap の配置と構成(1)

Split コネクタから出力される1件ずつのファイル情報を、ファイルアップロードのストアドプロシージャのパラメータとしてマッピングします。

コアの「XMLMap」コネクタを配置します。

f:id:irokawah:20211227000017p:plain

フローキャンバスの中で、Split からXMLMap に。XMLMap からCData コネクタ(kintone_Upload)へフローを繋いでワークスペースを保存します。これでデータ構成が設定されているCData コネクタ(kintone_Upload)のデータ構成(スキーマ)がXMLMap で認識できるようになります。

f:id:irokawah:20211227000027p:plain

Split コネクタからはlist.csvxml 変換され1件ずつに分割されたファイルが流れてきます。File コネクタのアウトプットタブから受信を実行し Split コネクタまで実行した後、Split コネクタの出力結果を「サンプルファイルをアップロード」で指定します。

<?xml version="1.0" encoding="UTF-8"?>
<Items>
    <list>
        <RecordId>1</RecordId>
        <Path>C:\Temp\kintone\in\1\icon-access.png</Path>
    </list>
</Items>

f:id:irokawah:20211227000041p:plain

XMLMap の設定でCSV ファイルで指定した「Path」を「FullPath」にマッピングします。

f:id:irokawah:20211227000057p:plain

ここで少し工夫が必要で、取得したファイル情報にあるRecordId を、フロー内で連携(ストアドプロシージャ実行後に続くコネクタでも活用)できるようにイベントタブの送信前イベントで、追加のメッセージヘッダとして設定します。

<arc:set attr="xmlItem.uri" value="[FilePath]" />
<arc:set attr="xmlItem.xpath" value="/Items/list" />
<arc:call op="xmlDOMSearch" in="xmlItem">
    <arc:set attr="_message.header:recordid"    value="[xpath('RecordId')]"/>
</arc:call>

f:id:irokawah:20211227000331p:plain

f:id:irokawah:20211227000146p:plain

ここでは、ArcESB の中で柔軟に使えるArcScript を利用して、入力ファイルからXPath で値を取得して、追加のメッセージヘッダとして設定しています。ArcScript についてはこちらのドキュメントもご覧ください。

www.arcesb.com

CData コネクタ(kintone_Update)の配置と構成

次にCData コネクタ(kintone_Update)を配置し「アップロードで取得したfileKey を、顧客リストレコードの会社ロゴ情報へ更新」します。

コアの「CData コネクタ」をフローキャンバスへ配置し、kintone への接続を設定してください。

f:id:irokawah:20211227000345p:plain

Action は「Upsert」。対象テーブルに「顧客リスト」を選択します。「RecordId」をUpsert 対象のキーに「会社ロゴ Aggregate」を更新対象の列として選択します。

f:id:irokawah:20211227000359p:plain

XMLMap コネクタの配置と構成(2)

最後に、アップロードで取得したfileKey を、顧客リストの対象レコードへマッピングします。コアの「XMLMap」コネクタを配置します。

f:id:irokawah:20211227000417p:plain

フローキャンバスの中で、CData コネクタ(kintone_Upload)からXMLMap に。XMLMap からCData コネクタ(kintone_Update)へフローを繋いでワークスペースを保存します。これでインプットのスキーマ構成が設定されているCData コネクタ(kintone_Update)のデータ構成(スキーマ)がXMLMap で認識できるようになります。kintone_Upload コネクタからはファイルアップロードの実行結果を示す情報が流れてきますので、ここではそのメッセージ構成をアップロードしてXMLMap に認識させます。

<?xml version="1.0" encoding="UTF-8"?>
<Items xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <result_set>
        <Success>true</Success>
        <FileKey>4d130885-1956-463a-b5f7-401568073547</FileKey>
    </result_set>
</Items>

f:id:irokawah:20211227000436p:plain

XMLMap の設定で以下の項目をマッピングします。「会社ロゴ_Aggregate」にはストアドプロシージャの実行結果に含まれるfileKey を。「RecordId」にはメッセージヘッダとして連携したレコード番号を式エディタで設定します。

f:id:irokawah:20211227000543p:plain

f:id:irokawah:20211227000557p:plain

これで「ローカルドライブに配置したレコード番号フォルダのファイルを、顧客リストの各レコードに含まれている「会社ロゴ」フィールドへまとめてアップロードする」フローができあがりました。

連携フローの実行と確認

起点となるFile コネクタからフローを実行してみます。アウトプットタブから「受信」を実行します。

f:id:irokawah:20211227000609p:plain

フローの終点となるCData コネクタのインプットタブを確認します。レコード分、Success となっていれば連携されています。

f:id:irokawah:20211227000619p:plain

顧客リストレコードの会社ロゴに画像ファイルが設定されていれば成功です。

f:id:irokawah:20211227000631p:plain

おわりに

このように、ArcESB とCData kintone Driver で、kintone アプリの各レコードに含まれている添付ファイルフィールドへ、ローカルフォルダから一括でアップロードするフローをほぼノーコード(少しのArcScript を使いました)で構築することができました。

list したcsv ファイルの読み込みや前処理、それにkintone でのfileKey(の取得と更新)の仕組みから、今回のシナリオでは少し工夫が必要ですが、フローの流れ自体はシンプルです。

ArcESB はシンプルで拡張性の高いコアフレームワークに、豊富なMFT・EDI・エンタープライズコネクタを備えたパワフルな製品です。CData Drivers との組み合わせで250を超えるアプリケーションへの連携を実現できます。必要な連携を低価格からはじめられる事も大きな特長です。

皆さんのつなぎたいシナリオでぜひ ArcESB を試してみてください。

www.arcesb.com


この記事では ArcESB™ 2021 - 21.0.8017 を利用しています。