投稿者

Product Support at InterSystems Japan
記事 Megumi Kakechi · 11月 22, 2022 2m read

(管理ポータルで行う)リンクテーブルをプログラムで行う方法

これは InterSystems FAQ サイトの記事です。

InterSystems IRIS では、管理ポータルの
 [システムエクスプローラ] > [SQL] : ウィザード > リンクテーブル
で行うリンクテーブルの作成をコマンドで行うことが可能です。

リンクテーブルの作成には、%SYSTEM.SQL.Schema クラスの CreateLinkedTable メソッドを使用します。
詳細は、クラスリファレンスをご覧ください。

実行は以下のように行います。

set sc = $SYSTEM.SQL.Schema.CreateLinkedTable("<dsn>","<Schema>","<Table>","<primaryKeys>","<localClass>","<localTable>","")

/// 第1引数:dsn - SQLゲートウェイ接続名/// 第2引数:Schema - リンク元のスキーマ名 /// 第3引数:Table - リンク元のテーブル名 /// 第4引数:primaryKeys - プライマリーキー/// 第5引数:localClass - リンク先のクラス名 例:User.LinkedClass/// 第6引数:localTable - リンク先のSQLテーブル名(SqlTableName)/// 第7引数:columnMap - リンク先フィールド情報 


こちらで実行する場合、リンクテーブルはReadOnly属性で作成されます。
ReadOnly属性を外したい場合は、第7引数の columnMap で指定する必要があります。

例:columnMap("external field name") = $lb("new class property name","new sql field name","read-only(1/0)")


こちら のサンプルでは、全てのフィールド(カラム)に対して ReadOnlyなし(0) を設定する columnMap を作成し、リンクテーブルを作成しています。
また、primaryKey はリンク元テーブルの primaryKey を引き継げるようにしています。

使用方法は以下のようになります。

do##class(ISC.LinkUtils).LinkTable("<dsn>","<Schema>","<Table>","<localClass>")

/// 第1引数:dsn - SQLゲートウェイ接続名/// 第2引数:Schema - リンク元のスキーマ名 /// 第3引数:Table - リンク元のテーブル名 /// 第4引数:localClass - リンク先のクラス名 例:User.LinkedClass 

 

今回使用したサンプルはこちらからもご覧いただけます。
 👉https://github.com/Intersystems-jp/CreateLinkedTable