![]() |
![]() |
|
|
FML 型レコード
FML インターフェイスは、C 言語で使用されるように設計されたものです。COBOL 言語に対しては、ルーチンが提供されています。そのため、受信した FML 型レコードを COBOL レコードに変換して処理した後で、FML 型に再度変換できます。
FML 型レコードを使用するには、次の手順に従います。
FML ルーチンは、フィールド化レコードから C 構造体への変換、またその逆の変換など、型付きレコードを操作する場合に使用します。これらの関数を使用すると、データ構造やデータの格納状態がわからなくても、データ値にアクセスしたり更新できます。FML ルーチンの詳細については、『BEA Tuxedo FML リファレンス』を参照してください。
FML 型レコードの環境変数の設定
アプリケーション・プログラムで FML 型レコードを使用するには、次の環境変数を設定する必要があります。
FML 型レコードの環境変数
フィールド・テーブル・ファイルの作成 FML 型レコードや FML 依存型 VIEW を使用する場合は、常にフィールド・テーブル・ファイルが必要です。フィールド・テーブル・ファイルは、FML 型レコードのフィールドの論理名をそのフィールドを一意に識別する文字列にマッピングします。 FML フィールド・テーブルの各フィールドは、次の形式で定義します。 次の表は、FML フィールド・テーブルに指定する必要がある FML フィールドを示しています。 フィールド・テーブル・ファイルのフィールド
$ /* FML 構造体 */
*base value
name number type flags comments
すべてのフィールドは省略可能です。また、複数個使用できます。 次のコード例は、FML 依存型 VIEWの例で使用されるフィールド・テーブル・ファイルを示しています。 FML VIEW のフィールド・テーブル・ファイル 型付きレコードの初期化 FML 型レコードは、FINIT プロシージャを使用して初期化する必要があります。TPINIT プロシージャは、指定された FML レコード (できればワード境界に配置されているレコード) を使用し、FMLINFO レコードの FML-LENGTH フィールドに長さとして指定された値を使用します。 TPNOCHANGE が設定されている場合は、プログラムによって (作成されたのではなく) 受信された FML レコードが自動的に初期化されます。その場合、FINIT を呼び出す必要はありません。 次のコード例は、初期化の方法を示しています。 FML/VIEW 変換 このコード例では、FVSTOF プロシージャで FML レコードを VIEW レコードに変換しています。VIEW を定義するために、VIEW コンパイラによって生成された copy ファイルが読み込まれています。FML-REC レコードには VIEWNAME と FML-MODE 転送モードがあり、転送モードには FUPDATE、FOJOIN、FJOIN、または 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 では、FINIT32、FVSTOF32、および FVFTOS32 プロシージャを使用する必要があります。 正常終了した場合は、FML-STATUS に FOK が設定されます。エラーが発生した場合は、FML-STATUS に 0 以外の値が設定されます。 FML ヘッダ・ファイルの作成 クライアント・プログラムやサービス・サブルーチンで FML 型レコードを使用するには、FML ヘッダ・ファイルを作成し、アプリケーションの #include 文にそのヘッダ・ファイルを指定する必要があります。 フィールド・テーブル・ファイルから FML ヘッダ・ファイルを作成するには、mkfldhdr(1) コマンドを使用します。たとえば、myview.flds.h というファイルを作成するには、次のコマンドを入力します。 FML32 型レコードの場合は、mkfldhdr32 コマンドを使用します。 次のコード例は、mkfldhdr コマンドによって作成される myview.flds.h ヘッダ・ファイルを示しています。 myview.flds.h ヘッダ・ファイル アプリケーションの #include 文に新しいヘッダ・ファイルを指定します。ヘッダ・ファイルがインクルードされると、シンボリック名でフィールドを参照できるようになります。 関連項目# 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 - -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.mkfldhdr myview.flds
/* 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 */
![]() |
![]() |
![]() |
|
Copyright © 2001 BEA Systems, Inc. All rights reserved.
|