CData Arc 機能紹介 - Child Tables(親子関係を持つデータの取得や登録)

by 色川穂高 | 2023年11月07日

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

この記事では、CData Arc のデータソース系コネクタで利用できる「Child Tables」をご紹介します。

Child Tables の概要

「注文と注文明細」など、親子関係を持つデータがそれぞれ別のテーブル(オブジェクト)として構成されているケースは多く、親子関係を維持した形でデータを同時に取得したり、親子となるデータを同時に登録したい場面も多いかと思います。

CData Arc のデータソース系コネクタで利用できる「Child Tables」は、1回のコネクタアクションで複数テーブルからのデータ取得やデータ登録を実現できる機能です。SQL Server やOracle などRDB との連携はもちろん、kintone やSalesforce などのSaaS との連携で活用するための便利な機構も備わっています。

Select アクションでChild Tables 機能を使うと、外部キーなど親子関係を持つ複数テーブルから階層構造を保った形でデータを取得することができます。Upsert アクションでChild Tables 機能を使うと、親子関係を持つデータをマッピングして複数のテーブルへ登録することができます。

この記事では、人気の高いkintone を例に「Child Tables」の概要と使い方をご紹介します。

この記事のシナリオ

この記事では、kintone の「案件管理」アプリを例にしてご紹介します。「案件管理」アプリには「活動履歴」テーブルが含まれており、Arc のkintone コネクタでは、それぞれ「案件管理」テーブルと「案件管理_活動履歴」テーブルとしてアクセスすることができます。

この記事では「親子関係を持つ複数テーブル」の例として、この「案件管理」テーブルと「案件管理_活動履歴」テーブルを対象に設定例をご紹介していきます。

kintone から取得したデータの連携先や、kintone に連携するデータの取得元には、SQL Server にほぼ同じ構造の「案件管理」「案件管理_活動履歴」を設けて、それを利用しました。

この記事では、Child Tables 機能を利用した「kintone からの取得」や「kintone への登録」部分での設定やポイントを中心にご紹介しています。kintone と連携するフローの基本的な設定から知りたい方は、こちらの記事などを参考にしてください。


Child Tables 機能を使ったデータ取得

Child Tables 機能を使った複数テーブルからのデータ取得は条件指定無しでも実行することはできますが、通常は子テーブルの外部キー(ないし外部キーに相当する項目)が、親テーブルのキーと一致するレコードのみを取得する必要があるケースがほとんどです。

Arc のChild Tables 機能を使ったデータ取得では、この紐づけを「REF」を使ったフィルタ条件として指定します。

この記事では、Child Tables 機能を使ったデータ取得の例として、kintone の「案件管理」から確度が"A"のレコードをフィルタして、案件管理に紐づく「活動履歴」テーブルのレコードと併せて取得します。

先ずは、kintone コネクタのSelect アクションを指定し、テーブル選択で「追加」をクリックして、親側オブジェクトである「案件管理」を選択します。

案件管理から、確度が"A" のレコードのみを取得するようにフィルタを構成します。

次に、テーブル選択で「追加」をクリックして、子側オブジェクトである「案件管理_活動履歴」を選択します。

「案件管理_活動履歴」のレコードが、どの案件管理レコードに紐づいているかは、子側の「案件管理_活動履歴」に含まれる「案件管理Id(親側のRecordId に相当するフィールド)」で判断することができます。「案件管理_活動履歴」のフィルタで、「案件管理Id」が、親である「案件管理のRecordId と一致する」ことを「REF」指定を使って構成していきます。

「Child Tables 機能を使ったデータ取得」を設定する際にポイントとなる部分です。

「XML 出力をプレビュー」で、期待する通りの階層構造でデータが取得できることを確認します。

「XML 出力をプレビュー」で参照しているアプリレコード(とテーブルレコード)

Child Tables 機能を使ったデータ取得については、こちらのヘルプトピックもぜひ参考にしてください。

複数テーブルからのデータ取得は、カスタムクエリでJoin 構文を利用することでも実現を検討することができますが、親子関係を維持した形でデータ取得したい場合は、デザイナーで組み立てていける「Child Tables 機能を使ったデータ取得」がフィットしそうです。


Child Table 機能を使ったデータ登録

Child Tables 機能を使った複数テーブルへのデータ登録でも、子テーブルの列が、親テーブルのキーに対応することを「REF」要素を使って指定することができます。

またkintone ではキーであるRecordId がデータ登録時にkintone 側で自動で生成・付与されるため、登録をリクエストする時点ではその値が分かりませんが、親テーブルのキーであるRecordId の「REF」要素として「@@LAST_INSERT_ID」を指定することで、親テーブルの登録時にkintone 側で生成・付与されたRecordId を取得・参照することができるようになります。

子テーブルの登録時には、そのRecordId の値を、REF 要素を使って参照することで、親であるアプリと、子であるテーブルに同時にデータ登録できる仕組みになっています。

SaaS ではレコードのキーがSaaS 側で自動生成されるケースが多く、この「@@LAST_INSERT_ID」と「REF」を利用した「Child Table 機能を使ったデータ登録」はkintone に限らず、活用することができます。

この記事では、Child Tables 機能を使ったデータ登録の例として、kintone の「案件管理」「案件管理_活動履歴」に1回のUpsert アクションでレコードを登録します。連携元のデータには、SQL Server にほぼ同じ構造のテーブルを設けて、下記のように連携するレコードを用意しました。SQL Server からのデータ取得では、上記の「Child Tables 機能を使ったデータ取得」で親子関係を紐づけてデータを取得しています。

先ずは、kintone コネクタのUpsert アクションを指定し、テーブル選択で「追加」をクリックして、親側オブジェクトである「案件管理」を選択します。

次に、テーブル選択で「追加」をクリックして、子側オブジェクトである「案件管理_活動履歴」を選択します。

「コード」モードで「案件管理」へのレコード登録時に生成されたRecordId の値を取得・参照できるようにRecordId の「REF」要素に「@@LAST_INSERT_ID」を指定します。

次に「案件管理_活動履歴」へのレコード登録時に「案件管理Id」の値として、親テーブルのRecordId の値を参照するように「REF」要素に「@RecordId」を指定します。

kintone へ登録するコネクタの設定としては、これで完了です。

「コード」モードでの設定が「Child Tables 機能を使ったデータ登録」を設定する際にポイントとなる部分です。

kintone へ登録するコネクタへのマッピングでは、親子構造のデータに対して適切に繰返しマッピングがされるように、Foreach ループの設定を施します。

期待通りの結果が得られるか、フローを実行してみます。

起点となるSQL Server コネクタのアウトプットタブで「受信」を実行し、フローが正常に完了すると、kintone の「案件管理」に「活動履歴」のデータを含め、親子構造でデータが登録できていることが確認できます。

このように「Child Table 機能を使ったデータ登録」は利便性の高い機能ですが、ご紹介した設定例は「親テーブルにUpdate したいケース」などでは制約もある(Insert されないため、@@LAST_INSERT_ID で値が取得されず、結果的に子テーブルの登録が失敗する)点には留意が必要です。また、トランザクションの概念がないSaaS での連携で利用する場合は、子テーブルの登録時に何かしらの理由で失敗しても、親テーブルには登録されている状態になるので、それらの点にも留意が必要かも知れません。

親子構造のデータをシンプルなフローで連携(登録)したい、というケースなどでぜひお試しください。

Child Tables 機能を使ったデータ登録については、こちらのヘルプトピックもぜひ参考にしてください。

Child Tables 機能の関連記事

Child Tables 機能(Child Tables 機能を使ったデータ取得)を使った例は、こちらの記事でも紹介していますので、あわせてご活用ください。


まとめ

この記事では、CData Arc のデータソース系コネクタで利用できる「Child Tables」をご紹介しました。

Select アクションやUpsert アクションで利用できる「Child Tables」機能は、1回のコネクタアクションで複数のテーブルへアクセスできる利便性の高い機能です。複数テーブルへアクセスするため、上手く活用するには制約や条件もありますが「親子関係を維持した形でデータを取得したい」「登録したい」という場面では、ぜひ活用を検討してみてください。

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

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

CData Arc - セキュアなデータ連携とマネージドファイル転送(MFT)

製品を試していただく中で何かご不明な点があれば、テクニカルサポートへお気軽にお問い合わせください。

CData Software Japan - Support Form


この記事では CData Arc™ 2023 - 23.3.8698.0 を利用しています

関連コンテンツ

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

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