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には,共通インタフェース領域を指定します。指定形式の詳細を次の表に示します。
データ項目名 |
長さ |
データ形式 |
データ名 |
指定内容 |
---|---|---|---|---|
アイキャッチャ |
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 |
|
未使用 |
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 |
(b) XMAP-WREQ
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 |
|
オプション4 |
1(9) |
char |
xmap_wreq_opt4 |
'△':画面入出力/帳票出力を応答する 'E':ブラウザ側のXMAP3業務の終了を応答する |
未使用 |
6(10) |
char[6] |
xmap_wreq_rsv2 |
空白 |
要求動作 |
指定する値 |
---|---|
XMAP3 Web実行環境ライブラリのオープン要求 |
'OPEN' |
XMAP3 Web実行環境ライブラリのクローズ要求 |
'CLOS' |
出力データの設定要求 |
'SEND' |
入力データの取得要求 |
'RECV' |
オプションの設定要求 |
'MDO△'(△は半角空白を表す) |
指定値 |
内容 |
---|---|
'1' |
プリンタスプールに帳票を出力後,その印刷ドキュメントを完了(クローズ)する。通常は'1'を指定する。 |
'2' |
プリンタスプールに登録されている,印刷ドキュメント中の1ページとして帳票を出力する。 印刷ドキュメントは完了(クローズ)しないで継続する。 |
帳票印刷セットアップでスプール書き出し単位を「1ページ毎」にした場合は,この指定は無効となり常に'1'(ドキュメントを完了(クローズ)する)となります。
(c) パラメタ3
XMAP3 Web実行環境ライブラリのオープン要求時にオープンインタフェース領域を指定します。パラメタ3に指定する詳細を次の表に示します。
データ項目名 |
長さ |
データ形式 |
データ名 |
指定内容 |
---|---|---|---|---|
サーバ環境定義ファイル名 |
8 |
char[8] |
xmap_wopn_srvname |
サーバ環境定義ファイル名を左詰めで指定し,残りは空白を指定※ |
未使用 |
8(8) |
char[8] |
xmap_wopn_rsv |
空白を指定 |
(d) パラメタ4
出力データ設定要求時,パラメタ4には送信データ出力領域を指定します。入力データ設定要求時,パラメタ4には受信データ領域を指定します。また,オプション設定要求時,パラメタ4にはマッピングインタフェース領域(xmap_wmdo)を指定します。パラメタ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バイト
データ項目名 |
長さ |
データ形式 |
指定内容 |
---|---|---|---|
受信データ長 |
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バイト
データ項目名 |
長さ |
データ形式 |
データ名 |
指定内容 |
---|---|---|---|---|
マッピングオプション大分類 |
4 |
unsigned long |
xmap_wmdo_opt1 |
XMAP_WMDO_SFLDの内容を代入 |
マッピングオプション小分類 |
4(4) |
unsigned long |
xmap_wmdo_opt2 |
|
(e) パラメタ5
パラメタ5には,出力データ設定要求時,次に呼び出すサービスのURLを指定※します。SSL通信を使用する場合は,「https://」で始まるURLを指定してください。
- 注※
-
Webブラウザ側のXMAP3処理を終了後にWebブラウザを閉じる場合,要求インタフェース領域のオプション4に'E'を指定し,パラメタ5に0を指定します。
パラメタ5に指定する内容を次の表に示します。
データ項目名 |
長さ |
データ形式 |
指定内容 |
---|---|---|---|
URLデータ長 |
4 |
unsigned long |
URLデータの長さ(n)を指定 |
URLデータ |
n(4) |
char[n] |
次回の呼び出し先URLを指定※ |
- 注※
-
起動HTMLの業務開始URLに指定した,Webサーバ上のURLを指定してください。要求インタフェース領域のオプション4に'E'を指定した場合だけ,任意のWebサーバ上のURLを指定できます。
(f) リターンコード
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);