![]() |
![]() |
|
|
VIEWS の使用例
この節で示す VIEWS の使用例は、この章の後半にある FML プログラムの使用例とは無関係です。
VIEW ファイルの例
以下は、ソース VIEW 記述 custdb を含む VIEW ファイルの例です。
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 のコンパイルに必要なフィールド・テーブルの例です。
フィールド・テーブルの例
# 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 ファイルを使用しています。
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 に対する入力として、前の例のフィールド定義を格納したフィールド・テーブル・ファイルを使用しています。
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 です。
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 プログラムのコンパイル方法については、『ファイル形式、データ記述方法、MIB、およびシステム・プロセスのリファレンス』の compilation(5) リファレンス・ページを参照してください。
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 バッファからのフィールドを示します。
関連項目
![]() |
![]() |
![]() |
|
Copyright © 2001 BEA Systems, Inc. All rights reserved.
|