移行と変換ユーティリティ
この章では、Caché データベースを新しいシステムに移行する際に使用できる専用のツールと手法について説明します。
-
cvendian を使用したビッグ・エンディアン・システムとリトル・エンディアン・システム間の変換 — ビッグ・エンディアン・プラットフォームとリトル・エンディアン・プラットフォームの間で移行するために Caché データベースのバイト・オーダーを変換するユーティリティについて説明します。また、指定されたデータベースのバイト・オーダーに関して報告するためのオプションも提供しています。
-
cdbmerge を使用して複数のデータベース・エクステントを 1 つのファイルにまとめる方法 — Caché エクステントを使用する場合に便利な cdbmerge ユーティリティについて説明します。以前のリリースでは、Caché は、部分的にディスク・ハードウェアとファイル・システムの制限を回避するために、1 つのデータベースが複数のファイルにまたがること (エクステント) を許可していました。これらの制限は適用されなくなり、Caché はエクステントをサポートしません。cdbmerge ユーティリティを使用すると、エクステント・スタイルのデータベースを 1 つのデータベース・ファイルにまとめることができます。
-
FileMan ファイルから Caché クラスへの変換 — FileMan (MUMPS アプリケーション用のメタデータ・ユーティリティ) で作成されたファイルを読み取り、それらをマップする Caché クラスを生成する FileMan マッピング・ユーティリティについて説明します。
-
CSP に変換される WebLink Developer タグ — WebLink Developer タグのセットについて説明します。このセットは、Weblink Developer から Caché Server Pages (CSP) にアプリケーションを移行する際に便利です。
cvendian を使用したビッグ・エンディアン・システムとリトル・エンディアン・システム間の変換
Caché には、Caché データベースのバイト・オーダーをビッグ・エンディアン (最上位のバイトが先頭) からリトル・エンディアン (最下位のバイトが先頭)、またはその逆に変換するユーティリティが備わっています。これは、convert endian を略して cvendian と呼ばれています。2 つのタイプのプラットフォーム間でデータベースを移動する際に役立ちます。また、指定されたデータベースのバイト・オーダーに関して報告するためのオプションも提供しています。
サポート対象プラットフォームのエンディアンについては、このリリース用のオンライン・ドキュメント "インターシステムズでサポートされるプラットフォームOpens in a new tab" の “プラットフォームのエンディアン” を参照してください。
このユーティリティをマウント済みデータベースに使用することはできません。
ユーティリティの場所
cvendian ユーティリティは、ファイル install-dir\Bin\cvendian.exe です。
変換プロセス
cvendian は、変換するファイルを持つシステム上、または変換するファイルを使用する予定であるシステムのいずれかで実行可能です。
例えば、データベースをリトル・エンディアン・システムからビッグ・エンディアン・システムに変換するには、リトル・エンディアン・システムで変換を実行した後データベースをビッグ・エンディアン・システムに転送するか、ファイルを最初に転送した後変換できます。
バックアップ・ファイルやジャーナル・ファイルに対して、このユーティリティは使用できません。同じエンディアンのプラットフォームでデータベースをリストアし、リストアしたデータベースを別のエンディアン・プラットフォームに移動してから、cvendian ユーティリティを使用してデータベースを変換する必要があります。
データベースを変換するプロセスは、以下のとおりです。
-
ユーティリティはソース・ファイルを変換済みのファイルと置換するため、使用中のデータベース・ファイルのコピーを作成します。
-
“ユーティリティの構文” のセクションで説明する構文を使用して cvendian を実行します。
USER>zn "%SYS"
%SYS>Do ^LABEL
Enter the name of the directory in which the database is
stored. For a multi-volume database, enter the name of the
primary volume's directory, even if you want to relabel a
secondary volume. For a multi-volume legacy 2K database, you
should enter the name of the secondary volume directory if
you need to relabel it.
Directory:
ユーティリティの構文
cvendian エンディアン・ユーティリティを使用すると、希望するバイト・オーダーを指定するか、変換せずに現在のバイト・オーダーを報告できます。以下の構文を使用します。
cvendian [-option] file
option 引数は以下のいずれかになります。
-
-big — データベースをビッグ・エンディアンに変換
-
-little — データベースをリトル・エンディアンに変換
-
-report — データベースのバイト・オーダーを報告
オプションを短縮して頭文字で表すこともできます。これが変換要求 (-big または -little) であり、データベースのバイトオーダーが既に指定したものになっている場合、警告メッセージが表示され、処理は停止します。
option 引数を指定しない場合、ユーティリティによって既存のバイト・オーダーから他のバイト・オーダーにデータベースが変換されます。ただし、option 引数を使用することをお勧めします。
file 引数は変換するファイルで、完全なパス名を含むことができます。
ユーティリティは、以下のアクションを実行します。
-
データベースのバイト・オーダーを自動的に検出します。
-
エンディアン情報と他の情報を表示します。
-
変換を実行します。
-
成功、または失敗を示すメッセージを表示します。
例
ここでは、Windows XP から Solaris SPARC で使用するためにデータベースを変換すると想定します。SPARC と Intel ではデータの表現形式に互換性がないため、リトル・エンディアン (Intel) からビッグ・エンディアン (SPARC) に変換する必要があります。Solaris システムへファイルを移動する前に Windows システムで cvendian を実行した場合の出力は以下のようになります。
C:\CacheSys\Bin>cvendian -big c:\temp\solarisdb\cache.dat
This database is little-endian.
This database has a block size of 8192 bytes.
This database has 1 volume and 1 map.
The last block in the primary volume is 18176.
Original manager directory is c:\temp\solarisdb\
No extension volumes.
Done converting c:\temp\solarisdb\cache.dat to big-endian
C:\CacheSys\Bin>
次に、変換済みのデータベースを Solaris システムに移動します。
cdbmerge を使用して複数のデータベース・エクステントを 1 つのファイルにまとめる方法
従来より、Caché ではデータベースがエクステントと呼ばれる複数のファイルにわたることを許可してきました。その理由の一つは、ディスク・ハードウェアとファイルシステムが、データベース全体を格納するのに十分な大きなファイルをサポートできなかったからです。
その障害は、ストレージ・テクノロジとファイルシステム機能の進歩によって排除されました。その結果、エクステントのサポートは不要になりました。 Caché バージョン 10.1 ではエクステントのサポートが非推奨になり、バージョン 14.1 では完全に削除されました。
ただし、エクステント・スタイルのデータベースをマウントして読み込むことが必要になることがあります。この問題に対処するために、バージョン 2012.2.4 からは、データベースとそのエクステントが含まれるディレクトリを単一の cache.dat データベース・ファイルにまとめる、スタンドアロンのユーティリティが提供されています。このユーティリティの名前は cdbmerge です。これは、<install_dir> の Bin サブディレクトリにあります。
この変換を行うには、以下を実行します。
-
データベースとエクステントをリストアして、それらを専用のディレクトリにまとめます。
-
そのディレクトリで cdbmerge ユーティリティを実行します。
-
変換したデータベースを構成して、Caché にマウントします。
cdbmerge コマンドには、以下の 2 つの形式があります。
cdbmerge <Original_Dir> cdbmerge -srcdir <Original_Dir> -destdir <Final_Dir>
以下はその説明です。
-
<Original_Dir> は、ベースの cache.dat ファイルと関連するエクステントが含まれるディレクトリの場所です。
-
<Final_Dir> は、マージされた cache.dat の場所です (オプション)。指定しない場合、データベースは所定位置でマージされます。
予期しないエラーに対する保護手段として、マージの前に、利用可能な <Original_Dir> のコピーを用意することをお勧めします。
FileMan ファイルから Caché クラスへの変換
FileMan は、MUMPS アプリケーション用にメタデータの格納、アクセス、および操作機能を提供する一連のユーティリティです。このセクションでは、FileMan ファイルを Caché クラスにマップする方法について説明します。FileMan のソース・コードはパブリック・ドメインにあり、インターシステムズでは提供していません。ただし Caché には、FileMan で作成されたファイルを読み取り、それらをマップする Caché クラスを生成する FileMan マッピング・ユーティリティが用意されています。
このセクションでは、以下の項目について説明します。
このセクションでは、FileMan グローバル (^DD および ^DIC) がシステムの目的のネームスペースにロードされていることを前提としています。
FileMan マッピング・ユーティリティの概要
FileMan ウィザードを使用すると、FileMan ファイルのカスタム・クラス・マッピングを素早く容易に作成できます。マッピング・ユーティリティで作成されたクラスでは、ObjectScript および SQL を介して、ファイル・データにアクセスできます。ネームスペース内の FileMan ファイルのうち、1 つのみ、複数、またはすべてをマップできます。ファイルごとに、以下のような詳細な制御を行うことができます。
-
マップするフィールド
-
クラスを読み取り専用にするか書き込みアクセスさせるか
-
生成されたクラスおよびプロパティ (テーブルおよびフィールド) の名前の形式
-
生成されたクラスのスーパークラス・リスト
-
ワード・プロセッシング・フィールドを、リスト・コレクションとしてマップするか子テーブルとしてマップするか
FileMan ウィザードへのアクセス
FileMan ウィザードにアクセスする手順は以下のとおりです。
-
管理ポータルを開きます。
-
[システム・エクスプローラ]→[SQL] をクリックします。
-
ヘッダのネームスペースをチェックします。必要に応じて、[切り替え] をクリックして正しいネームスペースに変更します。
-
[ウィザード]→[FileMan] をクリックします。
このページでは、次の操作を実行できます。
-
FileMan ファイルをマップするときに使用する既定の設定の指定。
-
現在のネームスペースの FileMan ファイルの 1 つ、複数、またはすべてのマッピング、および Caché クラスの生成。
-
過去のマッピング処理のログの表示。
-
任意のバックグラウンド・タスクの表示。
既定の設定の指定
FileMan ウィザードは、クラスの生成方法を制御する設定を数多く使用します。これらの設定を確認し、頻繁に使用する値に設定を変更して、それを既定の設定として保存すると便利です。
設定を変更する手順は以下のとおりです。
-
管理ポータルを開きます。
-
[システム管理] > [構成] > [SQL およびオブジェクトの設定] > [FileMan 変換設定] の順にクリックします。
-
必要な変更を行い、[保存] をクリックします。
または、“FileMan ウィザードへのアクセス” での説明に従ってウィザードにアクセスし、最初のページで値を変更して、[デフォルトとして保存] をクリックします。
使用可能な設定は以下のとおりです。
-
[作成したクラスの所有者] — 作成したクラスの所有者として使用するユーザ名を指定します。既定値は、$Username の現在の値です。
-
[クラスを作成するパッケージの名前] — クラスを作成するパッケージの名前を指定します。
Note:既に別のパッケージにクラスがマッピングされている場合、新しいパッケージにその FileMan ファイルを再びマッピングしても、古いクラスは自動的には削除されません。
-
[スーパー・クラス] — それぞれのマップされたクラスのスーパークラス・リストを指定します。クラス名のコンマ区切りリストの文字列を指定してください。
-
[ファイル名と番号に基づくテーブル名形式] — 生成されるテーブル名の形式を指定します。この設定では、テーブル名への使用が有効な任意の文字と共に以下のキーワードを使用する文字列を指定します。
-
<FILENAME> — FileMan ファイルの名前に置換されます。
-
<FILENUMBER> — ファイル番号に置換されます。
<FILENAME> を使用する場合、ファイル番号の小数点以下の桁の文字は、アンダースコア文字に変換されます。
[ファイル名と番号に基づく子テーブル名形式] の例を参照してください。
-
-
[ファイル名と番号に基づく子テーブル名形式] — 生成される子テーブル名の形式を指定します。この設定では、テーブル名への使用が有効な任意の文字と共に以下のキーワードを使用する文字列を指定します。
-
<FILENAME> — FileMan ファイルの名前に置換されます。
-
<FILENUMBER> — ファイル番号に置換されます。
-
<PARFILENAME> — 親ファイルの名前に置換されます。
-
<PARFILENUMBER> — 親ファイルのファイル番号に置換されます。
<FILENAME> または <PARFILENUMBER> を使用する場合、ファイル番号の小数点以下の桁の文字は、アンダースコア文字に変換されます。
この設定の例は以下のとおりです。
-
SUB_<FILENAME> — この例で、子テーブルのテーブル名は SUB_ にファイルの名前が続く文字列になります。例 : SUB_ACCESSIBLE_FILE
-
f<PARFILENUMBER>c<FILENUMBER> — この例で、子テーブルのテーブル名は f、親ファイルの番号、c、このファイルの番号の順に構成される文字列になります。例 : f200c200_032
-
<FILENAME> — この例で、子テーブル名はファイル名と同じになります。
-
-
[プロパティ、トリガおよび外部キー名の最大長] — このユーティリティで生成されるプロパティ名、外部キー名およびトリガ名の最大長を指定します。既定は 180 です。これは、最新のリリースの Caché クラス・メンバ名の長さの増加に対応しています。 これらの項目名の長さを以前の短い最大値 (31 文字) にするには、このオプションを使用します。
-
[Fileman フィールド名に基づくフィールド名形式] — ユーティリティによる SQL フィールド名の生成方法を指定します。以下のいずれかを選択します。
-
[同じ] — SQL フィールド名は、FileMan フィールド名に使用されている文字と同じ大文字または小文字を使用します。例えば、FileMan フィールド 'DEA EXPIRATION DATE' は、SQL フィールド名 'DEA_EXPIRATION_DATE' になります。
-
[大文字] — FileMan フィールド名の文字は、SQL フィールド名を生成するときに大文字に変換されます。 例えば、FileMan フィールド 'DEA expiration date' は、SQL フィールド名 'DEA_EXPIRATION_DATE' になります。
-
[小文字] — FileMan フィールド名の文字は、SQL フィールド名を生成するときに小文字に変換されます。 例えば、FileMan フィールド 'DEA EXPIRATION DATE' は、SQL フィールド名 'dea_expiration_date' になります。
-
[パスカル] — 識別子の最初の文字と後続の各連結語の最初の文字が大文字になります。また、スペースとアンダースコアが除去されます。例えば、FileMan フィールド 'DEA EXPIRATION DATE' は、SQL フィールド名 'DeaExpirationDate' になります。
-
[キャメル] — 識別子の最初の 3 文字が小文字になり、後続の各連結語の最初の文字が大文字になります。また、スペースとアンダースコアが除去されます。 例えば、FileMan フィールド 'DEA EXPIRATION DATE' は、SQL フィールド名 'deaExpirationDate' になります。
-
-
[FileMan Date フィールドに使用するデータ型] — FileMan DATE フィールドのマッピングに使用するデータ型を指定します。既定は、%Library.FilemanDateOpens in a new tab です。
-
[FileMan DateTime フィールドに使用するデータ型] — FileMan DATE/TIME フィールドのマッピングに使用するデータ型を指定します。既定は、%Library.FilemanTimeStampOpens in a new tab です。
-
[%FilemanData* データ型に STRICTDATA=1 を定義する] — 生成されたクラスが %Library.FilemanDateOpens in a new tab および %Library.FilemanTimeStampOpens in a new tab 型のプロパティの定義に、STRICTDATA=1 を含むかどうかを指定します。
この STRICTDATA パラメータは、これらのデータ型の LogicalToOdbc() および LogicalToDisplay() メソッドに影響します。STRICTDATA=0 (既定) の場合、これらのメソッドは以前に含んでいたものと同じコードを含みます。STRICTDATA=1 の場合、無効な論理日付および時刻の値を処理する LogicalToFormat() メソッド内のコードは削除されます。データベースに無効または不完全な日付値または時刻値が含まれていて、正しいデータに対する想定を望まない場合は、STRICTDATA=1 を使用します。
-
ポインタの拡張— ユーティリティで、ポインタ・フィールドを拡張する追加計算プロパティを作成するかどうかを指定します。以下のいずれかのオプションを選択します。
-
[いいえ] — ユーティリティはポインタ・フィールドを拡張する計算プロパティを追加しません。
-
[はい(1) - FIELD および FIELD_NAME] — ユーティリティは、ポインタ・フィールドを拡張し、参照先ファイルの NAME (.01) フィールドと等しい計算プロパティを追加します。
-
[はい(2) - FIELDID および FIELD] — ユーティリティは、ポインタ・フィールドを拡張し、参照先ファイルの NAME (.01) フィールドと等しい計算プロパティを追加します。このオプションで使用される命名規則では、ポインタ・フィールドは、参照ファイルのフィールド名に “_ID” を付加した名前になります。
-
[はい(3) - As FIELD_fPointerFilenID および FIELD] – このオプションは、参照フィールドの名前が <Field>_f<pointed-to-file-id#>ID になる点を除き、2 と同じです。
-
-
[Set Of Codes フィールドの拡張] — マップされる Set Of Codes フィールドごとに、拡張 SOC (SetOfCodes) テーブルを定義するかどうかを指定します。
-
このオプションを [はい] にすると、クラスにマップされるこのようなフィールドごとに、コード・セットの CODE および MEANING にマップする読み取り専用クラス/テーブルが生成されます。テーブル名は <tablename>_SOC_<fieldname> です。SOC テーブルには、2 つのフィールドがあります。CODE は CODE の名前にマップされ、MEANING は CODE の外在的な意味です。このテーブルは、^DD グローバルに直接マップされるため、^DD グローバルの定義が更新されたら、テーブルによって返されるデータにすぐに反映されます。
-
このオプションを [いいえ] (既定) にすると、これらの SOC クラス/テーブルは作成されません。
-
-
変数ポインタ・フィールドの値を作成しますか?— 変数ポインタ・フィールドの処理方法を指定します。このオプションが選択されていて、各変数ポインタ・フィールドがマップされている場合、FM2Class は、変数ポインタ・フィールドを拡張し、参照先ファイルの .01 フィールドと等しい計算プロパティを作成します。 このフィールドは、<Variable_Pointer_Field_VALUE> と指定されます。
例えば、FM 変数ポインタ・フィールド WHO は EMPLOYEE ファイルまたは PATIENT ファイルのいずれかをポイントするように定義されます。既定では、FM2Class は EMPLOYEE ファイルをポイントするフィールドと PATIENT ファイルをポイントするフィールドの 2 つのフィールドを作成します。これらのフィールドの 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 フィールドに対して計算します。この設定がクリアされている場合は、FM2Class はこの 3 番目のフィールドを作成しません。
-
Set Of Codes フィールドをデータ型として定義しますか?— Set Of Codes フィールドのマッピングに使用するデータ型を指定します。オプションは、%Library.EnumStringOpens in a new tab (既定) および %Library.StringOpens in a new tab です。
%Library.EnumStringOpens in a new tab を使用すると、OdbcToLogical() メソッドおよび LogicalToOdbc() メソッドが提供され、xDBC クライアント・アプリケーションのコード値ではなく、コード・セットの意味を使用できるため好都合です。
-
[必須プロパティの定義] — 必須の FileMan フィールドのうち、いずれを必須のプロパティとして定義するかを制御します。
-
この設定を [必須のフィールド] (既定) にすると、必須としてマークを付けられている FileMan フィールドが、必須のプロパティとして定義されます。
-
この設定を [必須の識別子] にすると、必須の識別子として定義されている FileMan フィールドのみが、必須のプロパティとして定義されます。
-
-
[拡張マッピング] — 拡張マッピングに使用するため、マップ定義のグローバル名に挿入する文字列を指定します。例えば、["SD"] を指定した場合、グローバルは ^LR(...) ではなく、^["SD"]LR(...) とマッピングされます。
これは、拡張グローバル・マッピングに使用可能な任意の有効文字列を使用でき、[...] または |...| の括弧で囲む必要があります。
-
[IEN フィールドの名前] — IEN フィールドの名前を指定します。既定値は IEN です。
-
クラスを保持— 既にクラスが存在している場合に、クラス全体を再作成するかどうかを指定します。
-
この設定が [いいえ] の場合、ユーティリティによってクラスが削除され、再作成されます。これによりクラスに対する SQL 特権およびすべてのアドオンが失われることになります。
-
この設定が [はい] の場合、ユーティリティによって、クラス全体ではなく、プロパティ、ストレージ、インデックス、外部キーなどが再作成されます。メモ :
-
クラス定義に独自の項目を手動で追加する前に、Caché 2010.2 以降のバージョンを使用して少なくとも 1 回 FM2Class ユーティリティを実行しておく必要があります。これが必要なのは、以前のバージョンでは、この機能に必要な必須のメタデータが保存されていないためです。
-
クラスをマッピングした後、このクラスを別のネームスペースまたは別のシステムに移動し、[クラス保持?] を [はい] に設定した状態で新しい場所からクラスを再マップしようとする場合は、^oddFMD グローバルも手動で移動/コピーする必要があります。これは、[クラス保持?] 機能が必要とするメタデータがこのグローバルに格納されているためです。
-
[クラス保持?] 機能は、[Set Of Codes フィールドの拡張] を [はい] に設定したときに作成される SOC クラスと連携するためのものではありません。つまり、これらのクラスに独自のパラメータ、プロパティ、インデックスなどを追加する場合、[クラス保持?] が [はい] に設定されていてもこれらの変更は保持されません。
-
-
-
[反復] — サブファイルおよびポインタもマッピングするかどうかを制御します。
-
この設定が [反復なし] の場合、このファイルのみがマッピングされます。サブファイルやポインタはマッピングされません。
-
この設定が [部分反復] の場合、ファイルが 1 レベルのサブファイルおよびポインタと共にマッピングされます。
-
この設定が [完全反復] の場合、ファイルがすべてのサブファイルおよびポインタと共にマッピングされます。これが既定値です。
-
-
[ワード・プロセッシング・フィールドの変換] – ワード・プロセッシング・フィールドのマッピング方法を指定します。[子テーブルとしてコンバート]→[リストコレクションとしてコンバート] または [リストコレクションおよび子テーブルとしてコンバート] を選択します。
-
読み取り専用— 生成されたクラスを読み取り専用にするかどうかを指定します。
-
[ログ・ファイル] — ユーティリティが出力を記録するファイルの名前を指定します。[参照...] をクリックしてファイルを選択します。またはファイル名を入力します。
-
クラスのコンパイル— クラスを作成後にコンパイルするかどうかを指定します。
-
[コンパイル・フラグ] — 任意のクラス・コンパイラ修飾子、およびフラグを指定します。
-
[削除フラグ] — 任意のクラス削除修飾子、およびフラグを指定します。
-
[結果の表示] — 結果の表示方法を制御します。[全画面表示] (既定)、[最小画面表示]、または [画面表示なし] を選択します。
FileMan ファイルのマッピング
FileMan ファイルを Caché クラスにマップする手順は以下のとおりです。
-
FileMan ウィザードにアクセスします(“FileMan ウィザードへのアクセス” 参照)。
-
必要に応じて、ウィザードの最初のページで設定を変更します。設定の詳細は、前のセクション “既定の設定の指定” を参照してください。
-
[次へ] をクリックします。
ウィザードの次のページを使用して、マップするファイルを指定します。
-
ファイル名のすべてまたは一部を入力して、[検索] をクリックします。
ウィザードには、指定した文字列から始まるこのネームスペース内のすべての FileMan ファイルが表示されます。
-
以下のいずれかを行います。
-
[すべてをマップ] をクリックします。確認を求めるプロンプトが表示されます。[OK] をクリックします。
すると、直ちにファイルをマップするバックグラウンド・タスクが起動します。この場合、このセクションの残りの手順は適用されません。
-
[全て選択] をクリックします。次に [次へ] をクリックします。
-
1 つ以上のファイルの [選択] リンクをクリックします。それぞれのファイルに対して、マップするフィールドのリストが表示されます (既定ではすべてのフィールド)。マップしないフィールドがあれば、それをダブルクリックします。ファイルとそのフィールドを選択したら、[カートに追加] をクリックします。
-
1 つ以上のファイルの [カートに追加] リンクをクリックします。このオプションにより、すべてのフィールドがマップされますが、この段階ではフィールドを取得する必要がないので、ウィザードは高速に動作します。ファイルを選択したら、[次へ] をクリックします。
-
-
選択したファイルを確認します。
ツリーに、選択したファイルがそれぞれのフィールドと共に表示されます。いずれかのファイルを削除するには、ファイル名をクリックしてからツリーの上の [削除] リンクをクリックします。フィールドをクリックしてから [削除] をクリックすると、そのフィールドのファイル名も削除されます。カートを空にする (そのすべてを削除する) には、ツリーの上の [カートのクリア] リンクをクリックします。
-
必要に応じて、次のいずれかの操作を行います。
-
ファイル名をクリックし、ツリーの上の [削除] リンクをクリックして、ファイルを削除します。
-
フィールド名をクリックし、[削除] リンクをクリックして、フィールドを削除します。
-
[カートのクリア] をクリックして、すべてのファイルを削除します (これを実行すると、ウィザードは前のページに戻ります)。
-
-
[完了] をクリックします。
すると、ファイルをマップするバックグラウンド・ジョブが起動します。
プログラムによるアクセス
FileMan ウィザードは %fm2class ルーチンを使用します。これは、Caché および Ensemble 2009.1 の一部としてインストールされます。
このルーチンを XML ファイルとして取得し、それを Caché または Ensemble バージョン 5.0.* 以上にインストールすることもできます。
このセクションでは、必要に応じてこのルーチンをインストールし、それを使用する方法を説明します。このルーチンは直接呼び出さずに、$SYSTEM.OBJ.FM2Class のメソッドを使用します。
システム要件
標準的な Caché または Ensemble のバージョン 5.0.* 以上のインストールを実行している必要があります。
機能する FileMan のインストールが必要です。
以前の製品バージョンへのルーチンのインストール
%fm2class ルーチンは、システムにロード可能な XML ファイルとして提供されます。Caché または Ensemble バージョン 5.1 以上にインストールする方法は、以下のとおりです。
-
まず、CACHELIB データベースが読み取り専用でマウントされていないことを確認します。
-
以下のコマンドを使用して、XML ファイルを %SYS ネームスペースにロードします。
Do $SYSTEM.OBJ.Load("C:\Kits\FM2Class_v101.xml","psc")
"C:\Kits\" を実際のパス名に置き換えます。これで、ユーティリティを実行する準備ができました。
Caché または Ensemble バージョン 5.0 にインストールする場合は、インターシステムズのサポート窓口までお問い合わせください。
構成設定の指定
%fm2class ルーチンは、以下のテーブルに示すように、FileMan ウィザードで指定した設定と同じ設定を使用します。ドロップダウン・リストとして表示される設定に対して、使用する値を以下のテーブルに示します。すべての「はい/いいえ」設定では、1 が「はい」、0 が「いいえ」を意味します。その他の設定では、ウィザードに記述されているのと同じ値を使用します。
FileMan ウィザードの名前の設定 | 内部の設定名、メモ |
---|---|
作成したクラスの所有者 | owner |
クラスを作成するパッケージの名前 | package |
スーパー・クラス | superClasses |
ファイル名と番号に基づくテーブル名形式 | tableNameFormat |
ファイル名と番号に基づく子テーブル名形式 | childTableNameFormat |
プロパティ、トリガおよび外部キー名の最大長 | nameLength |
Fileman フィールド名に基づくフィールド名形式 | fieldNameFormat |
FileMan Date フィールドに使用するデータ型 | dateType |
FileMan DateTime フィールドに使用するデータ型 | datetimeType |
%FilemanData* データ型に STRICTDATA=1 を定義する | strictData |
ポインタの拡張 | expandPointers |
Set Of Codes フィールドの拡張 | xpandSetOfCodes |
変数ポインタ・フィールドの値を作成しますか? | variablePointerValueField |
Set Of Codes フィールドをデータ型として定義しますか? | setOfCodesEnum |
次のフィールド用の必須プロパティの定義 | requiredType |
拡張マッピング | extendedMapping |
IEN フィールドの名前 | ienFieldName |
クラスを保持 | retainClass |
反復 | recursion
0 は反復なし、1 は部分反復、2 は完全反復を意味します。 |
ワード・プロセッシング・フィールドの変換 | wpIsList |
読み取り専用 | readonly |
ログ・ファイル | logFile |
クラスのコンパイル | compile |
コンパイル・フラグ | compileQSpec |
削除フラグ | deleteQSpec |
結果の表示 | display
0 は表示なし、1 は最小表示、2 は完全表示を意味します。 |
既定の設定を変更するには、以下のようなコマンドを使用します。
Set ^%SYS("sql","fm2class",setting) = value
ここで、setting は前のテーブルに示した内部設定名で、value はそれに割り当てる値です。
%fm2class ルーチンを使用する場合、以下の形式の配列で渡すことができます。
arrayName(setting) = value
以下はその例です。
%fm("display")=1
%fm("package")="VISTA"
%fm("superClasses")="%XML.Adaptor"
%fm("wpIsList")= 1
プログラム的な FileMan ファイルのマッピング
前述のように、%fm2class ルーチンを直接呼び出すのではなく、以下のように %System.OBJ.FM2Class のメソッドを使用します。
-
現在のネームスペースのすべての 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.FM2Class では、Version() および GetVersion() メソッドも提供されています。
次の手順
変換ユーティリティを使用した後、生成されたクラスへの SQL アクセスが可能であることを確認する必要があります。そのためには、管理ポータルを使用します。少なくとも、以下の操作ができることを確認します。
-
スキーマの参照。
-
新しいクラスに対する SQL クエリの実行。
ネームスペースにグローバル・マッピングおよびルーチン・マッピングを作成することが必要になる場合もあります。生成されたクラスで使用されるルーチンを確認し、すべてのルーチンがこのネームスペースで使用可能であることを確認します。
メモ
このセクションでは、%fm2class ルーチンで Caché クラス定義を生成する際の留意事項について説明します。
基本
概略を理解するために、簡単な FileMan ファイルと結果として得られる Caché クラス定義を比較するとわかりやすくなります。
PostalCode という単純なファイルの例について考えてみます。(FileMan データ・ディクショナリ・ユーティリティを介して) このファイルのファイル属性を確認する場合、このファイルの相互参照およびインデックスを表示します。以下はその例です。
同じユーティリティで、このファイルのフィールドの定義も表示されます。この際のフィールドのタイトルは以下のとおりです (アルファベット順)。
-
City
-
City Abbrevation
-
City Key
-
County
-
Inactive Date
-
Mail Code
-
Preferred City Key
-
状態
-
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 ファイルのポインタ参照を表す次の外部キーが含まれます。
-
FKeyCOUNTY(COUNTY) は、次を参照します。TEST.COUNTYCODE()
-
FKeySTATE(STATE) は、次を参照します。TEST.STATE()
このセクションで後述する “可変ポインタ・フィールドのマッピング” のセクションも参照してください。
-
-
このクラスには、1 つのインデックスがあります。
Index IDKeyIndex On IEN
-
このクラスには、FileMan ファイラを使用してファイリングするときに実行する 3 つのトリガが含まれます。
-
BeforeDeleteFiling
-
BeforeInsertFiling
-
BeforeUpdateFiling
-
可変ポインタ・フィールドのマッピング
Caché クラスにマップされるファイル内の各可変ポインタ・フィールドは、そのクラス内の 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 テーブル/ファイル内の行をポイントするよう、SQL INSERT または UPDATE を使用して VP の値を更新するには、VP_Red の値をその行の ID に設定します。 |
VPWhite | VP_White | この行の VP フィールドが White ファイルをポイントしない限り NULL である計算フィールドです。White テーブル/ファイル内の行をポイントするよう、SQL INSERT または UPDATE を使用して VP の値を更新するには、VP_White の値をその行の ID に設定します。 |
VPBlue | VP_Blue | この行の VP フィールドが Blue ファイルをポイントしない限り NULL である計算フィールドです。Blue テーブル/ファイル内の行をポイントするよう、SQL INSERT または UPDATE を使用して VP の値を更新するには、VP_Blue の値をその行の ID に設定します。 |
いずれの場合も、VP フィールドは自動的に計算され格納されます。
3 つの参照フィールド (VP_Red、VP_White、および VP_Blue) の定義に加えて、これらを参照するために、3 つの外部キー制約が ABC クラスに作成されます。これは、ファイル間の参照整合性を確保するために実行されます。
新しい形式の相互参照のマッピング
このユーティリティは、新しい形式の相互参照が単純な set/kill ロジックで定義されている場合、これをインデックス・マップに変換します。これにより、Caché クエリ・オプティマイザは、新しい形式の相互参照インデックスが存在する場合はそれを選択し、場合によってはクエリのパフォーマンスを向上させることができます。
DUZ(9) を使用した相互参照のマッピング
2017.1 の時点で、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 クラスの詳細は、インターシステムズ・クラス・リファレンスを参照してください。
CSP に変換される WebLink Developer タグ
このセクションで記載されているタグは、CSP タグに置き換えられています。Weblink Developer から Caché Server Pages (CSP) へアプリケーションを移植する際に、ご利用ください。
各タグの詳細は、"Weblink Developer ガイドOpens in a new tab" を参照してください。
<WLD:A>...</WLD:A>
このルールは、WLD の action= 機能を実装します。
<WLD:ACTIONSCRIPT>...</WLD:ACTIONSCRIPT>
<CSP:METHOD> タグは、<SCRIPT LANGUAGE=CACHE METHOD> タグに代わりました。
属性 | 説明 | 値 |
---|---|---|
MethodName | 生成されたメソッド名。有効なメソッド名である必要があります。 | methodName: 文字列 |
ReturnType | メソッドの返りタイプ | dataType: 文字列 |
Arguments | メソッドに対する引数のリスト | spec: 文字列 |
<WLD:DHTMLGRID>...</WLD:DHTMLGRID>
このルールは、<WLD:DHTMLGRID> タグを実装します。
属性 | 説明 | 値 |
---|---|---|
Name | グリッド名 | 文字列 |
Cols | 最大列数 | 整数 |
Rows | 最大行数 | 整数 |
<WLD:END>
必須項目。このタグは、WLD 機能を使用するすべてのページの最後尾の、</BODY> タグの直前に記述します。
<WLD:ERROR>
<WLD:ERROR> タグは、Developer と同様に、警告として Error 変数を表示します。
<WLD:FOCUS>
<WLD:FOCUS> タグは、WebLink Developer と同様に、フィールドへのフォーカスを強制します。<WLD:END> タグ内で実行されます。
属性 | 説明 | 値 |
---|---|---|
FIELD | フォーカスするフィールド名 | 文字列 |
FORM | フィールドに含まれるフォーム番号 | 文字列 |
<WLD:GRID>...</WLD:GRID>
このルールは、標準 <WLD:GRID> タグを実装します。
属性 | 説明 | 値 |
---|---|---|
Name | グリッド名 | 文字列 |
Cols | 最大列数 | 整数 |
Rows | 最大行数 | 整数 |
<WLD:GRID>...<WLD:GRIDDATA>...</WLD:GRIDATA>
このルールは、DOM 内で <WLD:GRIDDATA> タグをインスタンス化するためのものです。
属性 | 説明 | 値 |
---|---|---|
Value | 表示される値 | 文字列 |
Col | 値が表示されるセルの列 | 整数 |
Row | 値が表示されるセルの行 | 整数 |
<WLD:GRID>...<WLD:GRIDHEADING>...</WLD:GRIDHEADING>
このルールは、DOM 内で <WLD:GRIDHEADING> タグをインスタンス化するためのものです。
属性 | 説明 | 値 |
---|---|---|
Name | 列名 | 文字列 |
Col | ヘッダ部を表示する列 | 整数 |
<LIST>...<WLD:OPTIONS>
<WLD:OPTIONS> タグは、LIST 配列からオプションを生成します。
<WLD:PostPageScript>...</WLD:PostPageScript>
このページの後に実行するスクリプトです。
<WLD:PrePageScript>...</WLD:PrePageScript>
このページの前に実行するスクリプトです。
<WLD:SHOWLV>
WLDSHOWLV は、すべての要求とセッション・オブジェクトのコンテンツを表示します。
<WLD:START>
必須項目。このタグは、WLD 機能を使用するすべてのページの開始部分に記述します。
<TEXTAREA>...<WLD:WRITETEXT>
WLD:WRITETEXT は、TEXTAREA 配列からテキストを生成します。
<XSQL:QUERY>...</XSQL:QUERY>
Oracle XSQL タグです。
属性 | 説明 | 値 |
---|---|---|
CONNECTION | 接続識別子 | 文字列 |
MAX-ROWS | 返り値の最大行数を指定 (SKIP-ROWS で飛ばされた行は含みません) | 文字列 |
ROW-ELEMENT | 各行に XML タグを指定。既定は ROW。 | 文字列 |
ROWSET-ELEMENT | 各行セットに XML タグを指定。既定は ROWSET。 | 文字列 |
SKIP-ROWS | データを返す前に、飛ばす行数を指定。 | 文字列 |
TAG-CASE | XML タグの書体を制御。"upper" は大文字、"lower" は小文字です。 既定では、列名の書体を使用します。 | 文字列 |
XMLNS:XSQL | CSP で Oracle の XSQL タグをサポートするには、URN:ORACLE-XSQL を指定します。 | 文字列 |
<INPUT TYPE=WLDCHECKBOX>
このルールは、WLD の CHECKBOX ボタン・インタフェースを模したメカニズムを実装します。
<INPUT SRC TYPE=WLDIMAGE>
このルールは、<input type=image> タグ内で WLD の NEXTPAGE= および ACTION= をサポートする機能を実装します。
属性 | 説明 | 値 |
---|---|---|
Action | 送信時に実行される関数または式。 | 関数または式 |
Name | イメージ名。 | 文字列。 |
NextPage | 次に表示するページを指定。 | URI |
OnClick | マウスがクリックされました | JavaScript コード |
<INPUT TYPE=WLDRADIO>
このルールは、WLD の RADIO ボタン・インタフェースを模したメカニズムを実装します。
属性 | 説明 | 値 |
---|---|---|
Name | ラジオ・ボタン名。 | 文字列。 |
Onclick | マウスがクリックされました | JavaScript コード |
Value | ラジオ・ボタンの値。 | 文字列。 |
<INPUT TYPE=WLDSUBMIT>
このルールは、<input type=submit> タグ内で WLD の NEXTPAGE= および ACTION= をサポートする機能を実装します。
属性 | 説明 | 値 |
---|---|---|
Action | 送信時に実行される関数または式。 | 関数または式 |
Name | フォーム名。 | 文字列。 |
NextPage | 次に表示するページを指定。 | URI |
Onclick | マウスがクリックされました | JavaScript コード |