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

こんにちは。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 を利用しています

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

関連コンテンツ