BEA Logo BEA Tuxedo Release 8.0

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

 

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

 


FML 型レコード

FML インターフェイスは、C 言語で使用されるように設計されたものです。COBOL 言語に対しては、ルーチンが提供されています。そのため、受信した FML 型レコードを COBOL レコードに変換して処理した後で、FML 型に再度変換できます。

FML 型レコードを使用するには、次の手順に従います。

FML ルーチンは、フィールド化レコードから C 構造体への変換、またその逆の変換など、型付きレコードを操作する場合に使用します。これらの関数を使用すると、データ構造やデータの格納状態がわからなくても、データ値にアクセスしたり更新できます。FML ルーチンの詳細については、『BEA Tuxedo FML リファレンス』を参照してください。

FML 型レコードの環境変数の設定

アプリケーション・プログラムで FML 型レコードを使用するには、次の環境変数を設定する必要があります。

FML 型レコードの環境変数

環境変数

説明

FIELDTBLS または FIELDTBLS32

FML および FML32 型付きレコードのフィールド・テーブル・ファイル名のカンマ区切りのリスト。

FLDTBLDIR または FLDTBLDIR32

FML または FML32 型バッファのフィールド・テーブル・ファイルが検索されるディレクトリのコロン区切りのリスト。Microsoft Windows では、セミコロンで区切られます。

フィールド・テーブル・ファイルの作成

FML 型レコードや FML 依存型 VIEW を使用する場合は、常にフィールド・テーブル・ファイルが必要です。フィールド・テーブル・ファイルは、FML 型レコードのフィールドの論理名をそのフィールドを一意に識別する文字列にマッピングします。

FML フィールド・テーブルの各フィールドは、次の形式で定義します。

$ /* FML 構造体 */
*base value
name number type flags comments

次の表は、FML フィールド・テーブルに指定する必要がある FML フィールドを示しています。

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

フィールド

説明

*base value

後続のフィールド番号をオフセットするためのベース値。関連するフィールドのセットを簡単にグループ分けし、番号を付け直すことができるようになります。*base オプションを使用すると、フィールド番号を再利用できます。16 ビットのレコードの場合、ベース値とそれに関連する番号を加算した値が、100 以上 8191 未満でなければなりません。

注記 BEA Tuxedo システムでは、フィールド番号 1 〜 100 と 6,000 〜 7,000 は、内部使用のために予約されています。FML ではフィールド番号 101 〜 8,191、FML32 ではフィールド番号 101 〜 33、554、および 431 がアプリケーション定義のフィールド用に使用できます。

name

フィールドの識別子。この値は 30 文字以下の文字列で、英数字と下線文字だけを指定できます。

rel-number

フィールドの相対数値。現在のベース値が指定されている場合、この値は現在のベース値に加算されて、フィールド番号が計算されます。

type

フィールドのタイプ。指定できるのは、charstringshortlongfloatdouble、または carray です。

flag

将来使用するために予約されたフィールド。プレースホルダとしてダッシュ (-) を挿入します。

comment

コメント (省略可能)。

すべてのフィールドは省略可能です。また、複数個使用できます。

次のコード例は、FML 依存型 VIEWの例で使用されるフィールド・テーブル・ファイルを示しています。

FML VIEW のフィールド・テーブル・ファイル

# name       number    type     flags   comments
FLOAT1 110 float - -
DOUBLE1 111 double - -
LONG1 112 long - -
SHORT1 113 short - -
INT1 114 long - -
DEC1 115 string - -
CHAR1 116 char - -
STRING1 117 string - -
CARRAY1 118 carray - -

型付きレコードの初期化

FML 型レコードは、FINIT プロシージャを使用して初期化する必要があります。TPINIT プロシージャは、指定された FML レコード (できればワード境界に配置されているレコード) を使用し、FMLINFO レコードの FML-LENGTH フィールドに長さとして指定された値を使用します。

TPNOCHANGE が設定されている場合は、プログラムによって (作成されたのではなく) 受信された FML レコードが自動的に初期化されます。その場合、FINIT を呼び出す必要はありません。

次のコード例は、初期化の方法を示しています。

FML/VIEW 変換

WORKING-STORAGE SECTION.
* レコード・タイプおよび長さ
01 TPTYPE-REC.
COPY TPTYPE.
* 呼び出しの状態
01 TPSTATUS-REC.
COPY TPSTATUS.
* サービス呼び出しフラグ/レコード
01 TPSVCDEF-REC.
COPY TPSVCDEF.
* TPINIT フラグ/レコード
01 TPINFDEF-REC.
COPY TPINFDEF.
* FML 呼び出しフラグ/レコード
01 FML-REC.
COPY FMLINFO.
*
*
* アプリケーション FML レコード - 配置
01 MYFML.
05 FBFR-DTA OCCURS 100 TIMES PIC S9(9) USAGE IS COMP-5.
* アプリケーション VIEW レコード
01 MYVIEW.
COPY MYVIEW.
.....
* MYVIEW へのデータの移動
.....
* FML レコードの初期化
MOVE LENGTH OF MYFML TO FML-LENGTH.
CALL "FINIT" USING MYFML FML-REC.
IF NOT FOK
MOVE "FINIT Failed" TO LOGMSG-TEXT
PERFORM DO-USERLOG
PERFORM EXIT-PROGRAM
END-IF.
* VIEW の FML レコードへの変換
SET FUPDATE TO TRUE.
MOVE "MYVIEW" TO VIEWNAME.
CALL "FVSTOF" USING MYFML MYVIEW FML-REC.
IF NOT FOK
MOVE "FVSTOF Failed" TO LOGMSG-TEXT
PERFORM DO-USERLOG
PERFORM EXIT-PROGRAM
END-IF.
* FML レコードを使用したサービスの呼び出し
MOVE "FML" TO REC-TYPE IN TPTYPE-REC.
MOVE SPACES TO SUB-TYPE IN TPTYPE-REC.
MOVE LENGTH OF MYFML TO LEN.
CALL "TPCALL" USING TPSVCDEF-REC
TPTYPE-REC
MYFML
TPTYPE-REC
MYFML
  TPSTATUS-REC.
IF NOT TPOK
MOVE "TPCALL MYFML Failed" TO LOGMSG-TEXT
PERFORM DO-USERLOG
PERFORM EXIT-PROGRAM
END-IF.
* FML レコードの MYVIEW への再変換
CALL "FVFTOS" USING MYFML MYVIEW FML-REC.
IF NOT FOK
MOVE "FVFTOS Failed" TO LOGMSG-TEXT
PERFORM DO-USERLOG
PERFORM EXIT-PROGRAM
END-IF.

このコード例では、FVSTOF プロシージャで FML レコードを VIEW レコードに変換しています。VIEW を定義するために、VIEW コンパイラによって生成された copy ファイルが読み込まれています。FML-REC レコードには VIEWNAMEFML-MODE 転送モードがあり、転送モードには FUPDATEFOJOINFJOIN、または FCONCAT を設定できます。これらのモードで行われる処理は、Fupdate、Fupdate32(3fml)Fojoin、Fojoin32(3fml)Fjoin、Fjoin32(3fml)Fconcat、Fconcat32(3fml) での処理と同じです。

FVFTOS プロシージャは、VIEW レコードを FML レコードに変換しています。パラメータは FVSTOF プロシージャのパラメータと同じですが、FML-MODE を設定する必要はありません。各フィールドは、VIEW のエレメントの記述に基づいて、フィールド化レコードから構造体にコピーされます。フィールド化レコードのフィールドに対応するエレメントが COBOL レコードに存在しない場合、そのフィールドは無視されます。COBOL レコードに指定されたエレメントに対応するフィールドがフィールド化レコードに存在しない場合、そのエレメントに NULL 値がコピーされます。使用する NULL 値は、エレメントごとに VIEW 記述ファイルに定義できます。

フィールドの複数のオカレンスを COBOL レコードに格納するには、レコード・エレメントを OCCURS で定義します。レコードのフィールドのオカレンス数がエレメントのオカレンス数より少ない場合は、余分なエレメントには NULL 値が割り当てられます。また、レコードのフィールドのオカレンス数がエレメントのオカレンス数より多い場合は、余分なオカレンスは無視されます。

FML32 および VIEW32 では、FINIT32FVSTOF32、および FVFTOS32 プロシージャを使用する必要があります。

正常終了した場合は、FML-STATUSFOK が設定されます。エラーが発生した場合は、FML-STATUS に 0 以外の値が設定されます。

FML ヘッダ・ファイルの作成

クライアント・プログラムやサービス・サブルーチンで FML 型レコードを使用するには、FML ヘッダ・ファイルを作成し、アプリケーションの #include 文にそのヘッダ・ファイルを指定する必要があります。

フィールド・テーブル・ファイルから FML ヘッダ・ファイルを作成するには、mkfldhdr(1) コマンドを使用します。たとえば、myview.flds.h というファイルを作成するには、次のコマンドを入力します。

mkfldhdr myview.flds

FML32 型レコードの場合は、mkfldhdr32 コマンドを使用します。

次のコード例は、mkfldhdr コマンドによって作成される myview.flds.h ヘッダ・ファイルを示しています。

myview.flds.h ヘッダ・ファイル

/*       fname    fldid            */
/* ----- ----- */

#define FLOAT1 ((FLDID)24686) /* 番号:110 タイプ:float */
#define DOUBLE1 ((FLDID)32879) /* 番号:111 タイプ:double */
#define LONG1 ((FLDID)8304) /* 番号:112 タイプ:long */
#define SHORT1 ((FLDID)113) /* 番号:113 タイプ:short */
#define INT1 ((FLDID)8306) /* 番号:114 タイプ:long */
#define DEC1 ((FLDID)41075) /* 番号:115 タイプ:string */
#define CHAR1 ((FLDID)16500) /* 番号:116 タイプ:char */
#define STRING1 ((FLDID)41077) /* 番号:117 タイプ:string */
#define CARRAY1 ((FLDID)49270) /* 番号:118 タイプ:carray */

アプリケーションの #include 文に新しいヘッダ・ファイルを指定します。ヘッダ・ファイルがインクルードされると、シンボリック名でフィールドを参照できるようになります。

関連項目

 

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