bea ホーム | 製品 | dev2dev | support | askBEA
BEA Logo Tuxedo
 ドキュメントのダウンロード   サイトマップ   用語集 
検索
0

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

 Previous Next Contents View as PDF  

FML および VIEWS の例

ここでは、次の内容について説明します。

 


VIEWS の使用例

この節で示す VIEWS の使用例は、この章の後半にある FML プログラムの使用例とは無関係です。

VIEW ファイルの例

以下は、ソース VIEW 記述 custdb を含む VIEW ファイルの例です。

コード リスト 6-1 VIEW ファイルの例

# BEGINNING OF VIEWFILE
VIEW custdb
# /* コメント行です。 */
# /* これもコメント行です。 */
#TYPE CNAME FBNAME COUNT FLAG SIZE NULL
carray bug BUG_CURS 4 - 12 "no bugs"
long custid CUSTID 2 - - -1
short super SUPER_NUM 1 - - 999
long youid ID 1 - - -1
float tape TAPE_SENT 1 - - -.001
char ch CHR 1 - - "0"
string action ACTION 4 - 20 "no action"
END
#END OF VIEWFILE

フィールド・テーブルの例

以下は、前の節で示した VIEW のコンパイルに必要なフィールド・テーブルの例です。

コード リスト 6-2 フィールド・テーブルの例

# name          number  type    flags   comments
CUSTID 2048 long - -
VERSION_RUN 2055 string - -
ID 2056 long - -
CHR 2057 char - -
TAPE_SENT 2058 float - -
SUPER_NUM 2066 short - -
ACTION 2074 string - -
BUG_CURS 2085 carray - -

viewc によって生成されるヘッダ・ファイルの例

以下は、VIEW コンパイラによって生成されたヘッダ・ファイルです。viewc に対する入力として、前の節の VIEW ファイルを使用しています。

コード リスト 6-3 viewc によって生成されるヘッダ・ファイルの例

struct custdb {
char bug[4][12]; /* null="no bugs" */
long custid[2]; /* null=-1 */
short super; /* null=999 */
long youid; /* null=-1 */
float tape; /* null=-0.001000 */
char ch; /* null="0" */
char action[4][20]; /* null="no action" */
};

mkfldhdr によって生成されるヘッダ・ファイルの例

以下は、mkfldhdr によってフィールド・テーブル・ファイルから生成されたヘッダ・ファイルです。mkfldhdr に対する入力として、前の例のフィールド定義を格納したフィールド・テーブル・ファイルを使用しています。

コード リスト 6-4 mkfldhdr(1) によって生成されるヘッダ・ファイルの例

/* mkfldhdr を使ってフィールド・テーブルから生成された custdb.flds.h      */
/* fname fldid */
/* ----- ----- */
#define ACTION ((FLDID)43034) /* number:2074 type: string */
#define BUG_CURS ((FLDID)51237) /* number:2085 type: carray */
#define CUSTID ((FLDID)10240) /* number:2048 type: long */
#define SUPER_NUM ((FLDID)2066) /* number:2066 type: short */
#define TAPE_SENT ((FLDID)26634) /* number:2058 type: float */
#define VERSION_RUN ((FLDID)43015) /* number:2055 type: string */
#define ID ((FLDID)10248) /* number:2056 type: long */
#define CHR ((FLDID)18441) /* number:2057 type:char */

COBOL COPY ファイルの例

以下は、viewc-C コマンド行オプションを指定して作成された COBOL COPY ファイル、CUSTDB.cbl です。

コード リスト 6-5 COBOL COPY ファイルの例

*       VIEWFILE: "t.v"
* VIEWNAME: "custdb"
05 BUG OCCURS 4 TIMES PIC X(12).
* NULL="no bugs"
05 CUSTID OCCURS 2 TIMES PIC S9(9) USAGE IS COMP-5.
* NULL=-1
05 SUPER PIC S9(4) USAGE IS COMP-5.
* NULL=999
05 FILLER PIC X(02).
05 YOUID PIC S9(9) USAGE IS COMP-5.
* NULL=-1
05 TAPE USAGE IS COMP-1.
* NULL=-0.001000
05 CH PIC X(01).
* NULL='0'
05 ACTION OCCURS 4 TIMES PIC X(20).
* NULL="no action"
05 FILLER PIC X(03).

viewc -C を使用して作成した COBOL COPY ファイルを含む COBOL プログラムの例については、『COBOL を使用した BEA Tuxedo アプリケーションのプログラミング』を参照してください。

VIEWS プログラムの例

以下は、VIEW を使用して構造体とフィールド化バッファをマッピングするプログラムの例です。このプログラムが正しく動作するには、FML および VIEWS の環境設定で説明した環境変数を正しく設定する必要があります。

FML プログラムのコンパイル方法については、『BEA Tuxedo のファイル形式とデータ記述方法』の compilation(5) リファレンス・ページを参照してください。

コード リスト 6-6 VIEWS プログラムの例

/* VIEW プログラムの例 */
#include stdio.h>
#include "fml.h"
#include "custdb.flds.h" /* 「viewc によって生成されるヘッダ・ファイル */
/* の例」のフィールド・ヘッダ・ファイル */
#include "custdb.h" /* 「フィールド・テーブルの例」の viewc で */
/* 作成された C 構造体ヘッダ・ファイル */
#define NF 800
#define NV 400
extern Ferror;
main()
{
/* 必要なプログラム変数と FML 関数の宣言 */
FBFR *fbfr,*Falloc();
void F_error();
char *str, *cstruct, buff[100];
struct custdb cust;

/* フィールド化バッファの割り当て */
if ((fbfr = Falloc(NF,NV)) == NULL) {
F_error("sample.program");
exit(1);
}

/* buff を指すように str ポインタを初期化し、 */
/* 文字列を buff にコピーし、 */
/* fbfr バッファのいくつかのフィールドに値を Fadd で追加 */

str = &buff;
strcpy(str,"13579");
if (Fadd(fbfr,ACTION,str,(FLDLEN)6) < 0)
F_error("Fadd");
strcpy(str,"act11");
if (Fadd(fbfr,ACTION,str,(FLDLEN)6) < 0)
F_error("Fadd");
strcpy(str,"This is a one test.");
if (Fadd(fbfr,BUG_CURS,str,(FLDLEN)19) < 0)
F_error("Fadd");
strcpy(str,"This is a two test.");
if (Fadd(fbfr,BUG_CURS,str,(FLDLEN)19) < 0)
F_error("Fadd");
strcpy(str,"This is a three test.");
if (Fadd(fbfr,BUG_CURS,str,(FLDLEN)21) < 0)
F_error("Fadd");

/* fbfr の現在の内容を出力 */

printf("fielded buffer before:\n"); Fprint(fbfr);

/* C 構造体に値を代入 */

cust.tape = 12345;
cust.super = 999;
cust.youid = 80;
cust.custid[0] = -1; cust.custid[1] = 75;
str = cust.bug[0][0];
strncpy(str,"no bugs12345",12);
str = cust.bug[1][0];
strncpy(str,"yesbugs01234",12);
str = cust.bug[2][0];
strncpy(str,"no bugsights",12);
str = cust.bug[3][0];
strncpy(str,"no bugsysabc",12);
str = cust.action[0][0];
strcpy(str,"yesaction");
str = cust.action[1][0];
strcpy(str,"no action");
str = cust.action[2][0];
    strcpy(str,"222action");
str = cust.action[3][0];
strcpy(str,"no action");
cust.ch = '0';
cstruct = (char *)&cust;

/* custdb VIEW 記述を使用して、 */
/* C 構造体の値で fbfr バッファを更新*/

if (Fvstof(fbfr,cstruct,FUPDATE,"custdb") < 0) {
F_error("custdb");
Ffree(fbfr);
exit(1);
}

/* 次のコードがデータを */
/* fbfr から cstruct に移す */
/*
if (Fvftos(fbfr,cstruct,"custdb") < 0) {
F_error("custdb");
Ffree(fbfr);
exit(1);
} */

/* C 構造体と */
/* fbfr バッファの値を出力 */

printf("cstruct contains:\en");
printf("action=:%s:\n",cust.action[0][0]);
printf("action=:%s:\n",cust.action[1][0]);
printf("action=:%s:\n",cust.action[2][0]);
printf("action=:%s:\n",cust.action[3][0]);
printf("custid=%ld\n",cust.custid[0]);
printf("custid=%ld\n",cust.custid[1]);
printf("youid=%ld\n",cust.youid);
printf("tape=%f\n",cust.tape);
printf("super=%d\n",cust.super);
printf("bug=:%.12s:\n",cust.bug[0][0]);
printf("bug=:%.12s:\n",cust.bug[1][0]);
printf("bug=:%.12s:\n",cust.bug[2][0]);
printf("bug=:%.12s:\en",cust.bug[3][0]);
printf("ch=:%c:\n\n",cust.ch);

printf("fielded buffer after:\n");
Fprint(fbfr);
Ffree(fbfr);
exit(0);

}

bankapp での VIEWS の使用例

bankapp は、BEA Tuxedo システムに同梱されるサンプル・アプリケーションです。このアプリケーション・プログラムには、VIEWS 構造を使用した 2 つのファイルが組み込まれています。サンプル内の構造体は、FML バッファにマッピングされない構造体なので、構造体メンバへのデータの入出力に FML 関数は使用されていません。

$TUXDIR/apps/bankapp/audit.c は、コマンド行オプションを使って、型付きバッファ VIEW にサービス要求を設定する方法を決定するクライアント・プログラムです。

サーバ $TUXDIR/apps/bankapp/BAL.ec のコードは、サービス要求を受け付け、ESQL 文の公式化に使用される VIEW バッファからのフィールドを示します。

関連項目

 


bankapp での FML の使用例

bankapp は、BEA Tuxedo システムに同梱されるサンプル・アプリケーションです。

ACCT.ec
BTADD.ec
TLR.ec

上記のサーバでは、FML 型付きバッファ (bankapp クライアントである bankclt からサーバに渡される) のデータを操作するための FML 関数が使用されています。

これらのサーバでは、FML 関数の Falloc、Falloc32(3fml) および Frealloc、Frealloc32(3fml) の代わりに、ATMI 関数の tpalloc(3c) および tprealloc(3c) を使用してメッセージ・バッファを割り当てます。

 

Back to Top Previous Next
Contact e-docsContact BEAwebmasterprivacy