BEA Logo BEA Tuxedo Release 8.0

  BEA ホーム  |  イベント  |  ソリューション  |  パートナ  |  製品  |  サービス  |  ダウンロード  |  ディベロッパ・センタ  |  WebSUPPORT

 

   Tuxedo ホーム   |   FML を使用した BEA Tuxedo アプリケーションのプログラミング   |   先頭へ   |   前へ   |   次へ   |   目次

 


フィールド名から識別子へのマッピング

BEA Tuxedo システムでは、フィールドは通常、フィールド識別子 (fldid) の整数によって参照されます。フィールド識別子の詳細については、「フィールド名とフィールド識別子を定義する」を参照してください。このため、変更の可能性があるフィールド名を使用しないで、プログラム内でフィールドを参照できます。

識別子をフィールド名に割り当てる (マッピングする) には、次のいずれかの方法を使用します。

通常のアプリケーション・プログラムでは、上記の方法のどちらか、または両方を使用して、フィールド識別子をフィールド名にマッピングできます。

FML でフィールド化レコード内のデータにアクセスするには、FML でフィールド名と識別子のマッピング情報にアクセスできなければなりません。FML は、以下の方法のいずれかを使用してこのマッピング情報を取得します。

フィールド名と識別子のマッピングは、COBOL では使用できません。

実行時:フィールド・テーブル・ファイル

フィールド・テーブル・ファイルを使用すると、実行時に FML プログラムでフィールド名と識別子のマッピング情報を使用できます。一方、フィールド名と識別子のマッピング・テーブルのファイルの位置を FML に指示する 2 つの環境変数の設定は、プログラマの役割です。

環境変数 FLDTBLDIR には、フィールド・テーブルの検索用ディレクトリのリストを指定し、FIELDTBLS 環境変数には、それらのテーブル・ディレクトリから検索すべきファイルのリストを指定します。対応する FML32 の環境変数は、FLDTBLDIR32 および FIELDTBLS32 です。

アプリケーション・プログラム内では、FML 関数である Fldid() により、フィールド名からフィールド識別子への変換が実行時に行われます。フィールド識別子をフィールド名に変換する処理は、Fname() によって行われます (Fldid(3fml) および Fname(3fml) を参照してください。FML32 については Fldid32 および Fname32 を参照してください)。これらの 2 つの関数のうち、最初に呼び出された関数によってメモリ内の領域がフィールド・テーブル用に動的に割り当てられ、フィールド・テーブルがプロセスのアドレス領域にロードされます。フィールド・テーブルが不要になると、領域を回復できます。詳細については、「フィールド・テーブルをロードする」を参照してください。

アプリケーション内でフィールド名と識別子のマッピングの変更が予測される場合は、この方法を使用します。詳細については、「フィールドの定義と使用」を参照してください。

コンパイル時:ヘッダ・ファイル

mkfldhdr() (または mkfldhdr32()) を使用すると、フィールド・テーブル・ファイルからヘッダ・ファイルを作成できます。これらのヘッダ・ファイルは、C プログラムの #include に組み込まれており、フィールド名とフィールド識別子のマッピングを行います。mkfldhdr、mkfldhdr32(1) の詳細については、『BEA Tuxedo コマンド・リファレンス』を参照してください。

C プリプロセッサは、コンパイル時にフィールド・ヘッダ・ファイルを使用して、すべてのフィールド名の参照をフィールド識別子に変換します。したがって、前の節で説明したように、フィールド・テーブル・ファイルを使用して Fldid() 関数や Fname() 関数を呼び出す必要はありません。

プログラムで必要なフィールド名が常にわかる場合は、フィールド・テーブルのヘッダ・ファイルを #include でプログラムに組み込むと、データ領域を節約できます。データ領域を節約すると、プログラムではすばやく目的のタスクを実行できます。

ただし、この方法はコンパイル時にマッピングを解決するため、アプリケーション内でフィールド名とフィールド識別子のマッピングに変更が生じる可能性がある場合は使用しないでください。詳細については、「フィールドの定義と使用」を参照してください。

 

先頭へ戻る 前のトピックへ 次のトピックへ