(管理ポータルで行う)リンクテーブルをプログラムで行う方法
これは 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