BEA Logo BEA Tuxedo Release 8.0

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

 

   Tuxedoホーム   |   ファイル形式、データ記述方法、MIB、およびシステム・プロセスのリファレンス   |   先頭へ   |   前へ   |   次へ   |   目次

 


field_tables(5)

名前

field_tables-フィールド名に対する FML マッピング・ファイル

機能説明

フィールド操作言語 FML の関数は、フィールド化バッファのインプリメントと管理を行います。フィールド化バッファの各フィールドには、short 整数のタグを付けます。可変長フィールド (文字列など) には、長さを示す修飾子を付けます。このように、フィールド化バッファは、数値識別子/データの組み合わせ、または数値識別子/長さ/データの組み合わせから構成されることになります。

フィールドの数値識別子をそのフィールドのフィールド識別子といい、FLDID によりそのタイプを定義します。フィールドの名前は、フィールド・テーブルの FLDID と英数字文字列 (名前) を組み合わせて指定します。

従来の FML インターフェイスは 16 ビットのフィールド識別子、フィールド長、およびバッファ・サイズをサポートします。新しい 32 ビット・インターフェイスである FML32 は、より大きい識別子、フィールドの長さ、およびバッファ・サイズをサポートします。すべてのタイプ、関数名などに、接尾辞として "32" (たとえば、フィールド識別子タイプ定義は FLDID32 です) を付けます。

フィールド識別子

FML の関数では、フィールド値のタイプを決めることができます。現在、次のタイプがサポートされています。charstringshortlongfloatdoublecarray (文字配列)、ptr (バッファへのポインタ)、FML32 (埋め込み型の FML32 バッファ)、および VIEW32 (埋め込み型の VIEW32 バッファ)。ptrFML32、および VIEW32 型は、FML32 インターフェイスでのみサポートされています。各種のフィールド・タイプの定数は fml.h (FML32 では fml32.h) に定義されています。フィールド化バッファは完全な自己記述型であるため、フィールドのタイプは、FLDID でエンコードすることによりフィールドと共に渡されます。このため、FLDID は、フィールド・タイプとフィールド番号という 2 つの要素から構成されます。フィールド番号は、100 よりも大きくなければなりません。これは、1 から 100 までの番号はシステムが使用するために予約されているからです。

フィールド・マッピング

効率を考えると、コンパイル時にフィールド名からフィールド識別子への変換が行われることが望まれます。また、便利さを考えれば、この変換が実行時に行われるとよいでしょう。この双方の目的を満たすために、FML は、テキスト・ファイルにフィールド・テーブルを保持させ、また、対応する C ヘッダ・ファイルを生成するコマンドを提供しています。このため、コンパイル時のマッピングは、C プリプロセッサ cpp により通常の #define マクロを介して行われ、実行時マッピングは関数 Fldid() (FML32 では Fldid32()) により行われます。この関数は、ソース・フィールド・テーブル・ファイルを参照して、その引数 (フィールド名) をフィールド識別子にマップするものです。

フィールド・テーブル・ファイル

フィールド・テーブルを格納しているファイルの形式は以下の通りです。

エントリは空白類 (タブとスペースを任意に組み合わせたもの) で区切ります。

フィールド・テーブルからヘッダ・ファイルへの変換

コマンド mkfldhdr (または mkfldhdr32) は、上述したように、フィールド・テーブルを C コンパイラで処理できるようなファイルに変換します。生成されたヘッダ・ファイルの各行の形式は次のようになります。

#define  name  fldid

ここで、name は、フィールドの名前で、fldid はそのフィールド識別子です。このフィールド識別子は、前述したように、フィールド・タイプとフィールド番号から構成されています。フィールド番号は、ベース値に相対番号を加えた絶対番号です。このようにして、C プログラムに組み込むことができるファイルが生成されます。

環境変数

フィールド・テーブルにアクセスする Fldid() などの関数と、それらを使用する mkfldhdr() および vuform() などのコマンドを使用する場合、メモリ内のフィールド・テーブルを作成するために、シェル変数 FLDTBLDIRFIELDTBLS (FML32 では FLDTBLDIR32FIELDTBLS32) にそれぞれ、ソース・ディレクトリとソース・ファイルを指定しておく必要があります。FIELDTBLS は、フィールド・テーブル・ファイル名の、カンマで区切られたリストを指定します。FIELDTBLS に値がない場合は、フィールド・テーブル・ファイルの名前として fld.tbl が使用されます。FLDTBLDIR 環境変数は、コロンで区切られたディレクトリのリストであり、この中から名前が絶対パス名でないフィールド・テーブルが検索されます。(フィールド・テーブルの検索は、PATH 変数を使用する実行可能コマンドの検索とほぼ同じです)。FLDTBLDIR が定義されていない場合は、カレント・ディレクトリであるとみなされます。したがって、FIELDTBLSFLDTBLDIR が設定されていない場合は、省略時設定としてカレント・ディレクトリから fld.tbl がとられます。

フィールドをグループ ( アプリケーションによってのみ使用されるデータベースのフィールドのグループなど) に分けるには、複数のフィールド・テーブルを使用すると便利です。ただし、フィールド・テーブルは C ヘッダ・ファイルに変換される可能性があり (mkfldhdr コマンドによって)、同一のフィールド名があるとコンパイラ名の矛盾を示す警告が出されるため、一般にフィールド名は、フィールド・テーブル全体に渡って一意であるようにします。また、関数 Fldid は、名前を FLDID にマップしますが、その際、複数のテーブルを検索します。最初に一致するものが見つかった時点で検索は終了します。

使用例

ベース値が 500 から 700 に移る場合の、フィールド・テーブルの例を以下に示します。

# employee ID fields are based at 500 
*base 500

#name rel-numb type comment
#---- -------- ---- -------
EMPNAM 1 string emp's name
EMPID 2 long emp's id
EMPJOB 3 char job type:D,M,F or T
SRVCDAY 4 carray service date

# address fields are based at 700

*base 700

EMPADDR 1 string street address
EMPCITY 2 string city
EMPSTATE 3 string state
EMPZIP 4 long zip code

関連するヘッダ・ファイルは次のようになります。

#define EMPADDR  ((FLDID)41661) /* number:701  type:string */ 
#define EMPCITY ((FLDID)41662) /* number:702 type:string */
#define EMPID ((FLDID)8694) /* number:502 type:long */
#define EMPJOB ((FLDID)16887) /* number:503 type:char */
#define EMPNAM ((FLDID)41461) /* number:501 type:string */
#define EMPSTATE ((FLDID)41663) /* number:703 type:string */
#define EMPZIP ((FLDID)8896) /* number:704 type:long */
#define SRVCDAY ((FLDID)49656) /* number:504 type:carray */

関連項目

mkfldhdr、mkfldhdr32(1)

『FML を使用した BEA Tuxedo アプリケーションのプログラミング』

 

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