FileMan ファイルの InterSystems IRIS クラスへの変換
この機能は既存のユーザに対してのみ利用可能で、全面的にサポートされます。FileMan で新しいプロジェクトを開始しないことをお勧めします。
InterSystems IRIS® データ・プラットフォームには、FileMan ファイルに基づくアプリケーションを InterSystems IRIS クラスに変換し、データへのオブジェクトと SQL のアクセスを提供するユーティリティがあります。具体的には、このユーティリティ (FileMan マッピング・ユーティリティ) は、データをマップする InterSystems IRIS クラス定義を生成します。ここでは、FileMan グローバル (^DD と ^DIC) がシステム内の目的のネームスペースに既にロードされているものとします。
FileMan マッピング・ユーティリティの概要
FileMan を使用すると、FileMan ファイルのカスタム・クラス・マッピングをすばやく簡単に作成できます。マッピング・ユーティリティで作成されたクラスにより、オブジェクト・アクセスを介しておよび SQL を介してファイル・データにアクセスできます。ネームスペース内の 1 つ、複数、またはすべての FileMan ファイルをマップできます。ファイルごとに、以下のような詳細を制御できます。
-
マップされるフィールド
-
クラスは読み取り専用か、書き込みアクセス権を持つか
-
生成されるクラスとプロパティ (テーブルとフィールド) の名前の形式
-
生成されるクラスのスーパークラス・リスト
-
ワード・プロセッシング・フィールドはリスト・コレクションとしてマップされるのか、子テーブルとしてマップされるのか
システム要件
FileMan をインストールする必要があります。
既定の設定の指定および変更
FileMan は、クラスの生成方法を制御する多くの設定を使用します。これらの設定を確認して、ほとんどの場合に使用する値に変更し、それらを既定の設定として保存しておくことが重要です。
既定の設定を指定または変更するには、以下のようなコマンドを使用します。
Set ^%SYS("sql","fm2class",setting) = value
setting は前のリストで示した内部設定名で、value は設定に割り当てる値です。
$SYSTEM.OBJ.FM2Class でメソッドを使用する場合は、以下の形式の配列を渡すことができます。
arrayName(setting) = value
以下に例を示します。
set fmsettings("display")=1
set fmsettings("package")="VISTA"
set fmsettings("superClasses")="%XML.Adaptor"
set fmsettings("wpIsList")= 1
使用できる設定は以下のとおりです。
生成される子テーブル名の形式を指定します。この設定の場合、次のキーワードと、テーブル名として有効な任意の文字を使用する文字列を指定します。
-
<FILENAME> — FileMan ファイルの名前に置き換えられます
-
<FILENUMBER> — ファイル番号に置き換えられます
-
<PARFILENAME> — 親ファイルの名前に置き換えられます
-
<PARFILENUMBER> — 親ファイルのファイル番号に置き換えられます
<FILENAME> または <PARFILENUMBER> を使用する場合、ファイル番号の小数点以下の文字はアンダースコア文字に変換されます。
この設定の例をいくつか示します。
-
SUB_<FILENAME> — この例では、子テーブルのテーブル名は文字列 SUB_ の後ろにファイル名を付けたものです。例 : SUB_ACCESSIBLE_FILE
-
f<PARFILENUMBER>c<FILENUMBER> — この例では、子テーブルのテーブル名は文字列 f の後ろに親ファイルの番号、c、このファイルの番号を付けたものです。例 :f200c200_032
-
<FILENAME> — この例では、子テーブル名はファイル名と同じです。
OS オブジェクトのクラス・パラメータと値を JSON 形式で指定します。
クラスの作成後にコンパイルするかどうかを指定します。許可される値は、以下のとおりです。
-
1 — クラスをコンパイルします。
-
0 — クラスをコンパイルしません。
任意のクラス・コンパイラ修飾子やフラグを指定します。
FileMan DATE フィールドのマッピングで使用するデータ型を指定します。既定値は %Library.FilemanDateOpens in a new tab です。
FileMan DATE/TIME フィールドのマッピングで使用するデータ型を指定します。既定値は %Library.FilemanTimeStampOpens in a new tab です。
VA サイトのステーション ID を格納するために、テーブルに新しいフィールド VA_SITE を作成します。このフィールドは、複数の VA または FileMan サーバのデータを結合する際に、データのソースを指示するのに便利です。許可される値は、以下のとおりです。
-
1 — VA_SITE フィールドを作成します。
-
0 — VA_SITE フィールドを作成しません。
任意のクラス削除修飾子やフラグを指定します。
結果の表示方法を制御します。許可される値は、以下のとおりです。
-
0 — 表示しない。
-
1 — 最小表示。
-
2 — 全画面表示。これが既定値です。
ユーティリティが、ポインタ・フィールドを拡張するために追加の計算プロパティを作成するかどうかを指定します。許可される値は、以下のとおりです。
-
0 — ユーティリティは、ポインタ・フィールドを拡張するために計算プロパティを追加しません。
-
1 — ユーティリティは、ポインタ・フィールドを拡張する、参照先ファイルの NAME (.01) フィールドと等しい計算プロパティを追加します。
-
2 — ユーティリティは、ポインタ・フィールドを拡張する、参照先ファイルの NAME (.01) フィールドと等しい計算プロパティを追加します。このオプションに使用される命名規則では、ポインタ・フィールドは参照先ファイルの名前を取って命名され、フィールド名に “_ID” が追加されます。
-
3 – このオプションは、参照フィールドの名前が <Field>_f<pointed-to-file-id#>ID である点を除き 2 と同じです。
マップされる Set Of Codes フィールドごとに、拡張 SOC (SetOfCodes) テーブルを定義するかどうかを指定します。許可される値は、以下のとおりです。
-
1 — クラスにマップされる Set Of Codes フィールドごとに、ユーティリティは Set Of Codes の CODE と MEANING にマップされる読み取り専用のクラス/テーブルを生成します。テーブルの名前は <tablename>_SOC_<fieldname> です。SOC テーブルには 2 つのフィールドがあります。CODE は CODE の名前にマップされ、MEANING は CODE の外的意味です。このテーブルは ^DD グローバルに直接マップされるため、^DD グローバルの定義に対する更新は、テーブルから返される値に直ちに反映されます。
-
2 — これらの SOC クラス/テーブルは作成されません。これが既定値です。
拡張マッピングのために、マップ定義のグローバル名に挿入される文字列を指定します。例えば、["SD"] を指定すると、グローバルは ^LR(...) ではなく ^["SD"]LR(...) としてマップされます。
拡張グローバル・マッピングに使用できる任意の有効な文字列を指定できます。また、[...] または |...| 括弧を含める必要があります。
ユーティリティが SQL フィールド名を生成する方法を指定します。許可される値は、以下のとおりです。
-
Exact — SQL フィールド名は、FileMan フィールド名とまったく同じ大文字/小文字を使用します。例えば、FileMan フィールド 'DEA EXPIRATION DATE' は SQL フィールド名 'DEA_EXPIRATION_DATE' になります。
-
Upper — FileMan フィールド名の文字が大文字に変換されて、SQL フィールド名が生成されます。 例えば、FileMan フィールド 'DEA expiration date' は SQL フィールド名 'DEA_EXPIRATION_DATE' になります。
-
Lower — FileMan フィールド名の文字が小文字に変換されて、SQL フィールド名が生成されます。 例えば、FileMan フィールド 'DEA EXPIRATION DATE' は SQL フィールド名 'dea_expiration_date' になります。
-
Pascal — 識別子の最初の文字と、それに続く各連結語の最初の文字が大文字で表示されます。また、スペースとアンダースコアは削除されます。例えば、FileMan フィールド 'DEA EXPIRATION DATE' は SQL フィールド名 'DeaExpirationDate' になります。
-
Camel — 識別子の最初の文字は小文字で表示され、それに続く各連結語の最初の文字は大文字で表示されます。また、スペースとアンダースコアは削除されます。 例えば、FileMan フィールド 'DEA EXPIRATION DATE' は SQL フィールド名 'deaExpirationDate' になります。
IEN フィールドの名前を指定します。既定値は IEN です。
JSON アダプタ機能をマップされたクラスで使用できるようにします。JSONAdaptor の値は、クラスのパラメータと値の JSON 形式文字列です。許可されるパラメータは、以下のとおりです。
-
%JSONENABLED
-
%JSONIGNOREVALIDFIELD
-
%JSONNULL
-
%JSONIGNORENULL
-
%JSONREFERENCE
-
ComputedAlwaysJSONINCLUDE
JSONAdaptor パラメータの詳細は、クラス・リファレンスの "%JSON.AdaptorOpens in a new tab" を参照してください。
ComputedAlwaysJSONINCLUDE では、Calculated および SqlComputed として定義されたプロパティの %JSONINCLUDE プロパティ・パラメータを指定できます。
最適な結果を得るには、次の設定にすることをお勧めします。
-
%JSONEREFERENCE を ID に設定します。
-
ComputedAlwaysJSONINCLUDE を OUTPUTONLY に設定します。
ユーティリティが出力をログ記録するファイルの名前を指定します。ファイル名を入力します。
このユーティリティが作成するプロパティ名、外部キー名、トリガ名の最大文字数を指定します。既定値は 180 です。これは、最新リリースでの InterSystems IRIS クラス・メンバ名の文字数の増加に対応しています。 これらのアイテムの名前を、以前の短い最大文字数 (31 文字) のときのままにするには、このオプションを使用します。
作成されたクラスの所有者として使用するユーザ名を指定します。既定値は、$Username の現在の値です。
クラスを作成するパッケージの名前を指定します。
生成されたクラスを読み取り専用にするかどうかを指定します。許可される値は、以下のとおりです。
-
1 — 読み取り専用クラスを生成します。
-
0 — 読み込み/書き込みクラスを生成します。
サブファイルとポインタもマップするかどうかを指定します。許可される値は、以下のとおりです。
-
0 — 再帰なし。このファイルのみがマップされます。サブファイルやポインタはマップされません。
-
1 — 部分再帰。ファイルは、1 レベルのサブファイルおよびポインタと共にマップされます。
-
2 — 完全再帰。ファイルは、すべてのサブファイルおよびポインタと共にマップされます。これが既定値です。
どの必須 FileMan フィールドを必須プロパティとして定義するかを制御します。許可される値は、以下のとおりです。
-
1 — 必須とマークされる FileMan フィールドが、必須プロパティとして定義されます。これが既定値です。
-
0 — 必須識別子として定義される FileMan フィールドのみが、必須プロパティとして定義されます。
クラスが既に存在する場合、クラス全体を再作成するかどうかを指定します。許可される値は、以下のとおりです。
-
0 — ユーティリティはクラスを削除して再作成します。つまり、SQL 特権およびクラスへのアドオンは失われます。
-
1 — ユーティリティはクラス全体ではなく、プロパティ、ストレージ、インデックス、外部キーなどを再作成します。注 :
Note:-
独自のアイテムをクラス定義に手動で追加する前に、InterSystems IRIS 2010.2 以降で少なくとも 1 回、FM2Class ユーティリティを実行しておく必要があります。以前のバージョンでは、この機能に必要な必須メタデータが保存されないためです。
-
クラスをマップした後、クラスを別のネームスペースまたは別のシステムに移動して、RetainClass を 1 に設定して新しい場所から再びマッピングを試みる場合は、^oddFMD グローバルも手動で移動/コピーする必要があります。このグローバルには、RetainClass 設定で必要なメタデータが格納されているためです。
-
RetainClass 設定は、expandSetOfCodes を 1 に設定した場合に作成される SOC クラスと連携するようにはなっていません。つまり、独自のパラメータ、プロパティ、インデックスなどをこれらのクラスに追加した場合、RetainClass を 1 に設定してもそれらの変更は保持されません。
-
Set Of Codes フィールドのマッピングで使用するデータ型を指定します。オプションは %Library.EnumStringOpens in a new tab (既定値) と %Library.StringOpens in a new tab です。
%Library.EnumStringOpens in a new tab を使用すると、OdbcToLogical() メソッドと LogicalToOdbc() メソッドが提供され、xDBC クライアント・アプリケーションのコード値ではなく、Set Of Codes の意味を利用できるというメリットが得られます。
生成されるクラスで %Library.FilemanDateOpens in a new tab および %Library.FilemanTimeStampOpens in a new tab 型のプロパティの定義に STRICTDATA=1 を含めるかどうかを指定します。
この STRICTDATA パラメータは、これらのデータ型の LogicalToOdbc() メソッドと LogicalToDisplay() メソッドに影響します。STRICTDATA=0 の場合 (既定値)、メソッドには以前と同じコードが含まれます。STRICTDATA=1 の場合、LogicalToFormat() メソッドの無効な論理日付値および時刻値を処理するコードは削除されます。データベースに無効な、または不完全な日付値または時刻値が含まれていて、正しいデータを想定したくない場合は、STRICTDATA=1 を使用します。
マップされるクラスごとにスーパークラス・リストを指定します。クラス名のコンマ区切りリストを含む文字列を指定します。
生成されるテーブル名の形式を指定します。この設定の場合、次のキーワードと、テーブル名として有効な任意の文字を使用する文字列を指定します。
-
<FILENAME> — FileMan ファイルの名前に置き換えられます
-
<FILENUMBER> — ファイル番号に置き換えられます
<FILENAME> を使用する場合、ファイル番号の小数点以下の文字はアンダースコア文字に変換されます。
childTableNameFormat の例を参照してください。
変数ポインタ・フィールドを処理する方法を指定します。許可される値は、以下のとおりです。
-
1 — マップされる変数ポインタ・フィールドごとに、FM2Class は、変数ポインタ・フィールド値を拡張する、参照先ファイルの .01 フィールドと等しい計算プロパティも作成します。 このフィールドには、<Variable_Pointer_Field_VALUE> という名前が付けられます。
例えば、FM 変数ポインタ・フィールド WHO は、EMPLOYEE ファイルまたは PATIENT ファイルを指すように定義されます。既定では、FM2Class は 2 つのフィールドを作成します (EMPLOYEE ファイルを指すフィールドと PATIENT ファイルを指すフィールド)。これらのフィールドのうち 1 つのみが NULL 以外になります。WHO が EMPLOYEE の場合、WHO_EMPLOYEE フィールドには EMPLOYEE の ID/IEN が含まれます。WHO が PATIENT の場合、WHO_PATIENT には PATIENT の ID/IEN が含まれます。
FM2Class は 3 つ目のフィールド WHO_VALUE も作成します。このフィールドは、WHO が EMPLOYEE を指す場合は EMPLOYEE レコードの .01 フィールドに計算され、WHO が PATIENT を指す場合は PATIENT レコードの .01 フィールドに計算されます。
-
0 — FM2Class はこの 3 つ目のフィールドを作成しません。
ワード・プロセッシング・フィールドのマップ方法を指定します。許可される値は、以下のとおりです。
-
0 — 子テーブルとして変換します。
-
1 — リスト・コレクションとして変換します。
-
2 — リスト・コレクションと子テーブルの両方として変換します。
-
3 — 単一の長い文字列フィールドとして変換します。
FileMan ファイルのマッピング
%SYSTEM.OBJ.FM2ClassOpens in a new tab のメソッドを次のように使用します。
-
現在のネームスペース内のすべての FileMan ファイルをマップする場合
Do $SYSTEM.OBJ.FM2Class.All(.fmSettings, .classCount)
-
1 つの FileMan ファイルをマップする場合
Do $SYSTEM.OBJ.FM2Class.One(fileNumber,.fmSettings,.fmFields,.classCount)
-
現在のネームスペース内の一部の FileMan ファイルをマップする場合
Do $SYSTEM.OBJ.FM2Class.Some(fileList,.fmSettings,.fmFields,.classCount)
引数は以下のとおりです。
-
fmSettings は、このセクションの前半で説明したように、ユーティリティの任意の設定で参照渡しされるオプションの配列です。
-
classCount はオプションで、やはり参照渡しされます。マッパー・ユーティリティで作成されたクラスの数を返します。
-
fileNumber は、マップするファイルの FileMan ファイル番号です。
-
fmFields は、定義すると、マップされるファイルのフィールドを制限します。これは、fmFields (file-number,field-number) 形式の配列です。必須フィールドおよびこの配列で定義されたフィールドは、クラス定義でマップされます。この配列が空または定義されていない場合、ファイルのすべてのフィールドがマップされます。この配列は参照渡しされます。
-
fileList は、マップするファイルの FileMan ファイル番号です。ファイル番号のコンマ区切りリストまたはファイル番号の範囲を指定します。あるいは、参照渡しされるファイル番号の配列を指定します。
このクラス %SYSTEM.OBJ.FM2ClassOpens in a new tab では Version() および GetVersion() メソッドも提供されています。
次のステップ
変換ユーティリティを使用した後、生成されたクラスへの SQL アクセスがあることを確認する必要があります。それには、管理ポータルを使用します。少なくとも、以下を行えることを確認します。
-
スキーマを参照する。
-
新しいクラスに対して SQL クエリを実行する。
ネームスペースでグローバル・マッピングとルーチン・マッピングを作成する必要があることもあります。生成されたクラスで使用されるルーチンをチェックして、そのすべてがこのネームスペースで利用可能であることを確認します。
FileMan ファイルと InterSystems IRIS クラス定義の比較
理解を深めるために、簡単な FileMan ファイルと生成された InterSystems IRIS クラス定義を比較すると役立つ場合があります。
PostalCode というファイルの簡単な例を考えてみます。このファイルのファイル属性を見てみると (FileMan データ・ディクショナリ・ユーティリティを介して)、このファイルの相互参照とインデックスがあることがわかります。以下に例を示します。
この同じユーティリティは、このファイルのフィールドの定義も示しています。この場合、フィールドのタイトルは以下のようになります (アルファベット順にリストした場合)。
-
City
-
City Abbrevation
-
City Key
-
County
-
Inactive Date
-
Mail Code
-
Preferred City Key
-
State
-
Unique Key (VA)
FileMan データ・ディクショナリ・ユーティリティは、PostalCode ファイルに 2 つのポインタが含まれることも示しています。
-
County Code ファイルへのポインタ
-
State ファイルへのポインタ
このファイルをマップすると、5 つのクラスが作成されます。これには、PostalCode を表すクラスと、このクラスが参照するクラスが含まれます。パッケージ名として TEST を指定した場合、スタジオでは以下のように表示されます。
TEST.POSTALCODE のクラス定義は長くて表示できませんが、詳細を以下に要約します。
-
DATECREATED クラス・パラメータは、クラスが作成または更新された時刻と同じに設定されます。
-
FILEMANFILENAME パラメータは "POSTAL CODE" に設定され、FILEMANFILENUMBER パラメータは 5.12 に設定されます。これら 2 つのパラメータは、このクラスのマップ元の FileMan ファイルを示します。
-
クラスには、以下のプロパティが含まれます。
-
CITY
-
CITYABBREVIATION
-
CITYKEY
-
COUNTY
-
IEN
-
INACTIVEDATE
-
MAILCODE
-
PREFERREDCITYKEY
-
STATE
-
UNIQUEKEYVA
これらのプロパティの定義は、対応するフィールドの定義から導出されます。また、FileMan 内部エントリ番号はプロパティとして明示的に表されます。
説明テキストは引き継がれ、コメントとして使用されます。以下に例を示します。
/// FileMan Field Label: 'STATE' FileMan Field Number: '3' /// This field contains a pointer to the State File to represent the state /// associated with this Postal Code. Property STATE As TEST.STATE [ SqlColumnNumber = 6, SqlFieldName = STATE ];
これらのプロパティのうちいくつかは (このプロパティのように)、他の生成されたクラスへの参照です。この表現は、PostalCode ファイルで定義された相互参照に対応します。
-
-
このユーティリティは、作成された各ポインタ・フィールドの外部キー制約を作成します。外部キー制約は、参照先のテーブルの ID を参照するだけです。
この例では、クラスに、PostalCode ファイル内のポインタ参照を表す以下の外部キーが含まれています。
-
TEST.COUNTYCODE() を参照する FKeyCOUNTY(COUNTY)
-
TEST.STATE() を参照する FKeySTATE(STATE)
このセクションで後述の “変数ポインタ・フィールドのマッピング” セクションも参照してください。
-
-
このクラスには、1 つのインデックスが含まれます。
Index IDKeyIndex On IEN
-
最後に、このクラスには、FileMan ファイラによってファイリングが実行されるときに作用する 3 つのトリガが含まれます。
-
BeforeDeleteFiling
-
BeforeInsertFiling
-
BeforeUpdateFiling
-
マッピングの詳細
ここでは、$SYSTEM.OBJ.FM2Class のメソッドが InterSystems IRIS クラス定義を生成する方法に関する注記を示します。
FileMan データ型フィールドのマッピング
FileMan マッピング・ユーティリティは、以下のような特定のフィールド型の変換をサポートします。
-
BOOLEAN
-
LABEL REFERENCE
-
TIME
-
YEAR
-
UNIVERSAL TIME
-
FT POINTER
-
FT DATE
-
RATIO
InterSystems IRIS データ型クラスのサポート
特定のフィールド型のサポートを可能にするために、以下の InterSystems IRIS データ型クラスが存在します。
%Library.FilemanTimeStampUTCOpens in a new tab の変換方法では、完全な FileMan 22.2 ランタイム環境がインストールされ、DUZ(2) 変数が定義され、定義された COUNTRY および LOCATION TIMEZONE 値を含む INSTITUTION を参照していると想定しています。
これらのデータ型クラスの主な目的は、型の内部 (論理) 値と外部 (表示/ODBC) 値を提供することです。これらは、SQL エンジンで他の日付/時刻/タイムスタンプ型と互換性があるようには設定されません。例えば、クエリで %Library.FilemanTimeOpens in a new tab は %TimeOpens in a new tab 型と正しく比較されません。2 つの型の論理値が異なるためです。これら 3 つの型の論理値は文字列で、文字列の照合を使用して、比較される値が強制的に文字列になるようにします。
%Library.FilemanTimeOpens in a new tab フィールドと現在の時刻を比較したい場合は、まず FileMan の時刻フィールドを %TimeOpens in a new tab 形式に変換し、比較が有効になるようにする必要があります。以下に、これを行う方法の例を示します。
SELECT ... FROM ... WHERE CAST(%external(FM_TIME_FIELD) AS TIME) > CURRENT_TIME
サポートされる FileMan フィールドの型
BOOLEAN データ型として定義されたフィールドは、2 つのエントリのみ選択できます。
内部 | 外部 |
1 | あり |
0 | なし |
LABEL REFERENCE データ型として定義されたフィールドは、<TAG>^<ROUTINE> 形式のタグおよびルーチン・エントリを格納するように設計されています。フリー・テキスト・フィールドとして格納されます。
LABEL REFERENCE フィールドは、%Library.StringOpens in a new tab として InterSystems IRIS にマップされます。
TIME データ型として定義されたフィールドは、多くの日付/時刻エントリを受け入れることができますが、時刻部分のみを格納します。例を以下に示します。
-
内部 — 150943
-
外部 — 15:09:43
TIME フィールドは、%Library.FilemanTimeOpens in a new tab として InterSystems IRIS にマップされます。
YEAR データ型として定義されたフィールドは、多くの日付エントリを受け入れることができますが、年部分のみを格納します。以下に例を示します。
-
内部 — 3160000
-
外部 — 2016
YEAR フィールドは、%Library.FilemanYearOpens in a new tab として InterSystems IRIS にマップされます。
UNIVERSAL TIME データ型として定義されたフィールドは、多くの日付/時刻エントリを受け入れることができます。協定世界時からのオフセットを示すインジケーターを含む、ローカル時刻の形式で日付/時刻を格納します。UNIVERSAL TIME データ型の内部保存の最初の 14 文字は、秒を含む現在の DATE/TIME データ型とまったく同じです。位置 15、16、17 の 3 つの文字は、UTC 時刻オフセットを 5 分刻みで示します。以下に例を示します。
-
内部 — 3160106.080336440
-
外部 — JAN 6,2016@08:03:36 (UTC-5:00)
この例では、(440–500)/12=-5 です。これは、UTC からマイナス 5 時間のオフセットです。
UNIVERSAL TIME フィールドは、%Libary.FilemanTimestampUTC として InterSystems IRIS にマップされます。
FT POINTER データ型として定義されたフィールドは、POINTER データ型と同じように機能しますが、指し示された値から返されたフリー・テキストを内部的に格納します。以下に例を示します。
-
内部 — PATCH,USER
-
外部 — PATCH,USER
FT POINTER フィールドは、%Library.StringOpens in a new tab として InterSystems IRIS にマップされます。
FT DATE データ型として定義されたフィールドは、DATE/TIME データ型と同じように機能しますが、日付を決定するためにユーザが入力したフリー・テキストを内部的に格納します。以下に例を示します。
-
内部 — T-1
-
外部 — T-1
FT DATE フィールドは、%Library.StringOpens in a new tab として InterSystems IRIS にマップされます。
RATIO データ型として定義されたフィールドは、2 つの数値と、その数値の間のコロン文字 (:) を受け入れるように設計されています。算術演算のように書式設定され、格納されます。以下に例を示します。
-
内部 — 1:14
-
外部 — 1:14
RATIO フィールドは、%Library.StringOpens in a new tab として InterSystems IRIS にマップされます。
変数ポインタ・フィールドのマッピング
InterSystems IRIS クラスにマップされたファイル内の各変数ポインタ・フィールドは、SqlComputed キーワードでマークされたクラスのプロパティを定義します。この変数ポインタ・フィールドが参照するファイルごとに、クラスに追加のプロパティが作成され、このプロパティは SqlComputed および Calculated キーワードでマークされます。VariablePointerFieldName が変数ポインタ・フィールドの名前で、PointerFileName が指しているファイルの名前である場合、追加されるプロパティは VariablePointerFieldNamePointerFileName です。このプロパティの SQL フィールド名は VariablePointerFieldName_PointerFileName です。
例えば、ファイル ABC に VP という変数ポインタ・フィールドが含まれるとします。VP は、Red、White、または Blue ファイルを指すことができます。これにより、クラス定義に次のプロパティが作成されます。
プロパティ | SqlFieldName | 詳細 |
---|---|---|
VP | INSERT および UPDATE 時に計算される SQL。マップ定義に格納されます。変数ポインタ・フィールドの内部値を含みます。通常、"41;DIC(40.7," のようになります。これは、40.7 ファイルの行 41 を指しています。 | |
VPRed | VP_Red | この行の VP フィールドが Red ファイルを指している場合を除き、NULL となる計算フィールドです。Red テーブル/ファイルの行を指すように、VP の値を SQL INSERT または UPDATE を介して更新するには、VP_Red の値をその行の ID に設定します。 |
VPWhite | VP_White | この行の VP フィールドが White ファイルを指している場合を除き、NULL となる計算フィールドです。White テーブル/ファイルの行を指すように、VP の値を SQL INSERT または UPDATE を介して更新するには、VP_White の値をその行の ID に設定します。 |
VPBlue | VP_Blue | この行の VP フィールドが Blue ファイルを指している場合を除き、NULL となる計算フィールドです。Blue テーブル/ファイルの行を指すように、VP の値を SQL INSERT または UPDATE を介して更新するには、VP_Blue の値をその行の ID に設定します。 |
いずれの場合でも、VP フィールドは自動的に計算され、格納されます。
3 つの参照フィールド VP_Red、VP_White、VP_Blue を定義するほかに、このユーティリティはこれらの参照の ABC クラスに 3 つの外部キー制約を作成します。これは、ファイル間の参照整合性を保つために行われます。
新しいスタイルの相互参照のマッピング
相互参照が単純な set/kill ロジックによって定義されている場合、このユーティリティは新しいスタイルの相互参照をインデックス・マップに変換します。これにより、InterSystems IRIS クエリ・オプティマイザは新しいスタイルの相互参照インデックス (ある場合) を選択し、クエリのパフォーマンスを改善できる場合があります。
DUZ(9) を使用する相互参照のマッピング
FM2Class は、相互参照の添え字に変数 DUZ(9) への参照が含まれるか、添え字の形式が +$G(varname) である (varname は任意の変数参照を表します) ために、以前はマップされなかった相互参照 (オリジナルまたは新しいスタイル) をマップします。
このような相互参照定義がある場合は、これらの相互参照からマップされたインデックスを持つテーブルに対して SQL クエリを実行しているプロセスで、DUZ(9) 変数、または +$G(varname) によって参照されるすべての変数が定義されていることを確認します。xDBC を介して接続されているプロセスに DUZ(9) を設定するには、$SYSTEM.SQL.SetServerInitCode() を使用します。
高度なクエリ
クラス %FileMan.FileOpens in a new tab と %FileMan.FieldOpens in a new tab を使用して、FileMan データ・ディクショナリに対してクエリを実行できます。
クラス %FileMan.MappedFileOpens in a new tab と %FileMan.MappedFieldOpens in a new tab を使用して、FileMan とクラス定義とのマッピングに関するメタデータを表示することもできます。
%FileMan クラスの詳細は、インターシステムズ・クラス・リファレンスを参照してください。