@web RPGによるWebアプリケーション構築 セミナー

1
i-web RPGによるWebアプリケーション構築
セミナー
2001年11月21日
2
セミナー内容
1. iSeries Web機能の概説
・HTTP機能
・CGIとは
2. Webプログラムの実演
・各種照会、Excel出力、PDF作成、メール送信 etc
(休憩)
3. Web機能の応用例
・ドキュメント管理
・メール通達
4.i-web RPGのご紹介
・開発ツール
・簡易コマンド
・価格
5. コーディング・サンプル
・通常のコーディング例
・i-web RPGのコーディング例
3
1. iSeries Web機能の概説
当章の内容はOS/400 V4R5の環境にて作成しています。
4
目次
1.
2.
3.
4.
World Wide Web
HTML
HTTP
CGI
5
1.World Wide Web
• World Wide Webの始まり
–
World Wide Web (またはWWW,あるいはW3)とはインターネット上のページとハイ
パーリンクの巨大な集合を指します。
–
1980年代の終わりにインターネットではある問題が顕在化しつつありました。当初は
情報はもっぱら電子メールやファイルであり、これらを利用するために多くのプロトコル
が開発されました。しかし、従来のプロトコルでは処理しきれない新しいタイプのファイ
ルが現れてきました。それは画像・音声はもとより、あらゆる情報へ飛ぶことのできる
ハイパーリンクを含むマルチメディア・ファイルです。
–
1990年ヨーロッパの素粒子物理学研究所であるCERN(Conseil Europeen pour la
Recherche Nucleaire)で、新しい種類の情報を受渡しする新しい標準を作る内部プロ
ジェクトのプロポーザルが作成されました。基本となる要素はマルチメディア、ハイパー
テキスト・ファイルの標準及びこれを提供する手段の標準です。ファイルの標準は
HTML(HyperText Markup Language)となり、提供手段の標準はHTTP(HyperText
Transfer Protocol)になりました。
6
–
クライアントはURL(Uniform Resource Locator)という形式で情報を要求します。要求
されたサーバーはHTTPプロトコルを使用して、URLで指定された文書をクライアントに
返します。この時のクライアントをWebブラウザ、サーバーをHTTPサーバー(もしくは
Webサーバー)と言います。文書はHTMLで記述され、テキスト/画像/音声/動画などを
含むことが出来ます。
http://www.ibm.com/jp/servers/eserver/iseries/index.html
プロトコル ドメイン名(サーバー名含む)
–
ディレクトリ/ファイル名
他ファイルへのハイパーリンクによって、たとえそれが他のコンピュータにあったとして
も、ユーザーはマウスをクリックするだけで自由に情報を行き来することが出来ます。
この技術は何台ものコンピュータに分散している情報へのアクセスを飛躍的に単純化
しました。このようにして利用されてマルチメディア・ファイルは通常「Webページ」と呼
ばれています。
7
–
最初のグラフィカルなWebブラウザは1993年にイリノイ大学NCSA(The National
Center for Supercomputing Applications)で開発されたMosaic(モザイク)でした。今
日のブラウザの多くがMosaicをベースにしています。
Netscape
Mosaic
Opera
Internet Explorer
–
WebブラウザはWindows、Machintosh、UNIX、Linux及びOS/2など、ウィンドウをサ
ポートするほとんどの主要なクライアント・システムで稼動します。非ウィンドウ・システ
ム用のブラウザも存在し、アクセスした文書のテキスト部分だけを表示します。
–
文書の作成者、サーバー、クライアントの操作環境はお互いに独立しています。それ
が作成された環境、あるいは配信された環境にかかわらずアクセスし、見ることが出来
ます。
8
–
汎用クライアントであるWebブラウザは、HTTPのみならずFTP(ファイル転送)、
POP3(電子メール)、NNTP(ネットニュース)、Gopherといった主要なプロトコルをサ
ポートしており、先程のURL指定で、プロトコルを指定することで様々なサービス(サー
バー)にアクセスすることが出来ます。
ftp://ftp.software.ibm.com/ps/products/db2/fixes/japanese/
プロトコル ドメイン名(サーバー名含む)
–
ディレクトリ名(/ファイル名)
高機能で魅力的なブラウザが無料、あるいは評価版として提供されるようにったことと、
日本でも95年にWindows95が出荷され、それまでは比較的高価で複雑であった
TCP/IPプロトコルがOS標準で使用できるようになったことで、爆発的にアクセスが増
加しました。
9
2.HTML
• HTMLとは
–
HTMLはプラットフォームに依存しないハイパーテキスト文書を記述するためのマーク
アップ(文書の構造を示すために挿入する区切り文字列)言語です。
–
HTMLはプログラミング言語ではありませんが、これとよく似ています。HTMLにはタグ
と呼ばれるコマンドや文法があります。HTML自体は単純なテキストファイルですので、
任意のテキスト・エディターで作成することが出来ます。最近ではIBMホームページ・ビ
ルダーなど簡易的にHTMLを作成できるツールも多く発表されています。
–
HTMLは進化しており、現時点での最新バージョンはHTML4.01です。コンテンツを作
成する場合はどのバージョンに準拠するかを明確にすることと、Webブラウザによって
は独自の拡張タグがあるのでその拡張タグを使用する/しないを明確にすることが大切
です。
(最新のNetscape、MS Internet ExplorerはHTML4.0 + αをサポートしています)
10
– HTMLの構造
• HTMLはテキストで記述される。
• タグと呼ばれる「<>」で囲まれた部分が表現方法をあらわす。
– タグは原則的に表現属性の開始を表す<…..>と表現属性の終了
を表す</…..>とで囲んで指定する。ただし、終了指定のないタグ
も多数ある。
» HTML文書自身も<HTML>で始まり</HTML>で終わる。
– タグは英大文字/小文字の区別はなく、どちらで記述しても構わな
い。
• HTML文書上のプランク文字/改行はWebブラウザ上では無視される。
– HTML文書上の見た目と、Webブラウザでの表現とは異なること
がある。
– 例外として<PRE>タグあり。
• 基本的には文書の行/桁位置を示すタグはない。
– 文書の相対的な位置により表示場所が来まる。
– ただし水平(横)位置はピクセル、パーセント指定が出来る。
11
2-1.HTMLサンプル1
– HTMLサンプル1
① <html>
<head>
② <title>ようこそホームページへ</title>
</head>
③ <body>
④ <center>
⑤ <h1>HTMLのサンプル</h1>
</center>
⑥ <hr>
⑦ 我輩は猫である。
名前はまだ無い。
<hr>
⑧ 我輩は猫である。<br>
名前はまだ無い。
<hr>
⑨ <b>我輩は猫である。
名前はまだ無い。</b>
<hr>
⑩ <ul>
⑪ <li>我輩は猫である。
<li>名前はまだ無い。
</ul>
</body>
</html>
①<html>~</html>
HTML文書の開始と終了を表す
②<title>~</title>
ブラウザ上のタイトル・バーに表示される
③<body>~</body>
HTML文書の本体を示し、この間にテキスト、
イメージ・ファイル、多文書へのリンクを記述
④<center>~</center>
ブラウザ上で中央寄せ表示する
⑤<h1>~</h1>
ヘッダー(header)を意味し、見出しとして扱わ
れる。具体的には文字サイズが大きくなる。
<h2>,<h3>,<h4>,<h5>,<h6>あり
⑥<hr>
水平線を表示。終了タグ</hr>は存在しない
⑦改行なし
HTML文書上では改行しているが、ブラウザ
上では改行表示されていない
⑧<br>
ブラウザ表示上で改行を意味する
タグの終了を表す</br>は存在しない
⑨<b>~</b>
文字を太字(bold)で表示
⑩<ul>~</ul>
箇条書きを意味する(ブラウザに表示されない)
⑪<li>
箇条書きの場合のみ有効
リスト項目であることを表示
12
2-2.HTMLサンプル2
– HTMLサンプル2
①<a>~</a>
他文書へのリンクを記述。
<a>タグ内のhref=属性で、リンク先のサーバー及び文書
(ディレクトリー名含む)を指定。
全く別のサーバー上にある文書を指定する場合はプロト
コル、ドメイン名、ファイル名を指定。
②<a>~</a>
同じく他文書へのリンク。
当HTMLと同じサーバー上にある別文書へリンクする場合
は(ディレクトリー名及び)ファイル名のみを指定。
③<img>
イメージ・ファイルを指定。
<img>タグ内のsrc=属性で、ファイル名を指定。
同一サーバー上でも他サーバー上にあるファイルでも可能。
<html>
<head>
<title>ようこそホームページへ</title>
</head>
<body>
<center><h2>文書リンクのサンプル</h2></center><br>
① <a href="http://www.ibm.com/jp/">日本IBMのサイトへ(他サーバー)</a> <br>
② <a href="/book/title/index.html">別の文書へ(同一サーバー内)</a>
<hr>
<center><h2>イメージファイルのサンプル</h2></center><br>
③ <img src="http://www.ibm.com/mast_logo_anim_jp.gif">
</body>
</html>
13
2-3.iSeries上でのHTML
– iSeriesにおけるHTMLファイルの置き場所
• iSeries上でHTMLファイルを格納する場所は、大きく2種類あります。
各々長所/短所を理解した上で適切な場所に置いてください。
• IFS(統合ファイルシステム : Integrated File System)
– OS/400 V3R1より、従来のライブラリーという管理方法に加え、
このIFSが拡張されました。
– このIFSはUNIX,Windowsのような階層ディレクトリー管理方法で
あり、特にHTMLファイルの格納に適しています。
– PC上で作成したHTMLファイルやイメージ・ファイル(GIF,JPEG
等)をそのまま(=ASCIIコード)格納します。
• ライブラリー(/QSYS.LIB)
– 従来からのOS/400のファイル管理方法であり、EBCDICコードで
格納されます。
– RPG/COBOL等のプログラムからのアクセスが可能であり、レ
コード単位の“データベース(DB2/400)”をサポートします。
(上述のIFSではデータベースを格納できず、“単なるファイル”の
集まりにすぎません)
– ライブラリー上にHTMLファイルを置いた場合は、最終的には
ASCIIテキストにコード変換してブラウザに送信するため、コード
変換の処理が余分に必要です。
14
– IFS、ライブラリーのどちらに置くか
• IFSに置くケース
– 静的なHTMLコンテンツやマルチメディア・ファイルはIFS上に置く
ことをお勧めいたします。
これらのファイルはそのまま(無変換)の状態でiSeries(HTTPサー
バー)からクライアント(ブラウザ)に送信されます。
– パフォーマンスが良いことと、IFSのファイル命名規則は制約が少
ない(最大255文字まで)ことから、特別な理由がない限りIFSを使
用すべきでしょう。
• ライブラリーに置くケース
– RPG/COBOL等のプログラムを使用してCGIプログラムを作成す
る場合は、雛型のHTMLファイルをライブラリー上に置きます。
CGIプログラム中ではEBCDICコードの状態でHTMLファイルを
生成し、最終的にブラウザに送信する直前でASCIIコードへの
コード変換を行ないます。
– RPG/COBOLからアクセス可能ですがコード変換が必要となりパ
フォーマンスが劣ることから、限定して使用する(=CGIのみの利
用とする)べきでしょう。
15
2-4.CCSID
• CCSID(コード化文字セットID)
–
iSeriesからPCへのファイル転送や、ODBCアクセスした時に、データや画面の文字が
意図したものと異なる(所謂“文字化け”)ケースがあります。
多くの場合、その原因はiSeriesとPCとの文字コードが異なることに起因しています。
–
iSeriesやメインフレームは基本文字コードとしてEBCDICを、PC/UNIXはASCIIを採用
しています。つまりこれらの間でデータを正しくやり取りするには、どこかでこのコード変
換を適切に行なう必要があります。
–
Webブラウザ側にはこのコード変換を考慮した機能を持っていないので、iSeries側で
コード変換を行なうことになります。
このコード変換はユーザー・アプリケーションにて実行することも可能ですが、OS/400
にも変換機能があり、この機能を正しく使用すればユーザー・アプリケーション側での
考慮は不要になります。
–
このコード変換の際に「どのような規則に基づいて変換を行なうか」をシステムが判断
する情報がCCSID(Coded Character Set IDentifier)です。
16
– CCSIDの構成要素
• CCSIDは単なるコード体系のみではなく「ある文字セットに含まれる文
字/コード/表現方法」などを単一の値で表します。
• 主な言語のCCSIDとその構成要素を下表に示します。
EBCDICに該当するものは網掛けで示してあります。
• 日本語環境でよく利用されるのは「5026」と「5035」および「65535」で
しょう。(「65535」は“変換しない”ことを示す特殊値です。)Pcomでは
5026/5035のスーパーセットである「930」と「939」が採用されています。
CCSID
Code Page
Character Set
備考
Encoding
00037
00037
00037
1100
アメリカ、カナダ、オーストラリア
00437
00037
01212
2100
US PC
00930
00290 / 00300
01172 / 01001
1301
日本語拡張カタカナ。4370外字(5026の上位)
00932
00897 / 00301
01122 / 00370
2300
Japan PC(DOS:旧JIS並び)
00939
01027 / 00300
01172 / 01001
1301
日本語拡張英小文字。4370外字(5035の上位)
00943
01041 / 00301
01172 / 00370
2300
Japan PC(Windows拡張)
05026
00290 / 00300
01172 / 00370
1301
日本語拡張カタカナ。1880外字
05035
01027 / 00300
01172 / 00370
1301
日本語拡張英小文字。1880外字
65535
無変換を表す特殊なCCSID
17
– CCSIDのメカニズムの重要性
• CCSIDは様々な処理で扱われています。
例えば一見簡単そうな「Pcomを使用して5250画面でデータベースの
中身(実データ部分)を参照する」場合にも以下の3つの設定が合致し
ていなければなりません。
– データベース・ファイルのCCSID (DSPFDで確認)
– 実行しているジョブ(端末)CCSID (DSPJOBで確認)
– 表示しているPcomのCCSID (Pcom構成のホスト・コードページ)
• その他データベース・ファイル以外にも表示装置ファイル、印刷装置
ファイルにもそれぞれCCSIDが付いており、それぞれ正しい変換結果
を得られるような仕組みをOS/400は持っており、ユーザーが正しい理
解/設定が必要です。
• 今回のWebサーバーの構築もまさにこのCCSIDのメカニズムを利用し
て、ユーザーが意識することなくコード変換を行ないます。
その他FTPによるファイル転送、ODBCによるデータベース・アクセスも
同様です。
18
– CCSIDの指定(CCSIDは何に基づいて決定されるか)
• iSeries対話型ジョブ
– システム値 QCCSID
– ユーザー・プロフィール中のCCSID
– CHGJOBコマンド中のCCSIDパラメータ
– (システム値 QLANGID)
– (ユーザー・プロフィール中のLANGID)
• iSeriesバッチ型ジョブ
– バッチ型ジョブ(ユーザー投入ジョブ、システム・サーバー・ジョブ含む)に関し
ては、上記のようにユーザー・プロフィールによって決定されるものもあれば、
個別に設定するケースもあり、必ずマニュアルにて確認する必要があります。
• iSeriesオブジェクト
– データベース・ファイル
» DDSあり:ソースで明示的にCCSIDが指定されている場合はその値。
明示指定がない場合はジョブの値。
» DDSなし:ファイルを作成する時(CRTPFコマンド)にCCSIDを指定。
– ソース・ファイル
» ソース・ファイルを作成する時(CRTSRCPFコマンド)にCCSIDを指定。
– 表示装置ファイル/印刷装置ファイル
» ソース・ファイルのCCSIDがそのまま取られる。
19
3.HTTP
•
HTTPの基本的な動作
①
Webブラウザは通常TCP/IPのポート番号80を使用してサーバーへの接続を試みま
す。接続があらかじめ設定された時間内に確立できなかった場合、ブラウザはエ
ラー・メッセージを表示して要求を終了します。
②
接続が確立されるとブラウザはサーバーにリソース(HTML文書やマルチメディア・
ファイルが格納されているディレクトリ名、ファイル名)を要求します。サーバーはリ
ソースをブラウザに送信して接続を切断します。リソースが使用可能でない(ファイル
が存在しない、セキュリティ上アクセス出来ない等)時はブラウザにエラー・メッセージ
が送られ、接続は終了します。
③
要求されたリソースがサーバーからブラウザに送信されるとブラウザは内容を読み
込み、これを表示したり、マルチメディア(音楽やビデオ等)を再生するための外部
ビューワーを起動します。サーバーからエラーが送られた場合はブラウザはこれを
表示します。
20
プロトコル
http
ドメイン名
www.ibm.com
ディレクトリー
/jp
ファイル名
index.html
http://www.ibm.com/jp/index.html
②
①
Webブラウザ
が要求を出す。
TCP/IPネットワーク
③
HTMLドキュメントが送ら
れ、ブラウザに表示される。
ファイル名
index.html
サーバーは要求を処理。
結果を返し、切断する。
21
3-1.iSeries HTTPサーバー
• iSeries HTTPサーバー
– iSeries(AS/400)で稼動する主なHTTPサーバー
• IBM HTTP Server for iSeries (Original)
– OS/400 V3R2よりOS標準提供(当時はICS,ICSSと呼ばれる)
• IBM HTTP Server for iSeries (powered by Apache)
– OS/400 V4R5よりOS標準提供
• Domino
– OS/400 V4R2よりDominoサーバーが提供
• I/NET Web Server/400
– OS/400 V3R1より稼動
• Netscape Enterprise Server for AS/400 (日本未発表)
22
– IBM HTTP Server for iSeries (Original)機能概要
• HTTPサーバー環境
–
–
–
–
–
HTTP 1.1
Proxy / キャッシュ
ログ機能
マルチ・サーバー環境
テキスト・サーチ・エンジン
• Webアプリケーション環境
–
–
–
–
CGI (ILE-RPG,ILE-COBOL,ILE-C,Java)
SSI
Net.Data
Java Servlet
• セキュリティ
– アクセス制御(Basic認証)
– 暗号化(SSL)
– デジタル認証
• 管理機能
– ブラウザ・インターフェースによる管理画面
23
– IBM HTTP Server for iSeries (Original)の実体
• iSeries上のHTTPサーバーはバッチ型の常駐ジョブとして稼動
– WRKACTJOBコマンド
活動ジョブの処理
CPU %:
2.1
経過時間 :
00:00:36
S65FF18A
01/11/16 17:22:56
活動ジョブ数 : 243
オプションを入力して,実行キーを押してください。
2= 変更 3= 保留
4= 終了 5= 処理 6= 解放
8=スプール・ファイル の処理 13= 切断 ...
OPT サブシステム/ジョブ
QBATCH
QCMN
QCTL
QSYSSCD
QHTTPSVR
KOBA_WCS
KOBA_WCS
KOBA_WCS
KOBA_WCS
KOBA_WCS
QINTER
QPADEV0001
ユーザー
QSYS
QSYS
QSYS
QPGMR
QSYS
QTMHHTTP
QTMHHTTP
QTMHHTTP
QTMHHTTP
QTMHHTTP
QSYS
QSECOFR
7=メッセージ の表示
タイプ CPU % 機能
SBS
.0
SBS
.0
SBS
.0
BCH
.0 PGM-QEZSCNEP
SBS
.0
BCH
.0 PGM-QZHBHTTP
BCI
.0
BCI
.0
BCI
.0
BCI
.0
SBS
.0
INT
.0 CMD-WRKACTJOB
状況
DEQW
DEQW
DEQW
EVTW
DEQW
CNDW
TIMW
TIMW
TIMW
TIMW
DEQW
RUN
続く ..
パラメーターまたはコマンド
===>
F3= 終了 F5= 最新表示 F7= 検索
F11= 経過 データ の表示
F12= 取消し
F10= 統計の再始動
F23=オプション の続き
F24=キー の続き
– 実行時のユーザーはシステム提供のQTMHHTTPが使用されます。
» このHTTPサーバーがコンテンツを送信する際に、今まで通り
OS/400のセキュリティ・メカニズムが働きます。アクセスするオブジェ
クトに対してアクセス権限が適切に設定されていなければなりません。
24
HTTPサーバー関連ライブラリー
QHTTPSVR.LIB
QSYS.LIB(EBCDIC)
HTTPサーバー構成ファイル
QUSRSYS.LIB
HTTP
サ
ー
バ
ー
ジ
ョ
ブ
コード変換
CGIプログラム
HTMLファイル
Net.Dataマクロ
コード変換
Net.Dataエンジン
HTMLファイル
Java Servlet
-物理ファイル
-ソース・ファイル
Net.Dataマクロ
IFS(ASCII)
25
3-2.HTTPサーバー構築
• IBM HTTP Server for iSeries (Original)構築
– チェック項目
• サーバー構成情報
– IPアドレス(&ポート番号)、ドメイン名、ホスト名、インスタンス数
• Webアプリケーション開発
– CGI、Net.DataそれともJava?
• セキュリティ対策
– SSLは? アクセス制御は?
– (Firewallの構築は?)
– 作業項目
• TCP/IPネットワークの設定
– IPアドレス(&ポート番号)、ドメイン名、ホスト名、デフォルトゲートウェイ etc
• HTTPサーバー属性の設定
• HTTPサーバー構成
–
–
–
–
サーバーインスタンス作成
ホスト名、ポート番号
経路指定(Map、Pass、Exec)
コード変換指定
–
–
–
–
ログ指定
Welcomeページ
DirectAccess オン/オフ
プロテクション設定(アクセス制御)
• アプリケーション開発
– HTMLデザイン(Webページ)
– Webアプリケーション(基幹アプリケーション/データベースとの連携)
26
– 前提ハードウェアの確認
• iSeries(AS/400) RISCプロセッサーモデル
– OS/400 V4Rx , V5R1が稼動するモデル
• TCP/IPをサポートするLANカード
– Ethernet , Token-Ring , ATM etc …
– 前提ソフトウェアの確認
• 下記サンプルはOS/400 V4R5の場合
必須
5769-TC1
5769-DG1
オプション
5769-AC2,3
5769-SS1
推奨
5769-SS1
5769-XE1
*BASE
*BASE
AS/400 TCP/IP
IBM HTTP SERVER FOR AS/400
TCP/IPプロトコル
HTTPサーバー
*BASE
34
CRYPTO ACCESS PROVIDER 56-BIT FOR AS/400
OS/400 - ディジタル証明書マネージャー
暗号化(SSL)
デジタル認証(ID発
行)
12
*BASE
OS/400 - ホスト・サーバー
クライアント・アクセス WINDOWS エクスプレス版
運用/コンテンツ管理
運用/コンテンツ管理
– PTFの確認
• 最新累積PTFパッケージ
• HTTPサーバー用グループPTF
– OS/400 V4R5用 : SF99036
– OS/400 V5R1用 : SF99156
27
3-3.HTTPサーバー構築手順概要
•
IBM HTTP Server for iSeries (Original)構築手順概要
–
手順概要
①言語環境/操作環境の設定
–
サーバー側/管理クライアント側
②TCP/IP環境の設定
–
回線記述、IPアドレス、ドメイン名、ホスト名、デフォルトゲートウェイ etc
(当資料では既に出来ているものとし、割愛致します)
③HTTPサーバー属性の設定
④管理用HTTPサーバー構成の設定
⑤HTTPサーバー構成、インスタンスの作成
–
HTTPサーバー構成とインスタンスを作成し、その関連付けを行なう
⑥HTTPサーバー構成の設定
–
上記で作成したHTTPサーバー構成に具体的に設定値を指定する
»
基本設定
»
メソッドの設定
»
経路指定 etc….
⑦HTTPサーバーの開始/終了
–
作業
•
•
①~④ : 5250画面より行なう
⑤~⑦ : Webブラウザより行なう (5250画面でも可)
28
– 当資料のシナリオ
• HTTPサーバー構成の設定項目(前ページ手順⑥)は多岐に渡ります。
当資料では構成手順の概要を理解して頂くために、必要最低限の設
定項目に関して説明致します。
• 今回設定する項目は以下の5つです。
– 基本設定
» ホスト名、ポート番号等の基本情報
– ウェルカム・ページ設定
» デフォルト表示させるWebページ(HTMLファイル)
– メソッド
» WebブラウザからHTTPサーバーにアクセスする際のコンテンツ要
求方法の指定
– 経路指定
» URLで指定する論理パスと、サーバー上の物理パスのマッピング
– ログ
» アクセス・ログ、エラー・ログ等のロギング指定
29
3-3.①言語環境/操作環境の設定
①言語環境/操作環境の設定
• サーバー側
– CCSID = 5035 (日本語拡張英小文字)
– システム値QCCSIDで指定、もしくは後述のHTTPサーバー構成内で指定
(新規に導入する場合はシステム値で設定することをお勧めします)
• 管理クライアント側
– 5250エミュレータ
» エミュレータのホスト・コードページ = 939 (日本語拡張英小文字)
» iSeriesにサインオン後、ジョブ属性CCSIDを5035に変更
CHGJOB CCSID(5035)
– Webブラウザ
» JavaScript、フレームをサポートすること
» Proxyの設定は外し、キャッシュを“0”に設定
②TCP/IP環境の設定
• 当資料では割愛
30
3-3.③HTTPサーバー属性の設定
③HTTPサーバー属性の設定
• HTTPサーバー全体の属性を指定します。
– CHGHTTPAコマンド
HTTP 属性の変更 (CHGHTTPA)
選択項目を入力して,実行キーを押してください。
① 自動開始 . . . . . . . . . .
② サーバー・スレッドの数 :
最小 . . . . . . . . . . .
最大 . . . . . . . . . . .
③ コード化文字セット識別コード
SERVER マッピング・テーブル :
EBCDIC/ASCII テーブルの発信
ライブラリー . . . . . .
.
*NO
.
.
10
40
> 00943
*YES, *NO, *SAME
1-9999, *SAME, *DFT
1-9999, *SAME, *DFT, *NOMAX
1-65533, *SAME, *DFT
*CCSID
名前 , *SAME, *CCSID, *DFT
名前 , *LIBL, *CURLIB
*CCSID
名前 , *SAME, *CCSID, *DFT
名前 , *LIBL, *CURLIB
.
ASCII/EBCDIC TABLE の受信 . .
ライブラリー . . . . . . .
終り
F3= 終了
F4=プロンプト
F13= この画面の使用法
F5= 最新表示
F12= 取り消し
F24= キーの続き
①STRTCPコマンドTCP/IPを開始した時に、HTTPサーバーを自動的に開始するかどうかを指定。
STRTCPSVRコマンドでHTTPを開始した場合は、このパラメータ値に関係なく開始します。
②サーバー(iSeries)上で稼動するスレッド数を指定。
この値は同時アクセス数やハードウエア資源によって決定されます。
通常は省略値からスタートし、テスト/実稼動の中で調整します。
③ブラウザからの要求でMIMEヘッダが見つからない場合に、CGIでEBCDIC→ASCII変換を行
なう際のASCII-CCSIDを指定。943はWindowsで使用されているSJISに相当します。
31
3-3.④管理用HTTPサーバー構成の設定
④管理用HTTPサーバー構成の設定
• HTTPサーバーの管理/構成は、管理用のブラウザ・インターフェースが提供され
ています。ここではその管理用画面を使用するための初期設定を行います。
– WRKHTTPCFG CFG(*ADMIN)
HTTP 構成の処理
システム :
構成名 . . . . . . . . . . . . . :
オプションを入力して,実行キーを押してください。
1= 追加 2= 変更 3= コピー 4= 除去 5= 表示
OPT
順序番号
00010
00020
00030
00040
00050
00060
00070
00080
F3= 終了
F18= 最下部
S65FF18A
ADMIN
13= 挿入
項目
# * * * * * * * * *
# HTTP Admin server
# * * * * * * * * *
DefaultFsCCSID
DefaultNetCCSID
ScriptTimeOut
OutputTimeOut
InputTimeOut
* * * * * * * * * * * * * * * * * *
CUSTOMER configuration
* * * * * * * * * * * * * * * * * *
5026
943
3600 minutes
3600 minutes
3600 minutes
F5= 最新表示 F6= リストの印刷
F19= 順序の編集
F12= 取消し
終り
F17= 最上部
上記の5ステートメントを追加して下さい。(先頭が「#」で始まる行はコメント行です)
英大文字/小文字は識別されるので、上記の通りに入力して下さい。
• 管理用HTTPサーバーの起動/終了
– STRTCPSVR SERVER(*HTTP) HTTPSVR(*ADMIN)
– ENDTCPSVR SERVER(*HTTP) HTTPSVR(*ADMIN)
32
– 管理用HTTPサーバーの稼動確認
• 管理用HTTPサーバーが稼動しているかどうか確認して下さい。
– WRKACTJOB SBS(QHTTPSVR)
活動ジョブの処理
CPU %:
.0
経過時間 :
00:00:00
S65FF18A
01/11/15 21:42:09
活動ジョブ数 : 243
オプションを入力して,実行キーを押してください。
2= 変更 3= 保留
4= 終了 5= 処理 6= 解放
8=スプール・ファイル の処理 13= 切断 ...
OPT サブシステム/ジョブ
QHTTPSVR
ADMIN
ADMIN
ADMIN
ADMIN
ADMIN
ユーザー
QSYS
QTMHHTTP
QTMHHTTP
QTMHHTTP
QTMHHTTP
QTMHHTTP
7=メッセージ の表示
タイプ CPU % 機能
SBS
.0
BCH
.0 PGM-QZHBHTTP
BCI
.0
BCI
.0
BCI
.0
BCI
.0
パラメーターまたはコマンド
===>
F3= 終了 F5= 最新表示 F7= 検索
F11= 経過 データ の表示
F12= 取消し
F10= 統計の再始動
F23=オプション の続き
状況
DEQW
CNDW
TIMW
TIMW
TIMW
TIMW
F24=キー の続き
• 管理用HTTPサーバーはシステムに1つ。
– 通常のHTTPサーバー環境は複数持つ(マルチ・サーバー)ことが出来ます
が、管理用HTTPサーバーは1つしかありません。
33
3-3.⑤HTTP構成、インスタンスの作成
⑤HTTPサーバー構成、インスタンスの作成
• HTTPサーバー構成方法には以下の2通りがあります。
– ブラウザ・インターフェースによる構成
» 設定項目がブラウザに表示され、値を指定する。
» 指定ミスが起こりにくく、当初はこちらをお奨めします。
– 5250画面による構成
» 構成内容(ディレクティブ及び設定値)を直接記述する。
» 設定項目の意味/相互関連を理解していなければなりません。
34
– サーバー構成情報の実体
• 構成情報はライブラリーQUSRSYSの物理ファイルに格納
– 上述のどちらの構成方法を選択しても、最終的に構成情報は
ライブラリーQUSRSYS/物理ファイルQATMHINSTC,QATMHTTPCに書
き出されます。
– 複数のサーバー構成(インスタンス)を作成した場合は、上記物理ファイル
の別メンバーとして作成されます。
サーバー構成の開始
<<インスタンス>>
<<HTTPサーバー構成>>
物理ファイル
QUSRSYS/QATMHINSTC
物理ファイル
QUSRSYS/QATMHTTPC
メンバー
STRTCPSVR
SERVER(*HTTP)
HTTPSVR(WEB01)
メンバー
DEFAULT
CONFIG
WEB01
WEB01
WEB02
WEB02
-r /QSYS.LIB/QUSRSYS.LIB/QATMHTTPC.FILE/WEB01.MBR -AutoStartY
HostName
mallas04.nagoya.japan.ibm.com
Port
80
DNS-Lookup
Off
UserID
%%SERVER%%
BindSpecific
On
DefaultFsCCSID 5035
DefaultNetCCSID 943
Enable
GET
Enable
HEAD
Enable
POST
Protection Protect01 { ………
35
– 管理用HTTPサーバーへのアクセス
• Webブラウザより下記URLにアクセス
– http://ホスト名:2001/
» Basic認証のためのポップアップが表示される。
QSECOFRと同等の権限をもつユーザーでログイン
「AS/400タスク」ページが表示されます。
これが管理画面のTopページです。
(表示されるメニューは導入されているラ
イセンスによって異なります。)
ここではHTTPサーバー管理・構成画面
の“IBM HTTP Server for AS/400”のリン
クを選択します。
36
•
ページのレイアウト
– 画面左側(左フレーム)にメニュー
– 画面右側(右フレーム)に設定項目、およびその設定値入力フィールド
37
– HTTPサーバー構成、インスタンスの作成
まず最初にHTTPサーバー構成を
作成します。
①「構成」をクリック。
設定項目一覧が表示される。
②「構成の作成」をクリック。
右フレームに入力画面。
③
④
①
②
⑤
③HTTPサーバー構成名を入力。
通常は、後述のインスタンス名
と同じ名前にします。
④新規にブランク構成を作成する
か、既存の構成をコピーして作
成するか、選択できます。
⑤適用ボタンを押します。
正しく構成が作成されると「構
成ファイルが正常に作成されま
した」というメッセージが表示さ
れます。
38
– HTTPサーバー構成、インスタンスの作成
次にインスタンスを作成し、先程の
HTTPサーバー構成との関連付け
を行ないます。
①「サーバー・インスタンス」をクリ
ック。
③
④
①
⑤
②
②「サーバー・インスタンスの作
成」
をクリック。
③インスタンス名を入力。
通常は、前述のHTTPサー
バー
構成名と同じ名前にします。
④関連付けするHTTPサーバー構
成名を選択。
⑤作成ボタンを押します。
正しくインスタンスが作成される
と「サーバーインスタンスが正
常に作成されました」というメッ
セージが表示されます。
39
3-3.⑥HTTPサーバー構成の設定
⑥HTTPサーバー構成の設定
HTTPサーバー構成の詳細設定を
行ないます。先ずは“基本構成”で
す。
①「構成」をクリック。
②設定するHTTPサーバー構成を
選択します。
③「基本」をクリック。
④
①
③
②
④ホスト名(ドメイン名を含むFQDN)
を入力。
⑤
⑤ポート番号を入力。
⑥
⑥クライアントがアクセスしてきた時
に、DNSサーバーにクライアント
のホスト名を問い合わせるかど
うかを指定。パフォーマンスの観
点から問い合わせない(チェック
を外す)ようにする。
⑦「適用」ボタンで確定。(以降同じ)
40
次に“ウェルカム・ページ”を設定し
ます。これは、URLにファイル名を
指定しなかった場合に
(例えばhttp://www.ibm.com/など)
表示されるファイル名を指定します。
①「構成」より「ディレクトリーおよび
ウェルカム・ページ」をクリック。
②「ウェルカム・ページ」をクリック。
①
②
③
③表示させるファイル名を指定。
通常はindex.html、default.html 、
welcome.html等の名前を使用
するようです。
41
使用可能な“メソッド”を指定します。
メソッドとはWebブラウザからHTTP
サーバーへの要求方法の種類です。
③
①
②
例えば通常のHTMLコンテンツを要
求する場合はGETを使用し、コンテ
ンツをアップロードさせる場合には
PUT、コンテンツを削除する場合に
はDELETEなどです。
不要なメソッドを使用可能にすると、
サーバー上のコンテンツを破壊され
る可能性があるので注意して設定
して下さい。
①「構成」より「要求処理」をクリック。
②「メソッド」をクリック。
③使用可能にするメソッドにチェック。
一般的にGET、HEADを可能に
し、CGIを使用する場合はPOST
を可能にします。
42
次に“経路指定”を設定します。
この経路指定とは、ブラウザからU
RLで指定してきた要求パス(ディレ
クトリー)を、実際のサーバー上の物
理パスにマッピングします。
①「要求の経路指定」をクリック。
②アクションで“Pass”を選択。
②
③
①
④
③URLテンプレートにはブラウザで
指定するURLパスを入力。
ここではルート(/)を指定。
④代替ファイル・パスにはiSeries上
の実際の物理パスを指定。
※③,④ともに指定パス以下の全て
のディレクトリー、ファイルにアク
セスできるようにワイルドカード
上記サンプルでは
-ブラウザ上で http://www.xxx.co.jp/a.html(③の指定値) と指定すると
(*)
-サーバー(www.xxx.co.jp)上では 実際には /WebDocs/a.html(④の指
を指定しています。
定値)を返します。
43
最後にアクセス・ログを収集するた
めの設定をします。
まずは形式を選択します。
①「構成」より「ログ」をクリック。
②「ログ・ファイルのグローバル設
定」
をクリック。
③
④
①
②
③ログ時刻の設定を選択。
現地時間にするとシステムの現
行時刻となります。
④ログ・ファイルの形式を選択。
“共通”にするとCERN準拠の標
準的なフォーマットを指します。
他プラットフォームで使用されて
いるログ分析ツールを利用する
ことが出来ます。
“DDS”にするとライブラリー上の
物理ファイルに書出され、RPG
やQuery等で加工できます。
44
ログの書出し先を指定します。
①「アクセス・ログ・ファイル」をクリッ
ク。
②ログ・ファイルの書出し先、および
ログ・ファイル名を指定します。
②
①
前述のログ形式で“共通”を指定
した場合はIFS上のディレクト
リー
(およびファイル名)を指定します。
“DDS”を指定した場合はライブ
ラ
リー(およびファイル名)を指定。
当サンプルではIFS上の/Logディ
レクトリー下に書出されます。
ファイル名は
AccessLog.QCYYMMDD
という拡張子がつきます。
C = 世紀 , YY = 年
MM = 月 , DD =日
となり、1日単位に新規ファイル
が自動的に作成されます。
45
設定内容を確認できます。
「構成の表示」をクリックすると、構
成内容が表示されます。
左図のように設定内容は
設定キーワード + 設定値
という形式で表現されます。
キーワードと設定値の間は1つ以
上のブランクで区切る必要があり
ます。
この設定キーワードのことをディレ
クティブと言います。
46
– 代表的なディレクティブ
ディレクティブ
説明
省略値
なし
HostName
HTTPサーバーのホスト名を指定します。このディレクティブがない場合、
TCP/IP構成の値が使用されます。
Port
HTTPサーバーがクライアントからのリクエストを受け取るTCP/IPのポート 80
番号を指定ます。通常は80を使用します。
Enable
CGIプログラムを利用するためのメソッドを使用可能にします。
HEAD , GET 他
Disable
CGIプログラムを利用するためのメソッドを使用不可にします。
POST , PUT他
Exec
ブラウザから要求されたCGIプログラムのパス名(URL名)を、実際のサー なし
バー上の物理パス名(ライブラリー名)にマップします。
Map
ブラウザから要求されたパス名(URL名)を、実際のサーバー上の物理パ
ス名(ディレクトリー名、ライブラリー名)にマップします。
Pass
マッピングされた、またはオリジナルのURL(正確にはURI)の評価をしま
なし
す。サーバーから配信するコンテンツは必ずこのディレクティブで指定され
ていなければなりません。Mapディレクティブと同様に置換え値を指定す
ることも出来ます。
DirAccess
ファイル名が明示的に指定されなかった時に、ディレクトリー構造をブラウ Off
ザに返すかどうかを指定します。
Welcome
ファイル名が明示的に指定されなかった時に、省略時に返すHTMLファイ
ル名を指定します。
なし
AlwaysWelcome
Welcomeディレクティブで指定されたファイルの提供方法を制御します。
On
AccessLog
ブラウザからのアクセスを記録するアクセス・ログの名前を指定します。
なし
ErrorLog
エラー・ログの名前を指定します。
なし
なし
47
3-3.⑦HTTPサーバーの開始/終了
⑦HTTPサーバーの開始と終了
それでは実際に作成したHTTPサー
バーを開始/終了させましょう。
①「サーバー・インスタンス」をクリッ
ク。
③
①
②
②「サーバー・インスタンスの処理」
をクリック。
③開始/終了させるインスタンスを指
定して“開始ボタン”、“終了ボタ
ン”
を押すと開始/終了します。
開始後、5250画面から
WRKACTJOBコマンドを使用して稼
動していることが確認出来ます。
48
HTTP属性(CHGHTTPAコマンド)で
自動開始=*YESとなっているが、個
別にインスタンスの自動開始する/し
ないを制御する場合は「インスタン
ス・パラメータの変更」で自動開始を
指定して制御可能です。
49
3-4.5250画面からのアクセス
– 5250画面からのアクセス
• 今までは管理用HTTPサーバーを介してWebブラウザによるアクセス方法を説明
しましたが、5250画面から直接編集/設定することも可能です。
– WRKHTTPCFG CFG(HTTPサーバー構成名)
– 下図は今回作成した「WEB01」の設定内容です。
WRKHTTPCFG CFG(WEB01)
HTTP 構成の処理
システム :
構成名 . . . . . . . . . . . . . :
オプションを入力して,実行キーを押してください。
1= 追加 2= 変更 3= コピー 4= 除去 5= 表示
OPT
順序番号
項目
S65FF18A
WEB01
13= 挿入
HTTP 構成の処理
構成名 . . . . . . . . . . . . . :
システム :
S65FF18A
WEB01
オプションを入力して,実行キーを押してください。
# HTTP CONFIGURATION FILE
1= 追加 2= 変更 3= コピー 4= 除去 5= 表示
Welcome index.html
HostName mallas04.nagoya.japan.ibm.com
OPT
順序番号
項目
BindSpecific Off
Port 80
00120
Disable CONNECT
UserID %%SERVER%%
00130
Disable DELETE
DNS-Lookup Off
00140
Disable PUT
RuleCaseSense Off
00150
Enable GET
Imbeds Off SSIOnly
00160
Enable HEAD
AlwaysWelcome On
00170
Enable OPTIONS
DirAccess Off
00180
Enable POST
続く ...
00190
Enable TRACE
F3= 終了
F5= 最新表示 F6= リストの印刷 F12= 取消し F17= 最上部
00200
Pass /* /WebDocs/*
F18= 最下部 F19= 順序の編集
データ変換に置換文字を使用することができる。
+
00010
00020
00030
00040
00050
00060
00070
00080
00090
00100
00110
F3= 終了
F5= 最新表示 F6= リストの印刷
F18= 最下部 F19= 順序の編集
データ変換に置換文字を使用することができる。
13= 挿入
F12= 取消し
終り
F17= 最上部
+
50
– 関連コマンド、オブジェクト
• 5250画面からのコマンド操作
– HTTPサーバー属性の変更
» CHGHTTPA
– HTTPサーバー構成(インスタンス作成/編集)
» WRKHTTPCFG
– HTTPサーバーの開始/終了
» STRTCPSVR SERVER(*HTTP) HTTPSVR(インスタンス名)
» ENDTCPSVR SERVER(*HTTP) HTTPSVR(インスタンス名)
• オブジェクト
– 前述の通りHTTP構成の実体はQUSRSYSライブラリーの物理ファイルに
存在します。これらのファイルはバックアップを取ることをお勧めいたします。
QATMHTTP
*FILE
PF-DTA
HTTP SERVER ATTRIBUTES FILE
QATMHINSTA
*FILE
PF-DTA
*ADMIN INSTANCE FILE
QATMHINSTC
*FILE
PF-DTA
HTTP SERVER INSTANCE FILE
QATMHTTPA
*FILE
PF-DTA
USER ADMIN CONFIG PHYSICAL FILE
QATMHTTPC
*FILE
PF-DTA
HTTP SERVER CONFIGURATION FILE
51
4.CGI
• CGIとは
–
HTMLとHTTPにより全世界に向けて情報発信が出来るようになりました。美しい画像
を含むHTML文書で掲示板を作ったり、社内文書を配布することも出来ます。さて、あ
なたはこれで満足ですか? 基幹システム上のデータをWebブラウザからダイナミックに
検索したいと思いませんか? あるいはユーザーがWebブラウザからデータを入力でき
たらと思いませんか?
–
このようなWebブラウザとWebサーバーとの間で対話的な処理を実現するために
CGI(Common Gateway Interface)が考えだされました。
CGIはHTTPサーバーとサーバー上で動作するプログラムとの橋渡しをします。
–
HTMLもデータを入力するための<form>タグが用意され、Webブラウザ上で入力した
値をサーバーに返す機能を持ちました。今や多くのサイトがHTMLフォームと従来のア
プリケーション間のインターフェース(CGI)を書き、Webブラウザをそのアプリケーション
の入出力端末としています。
これは開発者がクライアント側のアプリケーション開発/配布に煩わされることなく、クラ
イアント/サーバー型アプリケーションを実現する可能性を開きます。
–
CGIにもHTTPと同様にバージョンがあり、IBM HTTP Server for iSeries (Original)の
CGIはバージョン1.1をサポートしています。
52
③
②
URLがプログラムの場合、
HTTPサーバーがプログラ
ムを呼出す
データベースにアクセス
したり、他のプログラムを
呼び出す
CGI
プログラム
④
①
Webブラウザ
が要求を出す。
TCP/IPネットワーク
⑤
HTMLドキュメントが送られ、ブ
ラウザに表示される。
表示結果を生成して
サーバーに戻す
53
4-1.iSeriesのCGI
• iSeriesのCGI
– 環境変数/標準入力(出力)
• CGIの考え方は元々UNIXの“環境変数”や“標準入力(出力)”を使用して動作し
ます。これらはiSeriesではCコンパイラを利用している場合を除いてなじみの薄
いものですが、ここでは詳細な説明は割愛致します。
• iSeries上でCGIアプリケーションを構築するために、これらの環境変数、標準入
力の機能を実現するシステムAPIが提供されています。
このシステムAPIを使用してアプリケーションを作成します。
実行イメージ(概要)
呼出し
環境変数
HTTP
条件入力
CGIプログラム
(RPG/COBOL)
システムAPI呼出し
標準入力
サ
ー
バ
ー
結果表示
標準出力
システムAPI呼出し
54
(参考)
• 標準入力/標準出力とは、プログラムからみた時に入出力用のデバイス(キー
ボード、ディスプレイ)をファイルと同じようにポイントとして扱うもので、C言語では
標準関数としてそれらをサポートしてます。
– 通常、標準入力元はキーボードからの入力に割当てられます。
リダイレクトの機能を使用すると、そのセッション内で一時的に入力元を
ファイルに変更して、あらかじめ作成しておいたファイルを読み込み、あた
かもキーボードからの入力が行なわれたかのようなシミュレートを行なうこ
とが出来ます。
– 標準出力はディスプレイに割当てられ、これもリダイエクト機能を使用して
ディスプレイへの表示内容をファイルに書出すことが出来ます。
• iSeriesの場合、C言語ではこれらの機能を標準関数で提供していますが、
RPG/COBOLではネイティブの命令コードはありません。
従ってHTTPサーバー用に用意されたシステムAPIを使用して標準入力/標準出
力をシミュレートします。
標準入力
リダイレクト
標準出力
リダイレクト
55
4-2.プログラミングに関して
– プログラミング
• 前述のシステムAPIを使用し、サービス・プログラム(システム提供)とバインドさせ
る必要があるため、プログラミング言語はILEでなければなりません。
– ILE-RPG , ILE-COBOL , ILE-C
• システムのAPIは多数ありますが、多くは以下の3つを使用します。
– 環境変数 : QtmhGetEnv
– 標準入力 : QtmhRdStin
– 標準出力 : QtmhWrStout
• EBCIDC←→ASCIIのコード変換が必要です。
– ユーザー・コーディングによるコード変換も可能ですが、正しいCCSIDの指
定および適切なシステムAPIを使用することで、ユーザー・アプリケーション
側ではコード変換を意識しないで済むことが多いでしょう。
– 後述のHTTPサーバー構成で、システムが自動的にコード変換を行なうよ
うにするための設定がありますので、確認下さい。
56
実行イメージ(詳細)
呼出し
CGIプログラム
IBM提供の
サービス・プログラム
QTCP/QTMHCGI
条件入力
HTTP
サ
ー
バ
ー
環境変数
QtmhGetEnv
標準入力
QtmhRdStin
CGIモジュール
(RPG,COBOL)
CALLB QtmhGetEnv
環境変数:QUERY_STRING
データベースの読取、更新
各種演算
その他
システムAPI
出力(HTML)の準備
標準出力
QtmhWrStout
CALLB QtmhWrStout
結果表示
57
– メソッド
• HTTPサーバー構成の部分でも若干述べましたが、ブラウザからHTTPサーバー
へアクセスする際にいくつかの“要求方法”があります。
この“要求方法”のことをメソッドと言います。
• 具体的には「ブラウザから入力したデータをHTTPサーバーに受渡し、所定の
CGIプログラムを起動する」ための方法として“GET”および“POST”の2つのメ
ソッドがあります。
– GETメソッド
» 「環境変数」を利用してデータを受渡します。
» 扱いが簡単ですが、データ長に制限があります。
– POSTメソッド
» 「標準入力」を利用してデータを受渡します。
» 扱いが若干複雑ですが、データ長に制限がありません。
• 上述のどちらのメソッドを使うかでCGIプログラムのデータを受け取る部分のコー
ディングが変わります。
一般的には制約のないPOSTが使われることが多いようです。
• 実際にブラウザが「どちらのメソッドを使用してアクセスしてくるか、どのCGIプロ
グラムを呼出すか」はHTML内で記述します。
58
– 環境変数
• 通常、CGIプログラムはメソッドにかかわらず環境変数を参照して処理を行ない
ます。HTTPサーバーはCGIプログラムを呼出す毎に、環境変数をセットしてCGI
プログラムから利用出来るようにします。
• IBM HTTP Server for iSeries (Original)が提供する環境変数には次のようなも
のがあります。
環境変数
内容
例
SERVER_NAME
HTTPサーバーのホスト名(IPアドレス、DNS別
名)
www.ibm.com
SERVER_PORT
要求が送られてきたポート番号
80
QUERY_STRING
ブラウザから(フォーム)送られてきた値
CUSTNO=01050
REQUEST_METHOD
要求されたメソッド
GET
SCRIPT_NAME
実行されるCGIプログラムのパス名
/cgi-bin/CGI01.PGM
REMOTE_HOST
要求を発行したクライアントのホスト名
xxx.ibm.com
REMODE_ADDR
要求を発行したクライアントのIPアドレス
9.170.143.201
CONTENT_TYPE
POSTのように追加情報をもつ場合はデータの
内容形式を表す
application/x-www-formurlencoded
CONTEN_LENGTH
データの長さ(POSTの場合)
12
IBM_CCSID_VALUE
サーバージョブのCCSID
5035
59
– メソッドと環境変数/標準入出力
• GETメソッドと環境変数
– メソッドGETは、環境変数「QUERY_STRING」に、ブラウザのフォーム・タ
グで指定された入力値が入るので、CGIプログラムではこの値を読み込ん
で処理を行ないます。
– このQUERY_STRINGのデータ内容は、ブラウザ上で入力された値そのま
まではなく、あるルールに基づいてエンコードされた値になっています。
– 例えばHTML上で「TEKIYO」という名前のテキスト入力項目に、ブラウザ
上で「123ABCabcアイウ漢字 +&=?」と入力すると、QUERY_STRINGは次
のようにエンコードされます。
HTMLフォーム上の入力値 : 123ABCabcアイウ漢字 +&
環境変数QUERY_STRING : TEKIYO=123ABCabc%B1%B2%B3%8A%BF%8E%9A+%2B%26
– エンコードのルール(詳細はRFC1630,RFC1738を参照ください。)
» HTML上の項目名が先頭に附加され、入力値とは「=」で結ばれる
複数の入力項目がある場合は「&」が区切り文字として使われる。
» 使用される文字は7ビットASCIIのみで、8ビットASCII(SJISカタカナ、
漢字のほとんど)、制御文字(改行)、特殊記号(+-/\?)の多くは「%」の
後ろに16進数文字を付けた形式(tripletと呼ばれる)で表される。
» スペース(ブランク)は「+」に変換される。
60
• POSTメソッドと標準入力
– 一方、メソッドPOSTの場合はHTML上のフォーム入力値は標準入力として
渡されるので、環境変数「QUERY_STRING」は空値です。
CGIプログラムは最初に環境変数「CONTENT_LENGTH」を読取り、その
長さだけ標準入力からデータ部分を読込みます。
• 標準出力
– ブラウザからの入力値を受け取るには、上述の「GETメソッドと環境変数」
もしくは「POSTメソッドと標準入力」の方法ですが、ブラウザへの出力はど
ちらのメソッドにもかかわらず「標準出力」を使用します。
– また、どちらのメソッドを使用する場合でも必ず標準出力は必須です。
これは標準出力処理のないCGIプログラムを呼出すと、いつまでたっても
応答が戻らずブラウザ側で処理を打ち切らなければなりません。 (もしくは
タイムアウト・エラーとなる)
従ってiSeries上でバッチプログラムを起動する場合でも何らかの返答(例
えば「処理を受付けました」とのメッセージを出力する)を返さなければなり
ません。
61
4-3.CGIプログラムの呼出し、HTTP構成
– CGIプログラムの呼出し
• CGIプログラムを呼出すためのHTML記述
– HTMLの「フォーム・タグ」を使用して記述します。
62
<HTML>
<HEAD><TITLE>Welcome to iSeries CGI Program</TITLE></HEAD>
<BODY bgcolor="#ffffff">
<center><H1>CGI(ILE-RPG)</H1></center>
<HR>
<center><H2>得意先マスター検索</H2></center>
①<FORM method="GET" action="/cgi-bin/CGI01.PGM">
5桁の得意先番号を入力し、検索ボタンを押して下さい。<BR><BR>
② <INPUT TYPE="TEXT" NAME="CUSTNO" SIZE="6" MAXLENGTH="5" VALUE="">
③ <INPUT TYPE="SUBMIT" VALUE="検索">
④ <INPUT TYPE="RESET" VALUE="クリア">
</FORM>
<HR>
</BODY>
</HTML>
①<form>~</form>
フォーム・タグで囲まれた範囲内
の入力データがHTTPサーバー
に渡されます。
フォーム・タグのmethod属性で
メソッドの種類、action属性で
CGIプログラム名を指定します。
左の例ではGETメソッドを使用し
て/cgi-binというディレクトリー下
に存在するCGI01というプログラ
ムを起動することになります。
②③④<input>
インプット・タグで入力項目を記
述します。
(iSeriesで言えば入力フィールド)
インプット・タグのtype属性でそ
の入力項目のタイプを指定します。
通常の入力項目はtext、プログラ
ムの起動はsubmit、入力項目を
クリアするにはresetなどです。
63
– CGIプログラムの呼出しとパスの指定
• HTTPサーバー構成のパスの設定
– 前ページの通りHTML内で「どのプログラムを起動するか」を指定しますが、
これだけでiSeries上に存在するプログラムが起動できる訳ではありません。
– HTTPサーバー構成で「起動可能なプログラム」を設定しておく必要があり
ます。
• HTTPサーバー構成の「経路指定」
①アクションで“Exec”を選択。
② URLテンプレートにはブラウザで
指定するURLパスを入力。
ここではルート(/)を指定。
①
②
③
③代替ファイル・パスにはiSeries上
の実際の物理パスを指定。
実際RPGで記述されたCGIプロ
グラムが存在するライブラリー名
を指定します。
64
今回のサンプルではブラウザから
は/cgi-binというディレクトリーにある
プログラムが起動できるように見え
ます。
実際のiSeries上の物理的なパスは
ディレクトリーではなく、ライブラリー
なので、ライブラリーの指定をします。
この時、ネーミング・ルールはIFSの
ルールに従って指定しなければなり
ません。
/QSYS.LIB/ライブラリー名.LIB
また、当サンプルではワイルド・カー
ド指定をしているので、該当ライブラ
リーに存在する全てのプログラムを
起動することが出来ます。
Exec /cgi-bin/*.pgm /QSYS.LIB/CGI.LIB/*
場合によってはプログラム名を明示
的に指定し、そのプログラムのみ起
動させることも可能です。
65
– CGIに関する設定
• HTTPサーバー構成のCGI設定
– CGIプログラムはOS/400のネイティブ環境(EBCDICコード)で稼動するた
め、最終的に出力データをブラウザに送信する前にEBCDIC→ASCIIの
コード変換が必要になります。コード変換そのものはシステムが行います
が、その変換を行なうための文字コード情報を指定します。
①「構成」より「CGI」をクリック。
②「CGI設定」をクリック。
③
④
①
②
③サーバー(OS/400)側のCCSID
を指定します。
日本語環境の場合は5035。
④クライアント(ブラウザ)側のCCSID
を指定します。
日本語Windowsの場合は943。
66
– HTTPサーバー構成のまとめ
• CGIに関連するHTTPサーバー構成です。
Execディレクティブによる実行可能
なCGIプログラムの指定。
DefaultFsCCSIDディレクティブ、
及びDefaultNetCCSIDディレクティ
ブによるEBCDIC→ASCIIコード変
換の指定。
67
4-4.CGIプログラムの開発
• iSeriesにおけるCGIプログラムの開発
– ILE-RPGによるCGIプログラム
• ソース・ファイルの準備
– システムAPIは英大文字・小文字を区別するので、ソース・ファイル作成時
に適切なCCSIDを指定しなければなりません。
» CRTSRCPF FILE(CGILIB/QRPGLESRC) RCDLEN(112)
IGCDTA(*YES) CCSID(5035)
» SEUにて編集する際も「大文字入力専用=Y」となっている場合は
「N」にして下さい。SEUにて編集開始後、“F13=セッション省略時の
値の変更”画面。
• エミュレータの準備
– 5250エミュレータも英小文字が扱えるように設定します。
» ホストコードページを「939」
– ジョブの実行属性も英小文字が扱えるように設定します。
» CHGJOB CCSID(5305)
68
– CGIプログラムの実行環境
• 実行時ユーザー・プロフィール
– CGIプログラムはシステム提供のユーザー・プロフィール「QTMHHTP1」に
て実行されます(変更することは出来ません)。
• ライブラリー・リスト
– CGIプログラム内でアクセスするオブジェクト(例えばF仕様書で指定された
データベース・ファイルにアクセスする)は、従来のプログラムの実行環境と
同様に、HTTPサーバージョブのライブラリー・リストに存在しなければなり
ません。以下のいずれかの方法で、CGIプログラムが参照できるようにす
る必要があります。
» システム値 QUSRLIBL に登録しておく
» CGIプログラムの実行ユーザーである「QTMHHTP1」のユーザー・
プロフィール属性のライブラリー・リストに指定する
» CGIプログラムの中でQCMDEXC等を使用して一時的にアクセス出
来るようにする(データベースであればOVRDBFコマンド)
• アクセス権限
– CGIプログラムはシステム提供のユーザー・プロフィール「QTMHHTP1」に
て実行されます。従って上述のライブラリーやその中のオブジェクトに対し
て適切なアクセス権限が必要になります。
69
– CGIプログラムの開発手順概要
• コーディング
– 前述のシステムAPIを使用してコーディング。
• ソース・ファイルよりモジュールとしてコンパイル
– モジュール化すること。
– CRTRPGMOD MODULE(CGILIB/xxx)
SRCFILE(CGILIB/QRPGLESRC) SRCMBR(*MODULE)
DBGVIEW(*ALL) (*DBGVIEWはデバッグのためのパラメータです)
• 上記コンパイル済みモジュールとシステム提供のサービス・プログラムをバインド
– サービス・プログラムは「QTCP/QTMHCGI」
– CRTPGM PGM(CGILIB/xxx) MODULE(*PGM)
BNDSRVPGM(QTCP/QTMHCGI)
ILE-RPGプログラム
ILE-RPGソース
ILE-RPGモジュール
メンバー名
xxx
*MODULE
xxx
コンパイル
CRTRPGMOD
*PGM = xxx
*MODULE = xxx
バインド
CRTPGM
CALLB QtmhRdStin
CALLB QtmhWrStout
QhtmGetEnv
*SRVPGM
QtmhRdStin
QtmhGetEnv
QTMHCGI
QtmhWrStout
QtmhRdStin
QtmhCvtDb
QtmhWrStout
QtmhCvtDb
70
– CGIプログラムのデバッグ
• デバッグ方法
– CGIプログラムはバッチ型で常駐するHTTPサーバージョブの内部で呼び
出されるので、そのジョブに対してトレース等を取りながらデバッグを行なう
ことになります。例えば下記のような方法です。
» TCP/IPの通信トレースを採取、解析する。
» OS/400のバッチ・ジョブのデバッグを行なう。
• バッチ・ジョブのデバッグ方法の場合
– HTTPサーバージョブはサブシステムQHTTPSVR下で稼動、状況が
「DEQW」のジョブがCGIを実行するジョブです。通常はこのようなジョブが
複数あり、どのジョブでCGIが実行されるかは不定です。そこであらかじめ
CHGHTTPAコマンドでパラメータNBRSVR(2 2)としてジョブ数を1つにして
おくと良いでしょう。
– ジョブが特定できたらジョブ名/ユーザー(QTMHHTTP)/ジョブ番号を特定し、
サーバー・ジョブに対してサービス・ジョブを開始し、デバッグを開始します。
» STRSRVJOB JOB(ジョブ番号/ユーザー/ジョブ名)
» STRDBG
– STRDBGコマンドを実行すると、コンパイル時にDBGVIEW(*ALL)パラメー
タが指定されていればプログラムのソースが表示され、オンライン・デバッ
グが可能になります。
» 停止点(ブレークポイント)機能が使用できます。
– デバッグが終了したらENDDBG,ENDSRVJOBでデバッグ環境を終了。
71
4-5.CGIプログラム・サンプル
• CGIプログラムのサンプル
–
それでは実際に簡単なCGIプログラムを作成する過程を順を追って見ていきましょう。
• このサンプルは「得意先マスター検索」です。
– ブラウザ上で検索キーとなる5桁の得意先番号を入力
– 入力された得意先番号を受取り、得意先マスターを検索(CHAIN命令)
– 結果のHTMLを組み立てて、ブラウザに返す。
• メソッドは扱いが簡単な「GETメソッド」を使用します。
CGIプログラム = CGILIB/CGI01
HTTP
サ
ー
バ
ー
IBM提供の
サービス・プログラム
QTCP/QTMHCGI
CGIモジュール
CGILIB/CGI01
環境変数
QtmhGetEnv
CALLB QtmhGetEnv
標準入力
QtmhRdStin
環境変数:QUERY_STRING
データベースの読取、更新
各種演算
その他
システムAPI
出力(HTML)の準備
標準出力
QtmhWrStout
CALLB QtmhWrStout
72
入力フォームの画面
検索結果の画面
73
– 入力用のHTML
• フォーム・タグ(<form>~</form>)を使用
<HTML>
<HEAD><TITLE>Welcome to iSeries CGI Program</TITLE></HEAD>
<BODY bgcolor="#ffffff">
①<form>~</form>
フォーム・タグで囲む。
-method=GET
-action=CGIプログラム名
<center><H1>CGI(ILE-RPG)</H1></center>
<HR>
<center><H2>得意先マスター検索</H2></center>
①<FORM method="GET" action="/cgi-bin/CGI01.PGM">
5桁の得意先番号を入力し、検索ボタンを押して下さい。<BR><BR>
② <INPUT TYPE="TEXT" NAME="CUSTNO" SIZE="6" MAXLENGTH="5" VALUE="">
③ <INPUT TYPE="SUBMIT" VALUE="検索">
④ <INPUT TYPE="RESET" VALUE="クリア">
</FORM>
<HR>
</BODY>
</HTML>
左の例ではGETメソッドを使用し
て/cgi-binというディレクトリー下
に存在するCGI01というプログラ
ムを起動することになります。
実際にはHTTPサーバー構成で
ライブラリーCGILIBにあるプログ
ラムが起動されます。
②③④<input>
インプット・タグで入力項目を記述。
-検索キーとなる得意先番号
-実行用ボタン
-入力項目のクリア・ボタン
74
FTOKMSP
IF
E
K DISK
①D* 環境取得変数 API ‘QtmhGetEnv’ のパラメータ
DENBUFF
S
2048A INZ
DENBUFFLN
S
9B 0 INZ(2048)
DENACTLN
S
9B 0
DENVARNAME
S
20A INZ('QUERY_STRING')
DENVARLN
S
9B 0 INZ(12)
②D* 標準出力書出 API 'QtmhWrStout' のパラメータ
DOUT
S
2048A INZ
DOUTLN
S
9B 0 INZ(2048)
D* コンパイル時配列
③DHTML
S
80
DIM(14) PERRCD(1) CTDATA
①環境変数取得のためのAPI“QtmhGetEnv”用のパラメータ定義
-ENBUFF
-ENBUFFLN
-ENDACTLN
-ENVARNAME
-ENVARLN
: 環境変数の内容が保持されるバッファ(文字型変数)
: 上記バッファの長さ
: 環境変数の実データ部の文字列長
: 取得する環境変数の名前
: 上記環境変数の名前の長さ
今回のサンプルでは環境変数QUERY_STRINGを使用するので、以下を固定値としてセット。
-ENVARNAME
-ENVARLN
= “QUERY_STRING”
= 12 (“QUERY_STRING”の文字列長)
②標準出力のためのAPI“QtmhWrStout”用のパラメータ定義
-OUT
-OUTLN
: 標準出力データを保持するバッファ(文字型変数)
: 上記バッファの実データ部の文字列長
③配列定義
当CGIプログラム内で出力するHTMLを記述。
汎用性を持たせるには配列ではなく、データベース等に持たせるほうが良い。
75
④D* EBCDIC 改行コード
DNL
C
X'15'
D* HTML 固定文字
DBR
C
'<BR>'
DBL
C
'<IMG SRC="/ball-blue.gif">'
DLI
C
'<LI>'
⑤D* ユーザースペース・エラーコード
/COPY QSYSINC/QRPGLESRC,QUSEC
**
⑥C* HTML ヘッダー
C
1
DO
12
I
3 0
C
CAT
HTML(I):0
OUT
C
CAT
NL :0
OUT
C
ENDDO
④EBCDICの改行文字
IBM HTTP Server for iSeries (Original)の仕様で、標準出力に書出すデータの各行には長さ
に制限があり(OS/400バージョンにより長さが異なる)、行の最後には改行コード(x’15’)が必要。
⑤エラー・ハンドリング用
エラーコード情報。システム提供のソースを/COPYにて取込む。
⑥HTMLヘッダー情報のセット
ブラウザへ送信するコンテンツのHTMLヘッダー情報のセット。
最終的には標準出力APIを用いてブラウザに送信されるが、まずは標準出力用の保管バッファ
「OUT」へセットしている。(パラメータ詳細は②を参照)
76
⑦C* 環境変数よりパラメータ(得意先番号)取出し
C
CALLB
'QtmhGetEnv'
C
PARM
ENBUFF
C
PARM
ENBUFFLN
C
PARM
ENACTLN
C
PARM
ENVARNAME
C
PARM
ENVARLN
C
PARM
QUSEC
⑧C* HTML ボディー(得意先情報)
C
MOVEL
*BLANK
CUSTNO
C
EVAL
CUSTNO=%SUBST(ENBUFF:8:5)
C
CUSTNO
CHAIN
TOKMSR
5
99
⑦環境変数のデータ取得用API”QtmhGetEnv”の呼出し
CALLB命令を使用して呼出し。これはサービス・プログラムとしてバインドされるため。
(パラメータ詳細は①を参照)
⑧環境変数のデータ部からの取出し
上記⑦のAPI呼び出しで、保管バッファ「ENBUFF」に環境変数の値が入っており、その中から
必要なものだけを取出す必要がある。
例えば今回のサンプルでは入力フォーム上での項目名が“CUSTNO”であり、入力された値が
“01020”だとすると、環境変数QUERY_STRINGには“CUSTNO=01020”という値がセットされ
る。(“フォームの項目名=入力値”が返される)従って、RPGの組込み関数%SUBSTを使用して
必要な部分、すなわち実際に入力された値の“01020”だけを抽出する。
%SUBST(ENBUFF:8:5)
5文字分(入力される得意先番号は5桁)
8文字め (抽出する得意先番号の開始位置)
環境変数QUERY_STRINGの内容がセットされているバッファ
77
⑨C
CUSTNO
CHAIN
TOKMSR
C* (得意先番号が存在した場合)
⑩C
*IN99
IFEQ
*OFF
C* (パック --> 文字変換)
C
MOVE
TKNYUK
D
C
MOVE
TKGURI
T#GURI
C
MOVE
TKNURI
T#NURI
C
MOVE
TKZURI
T#ZURI
C
MOVE
TKUZAN
T#UZAN
C
MOVE
TKGEND
T#GEND
⑪C
EVAL
OUT=%TRIM(OUT) +
C
BL + ' 得意先番号 =
C
BL + ' 得意名
=
C
BL + ' 住所1
=
C
BL + ' 住所2
=
C
BL + ' 電話番号
=
99
6
9
9
9
9
9
'
'
'
'
'
+
+
+
+
+
TKBANG
TKNAKJ
TKADR1
TKADR2
TKTELE
+
+
+
+
+
BR
BR
BR
BR
BR
+
+
+
+
+
NL
NL
NL
NL
NL
+
+
+
+
+
⑨得意先マスターファイルへのアクセス
⑩該当レコードが存在した場合の処理
⑪標準出力へ書出すためのHTMLをセット
標準出力へ書出すためのパラメータ「OUT」に、HTML内容(データベースから取得したデータ
含むをセット。余分なブランクを取り除くためRPG組込み関数%TRIMを使用。
また、ブラウザには従来のエミュレータのような編集表示を行なう機能はないので、CGIプログ
ラム内で文字列編集する必要がある。例えば金額に関しては「先頭0の消去」、「3桁ごとの
カンマ区切り」や日付に関しては「年/月/日」のようなスラッシュ区切り、等。
78
C
BL + ' 最終入金日 = ' +
C
%SUBST(D:1:2) + '/' +
C
%SUBST(D:3:2) + '/' +
C
%SUBST(D:5:2) + BR + NL +
C
'<UL>' +
C
LI + ' 当月売上高 = ' + T#GURI
C
LI + ' 当年売上高 = ' + T#NURI
C
LI + ' 前年売上高 = ' + T#ZURI
C
LI + ' 売掛金残高 = ' + T#UZAN
C
LI + ' 信用限度額 = ' + T#GEND
C
'</UL>'
⑫C
ELSE
C* (得意先番号が存在しない場合)
⑬C
EVAL
OUT=%TRIM(OUT) + HTML(15) + NL
C
ENDIF
⑭C* HTML トレーラー
C
CAT
HTML(13):0
OUT
C
CAT
NL :0
OUT
+
+
+
+
+
BR
BR
BR
BR
BR
+
+
+
+
+
NL
NL
NL
NL
NL
+
+
+
+
+
⑫該当レコードが存在しない場合
⑬「存在しない」旨のエラー・メッセージを標準出力用バッファにセット
⑭残りのHTML内容をセット
79
C* 標準出力への書出し
⑮C
' '
CHECKR
⑯C
CALLB
C
PARM
C
PARM
C
PARM
C*
C
SETON
C
RETURN
OUT
OUTLN
'QtmhWrStout'
OUT
OUTLN
QUSEC
LR
⑮標準出力用のバッファに格納されているデータの長さをチェック
標準出力に書出す際に、実際にどれだけの文字列(HTMLコンテンツ)を書出すのか、そのデー
タ長を検査してパラメータに渡さなければならない。
具体的にはバッファ「OUT」に出力情報が格納されているので、CHECKR命令を使用して文字
が何バイトセットされているかをチェックしている。
⑯標準出力用API”QtmhWrStout”の呼出し
バッファ「OUT」にセットされたHTMLデータ、及びそのデータ長をパラメータに渡す。
(パラメータ詳細は②を参照)
80
⑰**CTDATA HTML
⑱CONTENT-TYPE: TEXT/HTML
⑲<center><H1>CGI(ILE-RPG)</H1></center>
<HR>
<center><H2>得意先マスター検索</H2></center>
<FORM method="GET" action="/cgi-bin/CGI01.PGM">
5桁の得意先番号を入力し、検索ボタンを押して下さい。<BR><BR>
<INPUT TYPE="TEXT" NAME="CUSTNO" SIZE="6" MAXLENGTH="5" VALUE="">
<INPUT TYPE="SUBMIT" VALUE="検索">
<INPUT TYPE="RESET" VALUE="クリア">
</FORM>
<HR>
</BODY></HTML>
⑳<B><I> 該当する得意先なし。 </I></B>
⑰標準出力へ書出すHTMLの固定情報
当サンプルではコンパイル時配列として定義しているが、汎用性を考慮するとデータベース等
に保存するほうが良いでしょう。
以下、その配列の中の固定情報部分
⑱HTMLヘッダ情報に関する情報
⑲HTML本文
⑳該当レコードがなかった場合のHTML本文
81
•
ソース・コード 1 of 3
000001
000002
000003
000004
000005
000006
000007
000008
000009
000010
000011
000012
000013
000014
000015
000016
000017
000018
000019
000020
000021
000022
000023
000024
000025
000026
000027
000028
000029
000030
000031
000032
000033
000034
FTOKMSP
IF
E
K DISK
D* 環境取得変数 API 'QtmhGetEnv' のパラメータ
DENBUFF
S
2048A
INZ
DENBUFFLN
S
9B 0 INZ(2048)
DENACTLN
S
9B 0
DENVARNAME
S
20A
INZ('QUERY_STRING')
DENVARLN
S
9B 0 INZ(12)
D* 標準出力書出 API 'QtmhWrStout' のパラメータ
DOUT
S
2048A
INZ
DOUTLN
S
9B 0 INZ(2048)
D* コンパイル時配列
DHTML
S
80
DIM(15) PERRCD(1) CTDATA
D* EBCDIC 改行コード
DNL
C
X'15'
D* HTML 固定文字
DBR
C
'<BR>'
DBL
C
'<IMG SRC="/Images/ball-blue.gif">'
DLI
C
'<LI>'
D* ユーザースペース・エラーコード
/COPY QSYSINC/QRPGLESRC,QUSEC
**
C* HTML ヘッダー
C
1
DO
12
I
3 0
C
CAT
HTML(I):0
OUT
C
CAT
NL :0
OUT
C
ENDDO
C* 環境変数よりパラメータ(得意先番号)取出し
C
CALLB
'QtmhGetEnv'
C
PARM
ENBUFF
C
PARM
ENBUFFLN
C
PARM
ENACTLN
C
PARM
ENVARNAME
C
PARM
ENVARLN
C
PARM
QUSEC
82
•
ソース・コード 2 of 3
000035
000036
000037
000038
000039
000040
000041
000042
000043
000044
000045
000046
000047
000048
000049
000050
000051
000052
000053
000054
000055
000056
000057
000058
000059
000060
000061
000062
000063
000064
000065
000066
000067
000068
C*
C
C
C
C*
C
C*
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C*
C
C
HTML ボディー(得意先情報)
MOVEL
*BLANK
CUSTNO
5
EVAL
CUSTNO=%SUBST(ENBUFF:8:5)
CUSTNO
CHAIN
TOKMSR
99
(得意先番号が存在した場合)
*IN99
IFEQ
*OFF
(パック --> 文字変換)
MOVE
TKNYUK
D
6
MOVE
TKGURI
T#GURI
9
MOVE
TKNURI
T#NURI
9
MOVE
TKZURI
T#ZURI
9
MOVE
TKUZAN
T#UZAN
9
MOVE
TKGEND
T#GEND
9
EVAL
OUT=%TRIM(OUT) +
BL + ' 得意先番号 = ' + TKBANG + BR + NL +
BL + ' 得意名
= ' + TKNAKJ + BR + NL +
BL + ' 住所1
= ' + TKADR1 + BR + NL +
BL + ' 住所2
= ' + TKADR2 + BR + NL +
BL + ' 電話番号
= ' + TKTELE + BR + NL +
BL + ' 最終入金日 = ' +
%SUBST(D:1:2) + '/' +
%SUBST(D:3:2) + '/' +
%SUBST(D:5:2) + BR + NL +
'<UL>' +
LI + ' 当月売上高 = ' + T#GURI + BR + NL +
LI + ' 当年売上高 = ' + T#NURI + BR + NL +
LI + ' 前年売上高 = ' + T#ZURI + BR + NL +
LI + ' 売掛金残高 = ' + T#UZAN + BR + NL +
LI + ' 信用限度額 = ' + T#GEND + BR + NL +
'</UL>'
ELSE
(得意先番号が存在しない場合)
EVAL
OUT=%TRIM(OUT) + HTML(15) + NL
ENDIF
83
•
ソース・コード 3 of 3
000069
C* HTML トレーラー
000070
C
CAT
HTML(13):0
OUT
000071
C
CAT
NL :0
OUT
000072
C* 標準出力への書出し
000073
C
' '
CHECKR
OUT
OUTLN
000074
C
CALLB
'QtmhWrStout'
000075
C
PARM
OUT
000076
C
PARM
OUTLN
000077
C
PARM
QUSEC
000078
C*
000079
C
SETON
000080
C
RETURN
000081 **CTDATA HTML
000082 CONTENT-TYPE: TEXT/HTML
00083
00084
<center><H1>CGI(ILE-RPG)</H1></center>
00085
<HR>
00086
<center><H2>得意先マスター検索</H2></center>
00087
<FORM method="GET" action="/cgi-bin/CGI01.PGM">
00088
5桁の得意先番号を入力し、検索ボタンを押して下さい。<BR><BR>
00089
<INPUT TYPE="TEXT" NAME="CUSTNO" SIZE="6" MAXLENGTH="5" VALUE="">
00090
<INPUT TYPE="SUBMIT" VALUE="検索">
00091
<INPUT TYPE="RESET" VALUE="クリア">
00092
</FORM>
00093
<HR>
00094
</BODY></HTML>
00095
00096 <B><I> 該当する得意先なし。 </I></B>
LR
84
– コンパイル
• RPGモジュールの作成
– CRTRPGMOD MODULE(CGILIB/CGI01)
SRCFILE(CGILIB/QRPGLESRC) SRCMBR(*MODULE)
DBGVIEW(*ALL)
• RPGプログラムの作成
– CRTPGM PGM(CGILIB/CGI01) MODULE(*PGM)
BNDSRVPGM(QTCP/QTMHCGI)