はじめに
kintoneではいくつかの入力フィールドを連結し、表形式に定義する「サブテーブル」という使い方があります。
このサブテーブルは必要に応じて行を追加することができるため、営業管理アプリでは活動履歴の入力欄、メンテナンス管理アプリではメンテナンス履歴など様々な用途で利用されています。
このサブテーブルに対して他のアプリケーションで管理されているデータを追加/更新する方法をご紹介しようと思います。
処理順序
サブテーブルにデータを追加するためには、一旦kintoneアプリからデータを取得して、そのデータに追加したいデータを追加し、アプリに追加する必要があります。
完成図
スクリプトは大きく4つの機能で構成されています。
設定時のポイント
幾つかのポイントについてご説明しようと思います。
- xml型データをテーブル型に変換
ひとつのレコードに表形式のサブテーブルが含まれているので、サブテーブルのレコードから繰り返しハンドラに線をつなぎます。 - レコードの追加
kintoneアプリから抽出して作成したcsvファイルにデータを追加するには書込み先ファイル名を同一にし、書込み設定タブに「追加書込み」にチェックを入れます。 - レコードのソート
追記したcsvファイルをキーとなる「id」でソートします。ツールパレットの繰り返しより「キーによるソート」を配置して、下のハンドラにidをつなげます。 - 入力データの作成
kintone REST APIの仕様に基づいたxml形式のデータに変換する必要があります。
csvデータは「id」によってグループ化し、サブテーブルの値となる「sid」で繰り返す、という設定を行います。
すると以下のようなデータ形式に変換されることになります。
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <root> <record> <value>1</value> <value>taro</value> <value>yamamoto</value> <value>h.yamamoto@xxxxxxx.xxx</value> <value>Male</value> <value>192.168.1.1</value> <subTable> <record> <value>テストコメント1</value> <value>2017-05-02</value> <value>1003</value> </record> <record> <value>テストコメント2</value> <value>2017-05-02</value> <value>1004</value> </record> <record> <value>テストコメント3</value> <value>2017-05-02</value> <value>1005</value> </record> <record> <value>comment_01</value> <value>2017-04-05</value> <value>1002</value> </record> <record> <value>comment_02</value> <value>2017-06-06</value> <value>1003</value> </record> <record> <value>comment_03</value> <value>2017-07-07</value> <value>1004</value> </record> </subTable> </record> <record> <value>2</value> <value>hiroshi</value> <value>makino</value> <value>makino@xxxxxxx.xxx</value> <value>Male</value> <value/> <subTable> <record> <value>id:1002のサブテーブルのコメント</value> <value>2017-05-02</value> <value>1000</value> </record> <record> <value>comment_01</value> <value>2017-03-09</value> <value>2003</value> </record> </subTable> </record> </root>
最後に
kintoneへのデータ追加、更新等を行う際にはkintoneのフィールドの型に応じたデータを作成する必要があります。アダプタを利用したデータ更新でエラーが発生した場合には、まずフィールドの型にあったデータが作成されているのかを確認いただくのがよいかもしれません。
- DataSpider Servista 4.0 ヘルプ:レコードスキーマ
また、サブテーブルへの更新には一旦ファイルを抽出する必要があるため一手間かかってしまいますが、前回の状態のバックアップとして利用するというのはいかがでしょうか。
注記:現在サブテーブルは"テーブル"という用語に統一傾向にあるようです。(2017.05.08)