画面・帳票サポートシステム XMAP3 プログラミングガイド


10.3.1 ソースプログラムの記述

C言語でAPを作成する場合,C言語からは関数の呼び出しによってXMAP3 Web実行環境ライブラリを呼び出します。

〈この項の構成〉

(1) jsvwwlibライブラリの呼び出し

関数呼び出しによる,XMAP3 Web実行環境ライブラリの呼び出し形式を次に示します。

long APIENTRY jsvwwlib(XMAP_WCOMアドレス,
                       XMAP_WREQアドレス,
                       パラメタ3,
                       パラメタ4,
                       パラメタ5);

(2) jsvwwlibライブラリで使用するインタフェース領域

(a) XMAP-WCOM

XMAP-WCOMには,共通インタフェース領域を指定します。指定形式の詳細を次の表に示します。

表10‒9 XMAP-WCOMに指定する共通インタフェース領域

データ項目名

長さ

データ形式

データ名

指定内容

アイキャッチャ

4

char[4]

xmap_wcom_id

'*WEB'

リターン値1

2(4)

unsigned short

xmap_wcom_rtn

リターン値は2進形式で返されます。

リターン値2

2(6)

unsigned short

xmap_wcom_rsn

未使用

3(8)

char[3]

xmap_wcom_rsv1

(00)16

id区分

1(11)

char

xmap_wcom_itype

'I'

仮想端末名

8(12)

char[8]

xmap_wcom_tname

  • 画面の場合:すべて空白

  • 帳票の場合:仮想端末名※1

未使用

4(20)

char[4]

xmap_wcom_rsv2

(00)16

通信種別

4(24)

char[4]

xmap_wcom_msg

画面の場合,'BWS

帳票の場合,'OWS△'

未使用

44(28)

char[44]

xmap_wcom_rsv3

(00)16

マップ名

8(72)

char[8]

xmap_wcom_mapname

デバイスID※3付きの物理マップ名を左詰めで指定し,残りは空白を指定する

未使用

8(80)

char[8]

xmap_wcom_rsv4

(00)16

論理マップ長

4(88)

long

xmap_wcom_lsglng

入出力論理マップ長または0※2

未使用

260(92)

char[260]

xmap_wcom_rsv5

(00)16

注※1

帳票の場合は,出力先となる仮想端末名を左詰めで指定し,残りは空白を指定します。

注※2

画面の場合:

・出力データの設定を要求する場合は,出力論理マップ長を指定します。

・入力データの取得を要求する場合は,入力論理マップ長を指定します。

帳票の場合:

・出力データの設定を要求する場合は,出力論理マップ長を指定します。

・入力データの取得を要求する場合は,0を指定します。

注※3

画面のデバイスIDについては,「11.1.1(1) 通信記述項」を,帳票のデバイスIDについては「11.2.1(1) 通信記述項」を参照してください。

(b) XMAP-WREQ

XMAP-WREQには,要求インタフェース領域を指定します。指定形式の詳細を次の表に示します。

表10‒10 XMAP-WREQに指定する要求インタフェース領域

データ項目名

長さ

データ形式

データ名

指定内容

要求種別

4

char[4]

xmap_wreq_type

要求別に指定する※1

オプション1

1(4)

char

xmap_wreq_opt1

'F'

オプション2

1(5)

char

xmap_wreq_opt2

'1'

未使用

2(6)

char[2]

xmap_wreq_rsv1

空白

オプション3

1(8)

char

xmap_wreq_opt3

  • 画面の場合:空白

  • 帳票の場合:'1'または'2'※2

オプション4

1(9)

char

xmap_wreq_opt4

'△':画面入出力/帳票出力を応答する

'E':ブラウザ側のXMAP3業務の終了を応答する

未使用

6(10)

char[6]

xmap_wreq_rsv2

空白

注※1

要求動作に応じて次の値を指定します。

要求動作

指定する値

XMAP3 Web実行環境ライブラリのオープン要求

'OPEN'

XMAP3 Web実行環境ライブラリのクローズ要求

'CLOS'

出力データの設定要求

'SEND'

入力データの取得要求

'RECV'

オプションの設定要求

'MDO△'(△は半角空白を表す)

注※2

帳票の場合の指定値と内容を次に示します。

指定値

内容

'1'

プリンタスプールに帳票を出力後,その印刷ドキュメントを完了(クローズ)する。通常は'1'を指定する。

'2'

プリンタスプールに登録されている,印刷ドキュメント中の1ページとして帳票を出力する。

印刷ドキュメントは完了(クローズ)しないで継続する。

帳票印刷セットアップでスプール書き出し単位を「1ページ毎」にした場合は,この指定は無効となり常に'1'(ドキュメントを完了(クローズ)する)となります。

(c) パラメタ3

XMAP3 Web実行環境ライブラリのオープン要求時にオープンインタフェース領域を指定します。パラメタ3に指定する詳細を次の表に示します。

表10‒11 パラメタ3に指定するオープンインタフェース領域

データ項目名

長さ

データ形式

データ名

指定内容

サーバ環境定義ファイル名

8

char[8]

xmap_wopn_srvname

サーバ環境定義ファイル名を左詰めで指定し,残りは空白を指定

未使用

8(8)

char[8]

xmap_wopn_rsv

空白を指定

注※

実行時に,指定したサーバ環境定義ファイルを「XMAP3インストールフォルダ\Web for TP1\ETC」から検索します。

パラメタ3に0を指定した場合や,サーバ定義ファイル名に8けたの空白を指定した場合は,サーバ環境定義ファイルとして「X3WEBSRV」を参照します。

・出力データ設定要求時

 出力論理マップを指定します。Webブラウザを終了する場合には0を指定します。

・入力データ取得要求時

 入力論理マップを指定します。ブラウザからの1回目の呼び出しや帳票印刷時など,

 入力論理マップが存在しない場合には0を指定します。

・オプション設定要求時

 必ず1を指定します。

(d) パラメタ4

出力データ設定要求時,パラメタ4には送信データ出力領域を指定します。入力データ設定要求時,パラメタ4には受信データ領域を指定します。また,オプション設定要求時,パラメタ4にはマッピングインタフェース領域(xmap_wmdo)を指定します。パラメタ4に指定する内容を要求別に示します。

表10‒12 パラメタ4に指定する送信データ出力領域

データ項目名

長さ

データ形式

指定内容

出力領域長

4

unsigned long

出力領域の長さ(n)を指定

出力領域

n(4)

char[n]

(00)16

送信データを格納するために必要な出力領域の大きさは,次に示す概算式で求められます。

出力領域サイズ(バイト)=(500+URL長※1×3+出力論理マップ長※2)×1.5
注※1

次に示すURLの長さを指します。

  • サーバ環境定義ファイルに指定したURL(環境設定ファイルパス(EtcPath)やデータファイルパス(DataPath)など)の最大長

  • SEND要求やCLOSE要求で指定する,次に呼び出すURLの最大長

注※2

APで使用する出力論理マップの最大長を指します。

それぞれ,URLの最大長は2,048バイト,出力論理マップの最大長は32,000バイトとなっているため,上記の概算式に従えば出力領域に必要な領域サイズの最大値は次のようになります。

(500+2,048×3+32,000)×1.5=57,966バイト
表10‒13 パラメタ4に指定する受信データ領域

データ項目名

長さ

データ形式

指定内容

受信データ長

4

unsigned long

受信データの長さ(n)を指定

受信データ

n(4)

char[n]

TP1/WebのAPIで取得した受信データを指定

受信データを格納するために必要な領域の大きさは,次に示す概算式で求められます。

受信データサイズ(バイト)=120+(500+入力論理マップ長)×1.5
注※

APで使用する入力論理マップの最大長を指します。ただし,帳票の場合は0となります。

入力論理マップの最大長は32,000バイトとなっているため,上記の概算式に従えば入力領域に必要な領域サイズの最大値は次のようになります。

120+(500+32,000)×1.5=48,870バイト
表10‒14 パラメタ4に指定するマッピングインタフェース領域(xmap_wmdo)

データ項目名

長さ

データ形式

データ名

指定内容

マッピングオプション大分類

4

unsigned long

xmap_wmdo_opt1

XMAP_WMDO_SFLDの内容を代入

マッピングオプション小分類

4(4)

unsigned long

xmap_wmdo_opt2

  • XMAP_WMDO_MAPFLDマージ

  • XMAP_WMDO_PHFLD物理マップだけ

  • XMAP_WMDO_LOGFLD論理マップだけ

(e) パラメタ5

パラメタ5には,出力データ設定要求時,次に呼び出すサービスのURLを指定します。SSL通信を使用する場合は,「https://」で始まるURLを指定してください。

注※

Webブラウザ側のXMAP3処理を終了後にWebブラウザを閉じる場合,要求インタフェース領域のオプション4に'E'を指定し,パラメタ5に0を指定します。

パラメタ5に指定する内容を次の表に示します。

表10‒15 パラメタ5に指定する次処理サービス領域

データ項目名

長さ

データ形式

指定内容

URLデータ長

4

unsigned long

URLデータの長さ(n)を指定

URLデータ

n(4)

char[n]

次回の呼び出し先URLを指定

注※

起動HTMLの業務開始URLに指定した,Webサーバ上のURLを指定してください。要求インタフェース領域のオプション4に'E'を指定した場合だけ,任意のWebサーバ上のURLを指定できます。

(f) リターンコード

jsvwwlib関数のリターンコードを次の表に示します。

表10‒16 jsvwwlib関数のリターンコード

リターンコード

意味

0

正常終了

8

異常終了

12

パラメタ不正

(3) jsvwwlibライブラリを使ったデータの受け渡し

(a) XMAP3 Web実行環境ライブラリのオープン要求

APのプロセス開始時に,XMAP3 Web実行環境ライブラリのオープン要求を発行します。

例1

APで共通のサーバ環境定義ファイルを使用する場合

memset(&com, 0, sizeof(XMAP_WCOM));   共通エリアの初期化
memset(&req, ' ', sizeof(XMAP_WREQ));  要求エリアの初期化
memcpy(req.xmap_wreq_type, "OPEN",    XMAP3/Web for Cosminexusライブラリ
       sizeof(req.xmap_wreq_type));            のオープン要求の代入
memcpy(com.xmap_wcom_id, "*WEB",     IDの代入
       sizeof(com.xmap_wcom_id));
com.xmap_wcom_itype = 'I';        ID区分の代入
jsvwwlib(&com,              共通インタフェース領域
         &req,              要求インタフェース領域
         0L, 0L, 0L);
例2

AP別に,異なるサーバ環境定義ファイルを使用する場合

memset(&com, 0, sizeof(XMAP_WCOM));     共通エリアの初期化
memset(&req, ' ', sizeof(XMAP_WREQ));    要求エリアの初期化
memset(&opn, ' ', sizeof(XMAP_WOPN));     オープンインタフェース領域
                                の初期化
memcpy(req.xmap_wreq_type, "OPEN",      XMAP3/Web for Cosminexus
       sizeof(req.xmap_wreq_type));     ライブラリのオープン要求の代入
memcpy(com.xmap_wcom_id, "*WEB",       IDの代入
       sizeof(com.xmap_wcom_id));    
com.xmap_wcom_itype = 'I';          ID区分の代入
memcpy(opn.xmap_wopn_srvname, ファイル名,  サーバ環境定義ファイル名
       sizeof(opn.xmap_wopn_srvname));
jsvwwlib(&com,                共通インタフェース領域
         &req,                要求インタフェース領域
         &opn,                オープンインタフェース領域
         0L, 0L);

注※ ユーザサービスプログラムごとに異なるサーバ環境定義を使用する場合は,「XMAP3インストールフォルダ¥ETC」下に,一意の名称でサーバ環境定義ファイルを用意してください。

(b) 入力データの取得要求

TP1/WebのAPIを使ってWebブラウザから取得した受信データを解析し,入力論理マップやリターンコードを取得します。XMAP3 Web実行環境ライブラリのオープン要求で使用したインタフェース領域の指定が必要です。

例1

画面出力後,Webブラウザからの応答

memcpy(req.xmap_wreq_type, "RECV"    入力データ取得要求の代入
       sizeof(req.xmap_wreq_type));
com.xmap_wcom_lsglng =          入力論理マップ長の代入
       sizeof(MAP001I.MAP001S);
jsvwwlib(&com,              共通インタフェース領域
         &req,              要求インタフェース領域
         &MAP001I,            入力論理マップ
         &wkarea_I,           ブラウザからの受信データ
         0L);

注 入力データ取得要求が正常終了した場合,xmap_wcom_lsglngには取得した入力論理マップデータの長さが設定されます。

例2

帳票出力後,Webブラウザからの応答

memcpy(req.xmap_wreq_type, "RECV"    入力データ取得要求の代入
       sizeof(req.xmap_wreq_type));
com.xmap_wcom_lsglng = 0;        '0'の代入(必須)
jsvwwlib(&com,              共通インタフェース領域
         &req,              要求インタフェース領域
         0L,
         &wkarea_I,           ブラウザからの受信データ
         0L);

(c) マッピングオプションの設定要求

Webブラウザへ画面を表示する場合,マッピングオプションを指定できます。XMAP3 Web実行環境ライブラリのオープン要求で使用したインタフェース領域の指定が必要です。

memcpy(req.xmap_wreq_type, "MDO ",    オプション設定要求の代入
       sizeof(req.xmap_wreq_type));
mdo.xmap_wmdo_opt1 = XMAP_WMDO_SFLD;   マッピングオプション大分類の代入
mdo.xmap_wmdo_opt2 = XMAP_WMDO_LOGFLD;  マッピングオプション小分類の代入
jsvwwlib(&com,              共通インタフェース領域
         &req,              要求インタフェース領域
         1L,               '1'を指定(必須)
         &mdo,              マッピングインタフェース領域
         0L);

(d) 出力データの設定要求

Webブラウザ側での業務に対して,画面表示,または帳票印刷情報を設定した応答メッセージを生成します。XMAP3 Web実行環境ライブラリのオープン要求で使用したインタフェース領域の指定が必要です。

例1

画面出力データを設定した応答メッセージを生成する場合

memcpy(req.xmap_wreq_type, "SEND",         出力データ設定要求の代入
       sizeof(req.xmap_wreq_type));
req.xmap_wreq_opt1 = 'F';              'F'の代入(必須)
req.xmap_wreq_opt2 = '1';              '1'代入(必須)
req.xmap_wreq_opt4 = ' ';              1けたの空白を代入(必須)
com.xmap_wcom_lsglng = sizeof(MAP001O.MAP001L);   出力論理マップ長の代入
memcpy(com.xmap_wcom_msg, "BWS ",          通信種別の代入
        sizeof(com.xmap_wcom_msg));
memcpy(com.xmap_wcom_tname, "        ",       仮想端末名(8けたの空白)
        sizeof(com.xmap_wcom_tname));                 の代入
memcpy(com.xmap_wcom_mapname, "MAP001ND",      物理マップ名の代入
        sizeof(com.xmap_wcom_mapname));
jsvwwlib(&com,                   共通インタフェース領域
         &req,                   要求インタフェース領域
         &MAP001O,                 出力論理マップ
         &wkarea_o,                 送信データ作成領域
         &nexturl);                 次回の呼び出し先URL領域
例2

帳票出力データを設定した応答メッセージを生成する場合

memcpy(req.xmap_wreq_type, "SEND",          出力データ設定要求の代入
       sizeof(req.xmap_wreq_type));
req.xmap_wreq_opt1 = 'F';              'F'の代入(必須)
req.xmap_wreq_opt2 = '1';              '1'の代入(必須)
req.xmap_wreq_opt3 = '1';              スプールへの出力方法の設定
req.xmap_wreq_opt4 = ' ';              1けたの空白の代入
com.xmap_wcom_lsglng = sizeof(MAP001O.MAP001L);   出力論理マップ長の代入
memcpy(com.xmap_wcom_msg, "OWS ",          通信種別の代入
        sizeof(com.xmap_wcom_msg));
memcpy(com.xmap_wcom_tname, "PRT001  ",       仮想端末名の代入
        sizeof(com.xmap_wcom_tname));
memcpy(com.xmap_wcom_mapname, "MAP0016G",      物理マップ名の代入
        sizeof(com.xmap_wcom_mapname));
jsvwwlib(&com,                    共通インタフェース領域
         &req,                    要求インタフェース領域
         &MAP001O,                  出力論理マップ
         &wkarea_o,                 送信データ作成領域
         &nexturl);                 次回の呼び出し先URL領域

注※ プリンタスプールに,nページ/ドキュメントとして出力したい場合には'2'を指定します。ブラウザ側のXMAP3環境設定で,プリンタスプールへの書き出し単位が「アプリケーション毎」を指定した場合に有効です。

例3

Webブラウザ側の業務終了用の応答メッセージを生成する場合

memcpy(req.xmap_wreq_type, "SEND",    出力データ設定要求の代入
       sizeof(req.xmap_wreq_type));
req.xmap_wreq_opt4 = 'E';         'E'の代入(必須)
jsvwwlib(&com,              共通インタフェース領域
         &req,              要求インタフェース領域
         0L,
         &wkarea_o,            送信データ作成領域
         &nexturl);            次回の呼び出し先URL領域

注※ URL領域を指定した場合,ブラウザ業務終了後に指定したURLを呼び出します。0を指定した場合には,ブラウザ業務終了後にブラウザを閉じます。

(e) XMAP3 Web実行環境ライブラリのクローズ要求

APのプロセス終了時に,XMAP3 Web実行環境ライブラリのクローズ要求を発行します。XMAP3 Web実行環境ライブラリのオープン要求で使用したインタフェース領域の指定が必要です。

memcpy(req.xmap_wreq_type, "CLOS",    XMAP3/Web for Cosminexus
       sizeof(req.xmap_wreq_type));       ライブラリのクローズ要求の代入
jsvwwlib(&com,              共通インタフェース領域
         &req,              要求インタフェース領域
         0L, 0L, 0L);