このセクションでは、次のトピックについて説明します。
次のソフトウェアをインストールする必要があります。
Web クライアント上 | ブラウザソフトウェア(Mozilla Firefox や Microsoft Internet Explorer など) |
Web サーバー上 | HTTP サーバーソフトウェア(Apache Server や Microsoft Internet Information Server など) |
通信が RPC で使用される場合は、異なる前提条件を満たす必要があります。
RPC | Software AG 製品の EntireX Communicator のブローカーがインストールされている必要があります(インストールについては、EntireX Communicator のドキュメントを参照)。 |
Natural Web サーバーエクステンション部分は、Web ブラウザと Natural RPC サーバーとの通信に必要です。
Natural Web インターフェイスの SYSWEB について、次の前提条件を満たしている必要があります。
最新バージョンの Natural をインストールする必要があります。
ライブラリ SYSWEB。
Natural の steplib が使用可能になっているか、ライブラリ SYSWEB の内容を SYSTEM ライブラリまたは RPC に呼び出されるユーザーライブラリにコピーしている必要があります。
パラメータデータエリア W3PARM。
Natural RPC スタブまたは NaturalX。
以下の図は、サブプログラムを構築する方法を示しています。
HTML エディタを使用します。
HTML エディタを使用して、HTML および Natural コードを入力します。
次に、それを Natural ソースに変換します。
最後に、生成プログラムを Natural に移動します (Natural で直接コーディングします)。
処理の各段階は数字で識別されます。これらの段階で発生する処理の詳細については、以下で説明します。
1a. Natural コードは、ユーザーライブラリで作成されて保存されます。
サーバー側で、HTML タグをコードに含めることによって、または HTML タグを生成する事前に組み込まれたサブプログラムを呼び出すことによって、Natural コードを作成します。 その後、サーバープログラムとして保存するか、サブプログラム WEB-WIZ を使用してデフォルトプログラムを生成します。
1b. Natural コードは HTML として入力されます。 2 に進みます。
HTML エディタを使用して、HTML ページを作成します。
プログラム HTML2NAT によって、HTML から Natural ソースが生成されます。
ライブラリ SYSWEBのプログラム HTML2NAT を開始し、手順 1b で作成した HTML ページを変換します。
生成された Natural ソースをユーザーライブラリに移動します。
HTML 戻りページは、送信可能な最大データに制限されます。 この最大値は、戻りページ変数によって決まります。
ライブラリ SYSWEBのサブルーチン W3INIT および W3END を呼び出して、Natural サーバーサブルーチンへのアクセスを初期化し、終了する必要があります。
常に、パラメータデータエリア W3PARM および W3CONST を使用してください。
ユーザー独自のプログラムのためのフレーム(デフォルトプログラム)を生成するために、サブプログラム WEB-WIZ を使用してください。
基本的な方法は 2 つあります。 Natural でコーディングを直接開始するか、HTML エディタを使用します。
Natural で直接コーディングする方法も 2 つあります。
戻りページの SYSWEBサブルーチン(W3HTML や W3TEXT など)への呼び出しをプログラムエディタで入力します。 ライブラリ SYSWEBのプログラムを確認します。これは、基本的なシステム関数の実行のみに役立ちます。この方法では、作成するデータタイプ(HTML や XML など)の深い知識が必要です。
HTML タグを生成するサブプログラムを呼び出します。 ライブラリ SYSWEB3(または SYSWEB)を確認します。ライブラリ SYSWEBのプログラムを使用して、基本的なシステム関数を実行できます。さらに、ライブラリ SYSWEBのプログラムで HTML タグが生成されます。この方法では、HTML の深い知識を必要とせずに、呼び出すプログラムを変更できます。
* * Example E3END * DEFINE DATA PARAMETER USING W3PARM LOCAL USING W3CONST LOCAL 1 W3VALUE (A250) END-DEFINE * --- ERROR HANDLING --- ON ERROR PERFORM W3ERROR ##W3ERROR PERFORM W3END ##RPC ESCAPE ROUTINE END-ERROR * * --- INITIALIZE W3 PROCESSING --- PERFORM W3INIT ##RPC * * --- SET TYPE OF RETURN-PAGE --- PERFORM W3CONTENT-TYPE 'text/html' * --- WRITE THE DOCUMENT --- PERFORM W3TEXT '<HTML><BODY><H2>Initialize</H2>' * * --- END THE HTML PAGE --- COMPRESS '<HR>generated:' *DATE *TIME ##HTTP_NEWLINE '</BODY></HTML>' ##HTTP_END INTO W3VALUE PERFORM W3TEXT W3VALUE * * --- END W3 PROCESSING --- PERFORM W3END ##RPC * END
例:HTML タグを生成するサブプログラムの呼び出し
* * Example E3IMAGE * DEFINE DATA PARAMETER USING W3PARM LOCAL USING W3CONST LOCAL 1 H3VALUE (A250) 1 H3VALUE-MAX (I004) 1 H3URL (A250) * 1 II (I001) 1 GIF (A064) END-DEFINE * --- ERROR HANDLING --- ON ERROR PERFORM W3ERROR ##W3ERROR PERFORM W3END ##RPC ESCAPE ROUTINE END-ERROR * * --- INITIALIZE W3 PROCESSING --- PERFORM W3INIT ##RPC * * --- Pathname of picture --- PERFORM W3READ-ENVIRONMENT "PICTURES" ' ' H3VALUE H3VALUE-MAX IF H3VALUE-MAX EQ 0 THEN GIF := "/pictures" ELSE GIF := H3VALUE END-IF * * --- START HTML API --- PERFORM H3-OPEN-HTML 'HTML Api -Image' " " " " * --- THE LEVEL 2 HEADER --- PERFORM H3-HEADER 2 'Image' * PERFORM H3-RULE 0 * PERFORM H3-HEADER 4 'left:' * COMPRESS GIF '/natw_sam.gif' INTO H3URL LEAVING NO PERFORM H3-IMAGE H3URL 'NATweb left' 219 229 "L" * FOR II 1 TO 10 PERFORM H3-LINE-BREAK END-FOR PERFORM H3-RULE 80 * PERFORM H3-HEADER 4 'small right:' * COMPRESS GIF '/natw_sam.gif' INTO H3URL LEAVING NO PERFORM H3-IMAGE H3URL 'NATweb small right' 100 100 'R' * FOR II 1 TO 5 PERFORM H3-LINE-BREAK END-FOR * PERFORM H3-RULE 0 * PERFORM H3-TIME_DATE * * --- END HTML API --- PERFORM H3-CLOSE-HTML * --- END W3 PROCESSING --- PERFORM W3END ##RPC * END
2 つの方法があります。
スタティックページを作成します(HTML を入力するだけで、Natural サブプログラムに変換されます)。
ダイナミックページを作成します(HTML と Natural プログラムコードを入力します)。
また、部分的にダイナミックで、部分的にスタティックなページを作成することもできます。
<HTML> <TITLE>NATweb - Test</TITLE> <BODY bgColor=d3d3d3 > <BR> <center> <h2> This Natural subprogram was generated by a HTML page. </h2> </CENTER> </BODY></HTML>
この Natural サブプログラムは上述した HTML ページから生成されます。
* ----- SUBPROGRAM generated out of file: * ----- C:\static.htm DEFINE DATA PARAMETER USING W3PARM LOCAL USING W3CONST LOCAL * ----- PRIVATE VARIABLES ----- 1 W3VALUE (A250) END-DEFINE * * ----- ERROR HANDLER ----- ON ERROR PERFORM W3ERROR ##W3ERROR PERFORM W3END ##RPC ESCAPE ROUTINE END-ERROR * ----- INITIALISE HTTP API ----- PERFORM W3INIT ##RPC * ----- HEADER FOR SERVER ----- PERFORM W3CONTENT-TYPE 'text/html' * PERFORM W3TEXTLINE '<HTML>' PERFORM W3TEXTLINE '<TITLE>NATweb - Test</TITLE>' PERFORM W3TEXTLINE '<BODY bgColor=d3d3d3 >' PERFORM W3TEXTLINE '<BR>' PERFORM W3TEXTLINE '<center>' PERFORM W3TEXTLINE '<h2>' PERFORM W3TEXTLINE 'This Natural subprogram was generated by a HTML page.' PERFORM W3TEXTLINE '</h2>' PERFORM W3TEXTLINE '</CENTER>' PERFORM W3TEXTLINE '</BODY></HTML>' * ----- END HTTP API ----- PERFORM W3END ##RPC * ----- END MAIN PROGRAM ----- * * ----- SUBROUTINES ----- * END
<Natural><!-- * * Read form Pers-View starting with value given by the * Parameter START * * Use HTML2NAT to generate a Natural Program * * 22.09.03 * --></Natural> <! --- Variables to read the environment ---> <Natural data><!-- * ----- DATA ----- 1 H3VALUE (A250) 1 H3MAX (I4) --></Natural> <! --- Head of the HTML page ---> <HTML> <TITLE>Natural - Environment Test</TITLE> <BODY bgColor=d3d3d3 > <BR> <center> <h2> This Natural subprogram was generated by a HTML page. The program had been precompiled out of a HTML page. <br><br> </h2> </center> <br> <hr> <! --- Subprogram to write the output to work file, from where the server will read it --- > <Natural DATA><!-- 1 #CONTENT (A1/1:48) 1 REDEFINE #CONTENT 2 #PERSONNEL-NUMBER (N8) 2 FILLER 1X 2 #NAME (A20) 2 FILLER 1X 2 #FIRST-NAME (A15) 2 FILLER 1X 2 #AGE (N2) --></Natural> <Natural SUB><!-- * ----- Do the OUTPUT ----- DEFINE SUBROUTINE WRITELINE PERFORM W3TEXT "<LI>" * #PERSONNEL-NUMBER:=PERSONNEL-NUMBER #NAME:=NAME #FIRST-NAME:=FIRST-NAME #AGE:=AGE PERFORM W3HTMLARRAY #CONTENT(*) 48 * PERFORM H3-LINE-BREAK END-SUBROUTINE --></Natural> <UL><PRE> <! --- Parameter used for reading data from the DATABASE ---> <Natural DATA><!-- * ----- DATA ----- 1 #VALUE (A20) 1 PERS-VIEW VIEW OF PERSONNEL 2 PERSONNEL-NUMBER 2 NAME 2 FIRST-NAME 2 AGE --></Natural> <! --- Main program to read the data ---> <Natural NOT> <LI>Value1 <LI>Value2 <LI>... </Natural> <Natural><!-- * --- READ ENVIRONMENT --- PERFORM W3READ-ENVIRONMENT 'START' 'P' H3VALUE H3MAX IF H3MAX GT 0 THEN #VALUE := H3VALUE ELSE #VALUE := "A" END-IF * * ----- MAIN ----- F. FIND (100) PERS-VIEW NAME > #VALUE IF NO COMPRESS 'Sorry nothing found for:' #value '!' INTO H3VALUE PERFORM W3HTMLLINE H3VALUE END-NOREC IF *NUMBER > 0 PERFORM WRITELINE END-IF END-FIND * IF *NUMBER(F.) > 0 PERFORM H3-RULE 0 * COMPRESS 'well done for: ' #value '!' ##HTTP_END INTO H3VALUE PERFORM W3HTMLLINE H3VALUE END-IF --></Natural> </PRE></UL> <! --- The footer of the HTML page --- > <hr> <BR> <center> <A HREF="index.htm">back to Index</A> This program has been generated. <Natural><!-- PERFORM H3-TIME_DATE --></Natural> </P> </CENTER> </BODY></HTML>
この Natural サブプログラムは上述した HTML ページから生成されます。
* ----- SUBPROGRAM generated out of file: * ----- C:\doit.htm DEFINE DATA PARAMETER USING W3PARM LOCAL USING W3CONST LOCAL * ----- DATA ----- 1 H3VALUE (A250) 1 H3MAX (I4) 1 #CONTENT (A1/1:48) 1 REDEFINE #CONTENT 2 #PERSONNEL-NUMBER (N8) 2 FILLER 1X 2 #NAME (A20) 2 FILLER 1X 2 #FIRST-NAME (A15) 2 FILLER 1X 2 #AGE (N2) * ----- DATA ----- 1 #VALUE (A20) 1 PERS-VIEW VIEW OF PERSONNEL 2 PERSONNEL-NUMBER 2 NAME 2 FIRST-NAME 2 AGE * ----- PRIVATE VARIABLES ----- 1 W3VALUE (A250) END-DEFINE * * ----- ERROR HANDLER ----- ON ERROR PERFORM W3ERROR ##W3ERROR PERFORM W3END ##RPC ESCAPE ROUTINE END-ERROR * ----- INITIALISE HTTP API ----- PERFORM W3INIT ##RPC * ----- HEADER FOR SERVER ----- PERFORM W3CONTENT-TYPE 'text/html' * * ----- MAIN PROGRAM ----- * * Read form Pers-View starting with value given by the * Parameter START * * Use HTML2NAT to generate a Natural Program * * 22.09.2003 * PERFORM W3TEXTLINE '<! --- Variables to read the environment --->' PERFORM W3TEXTLINE '<! --- Head of the HTML page --->' PERFORM W3TEXTLINE '<HTML>' PERFORM W3TEXTLINE '<TITLE>Natural - Environment Test</TITLE>' PERFORM W3TEXTLINE '<BODY bgColor=d3d3d3 >' PERFORM W3TEXTLINE '<BR>' PERFORM W3TEXTLINE '<center>' PERFORM W3TEXTLINE '<h2>' PERFORM W3TEXTLINE 'This Natural subprogram was generated by a HTML page. Th' -'e program had been' PERFORM W3TEXTLINE 'precompiled out of a HTML page.' PERFORM W3TEXTLINE '<br><br>' PERFORM W3TEXTLINE '</h2>' PERFORM W3TEXTLINE '</center>' PERFORM W3TEXTLINE '<br>' PERFORM W3TEXTLINE '<hr>' PERFORM W3TEXTLINE '<! --- Subprogram to write the output to work file' PERFORM W3TEXTLINE ' from where the server will read it --- >' PERFORM W3TEXTLINE '<PRE>' PERFORM W3TEXTLINE '<! --- Parameter used for reading data from the' -' DATABASE --->' PERFORM W3TEXTLINE '<! --- Main Program to read the data --->' * --- READ ENVIRONMENT --- PERFORM W3READ-ENVIRONMENT 'START' 'P' H3VALUE H3MAX IF H3MAX GT 0 THEN #VALUE := H3VALUE ELSE #VALUE := "A" END-IF * * ----- MAIN ----- F. FIND (100) PERS-VIEW NAME > #VALUE IF NO COMPRESS 'Sorry nothing found for:' #value '!' INTO H3VALUE PERFORM W3HTMLLINE H3VALUE END-NOREC IF *NUMBER > 0 PERFORM WRITELINE END-IF END-FIND * IF *NUMBER(F.) > 0 PERFORM H3-RULE 0 * COMPRESS 'well done for: ' #value '!' ##HTTP_END INTO H3VALUE PERFORM W3HTMLLINE H3VALUE END-IF PERFORM W3TEXTLINE '</PRE>' PERFORM W3TEXTLINE '<! --- The footer of the HTML page --- >' PERFORM W3TEXTLINE '<hr>' PERFORM W3TEXTLINE '<BR>' PERFORM W3TEXTLINE '<center>' PERFORM W3TEXTLINE '<A HREF="index.htm">back to Index</A>' PERFORM W3HTMLLINE 'This program has been generated.' PERFORM H3-TIME_DATE PERFORM W3TEXTLINE '</P>' PERFORM W3TEXTLINE '</CENTER>' PERFORM W3TEXTLINE '</BODY></HTML>' * ----- END HTTP API ----- PERFORM W3END ##RPC * ----- END MAIN PROGRAM ----- * * * ----- SUBROUTINES ----- * ----- Do the OUTPUT ----- DEFINE SUBROUTINE WRITELINE PERFORM W3TEXT "<LI>" * #PERSONNEL-NUMBER:=PERSONNEL-NUMBER #NAME:=NAME #FIRST-NAME:=FIRST-NAME #AGE:=AGE PERFORM W3HTMLARRAY #CONTENT(*) 48 * PERFORM H3-LINE-BREAK END-SUBROUTINE END
ローカルデータエリア W3CONST には、便利な定数値が多数あります。
##HTTP_NEWLINE, ##HTTP_NEWLINE_LENGTH
##HTTP_NEWLINE
文字列を HTML に入力すると、W3TextDynamic
を使用して #HTTP_NEWLINE
を文字列に圧縮することによって、実際の新しい行を作成するために、ライブラリ SYSWEB3(または SYSWEB)内の、先頭が W3TEXT
であるすべてのサブルーチンを使用できます。
##W3ERROR
W3ERROR の呼び出しに使用されるパラメータ。
##HTML_LT
"小なり" 記号(<)の HTML 定数値。
##HTML_GT
"大なり" 記号(>)の HTML 定数値。
##HTML_AMP
"アンパサンド" 記号(&)の HTML 定数値。
##HTML_QUOT
"二重引用符" 記号(")の HTML 定数値。
##HTML_REG
"登録商標" 記号の HTML 定数値。
##HTML_COPY
"著作権" 記号の HTML 定数値。
##HTML_NBSP
"改ページなし" スペース(' ')の HTML 定数値。
すべての入力変数は、BY VALUE で定義されます。つまり、MOVE 互換のすべての値、特に文字列を使用できます。
出力が戻りページの上限を超えている可能性がある場合に、戻りページに何バイトの空きがあるかを評価するには、ライブラリ SYSWEBのサブルーチン W3COUNTER を使用します。
サブプログラムをテストする方法は 3 つあります。
Web ブラウザからサブプログラムを呼び出します。
ライブラリ SYSWEB のサブプログラム NAT-DIR を呼び出して、Natural ライブラリの内容を確認します。 また、パラメータでライブラリの名前を指定することもできます。例えば、 http://.../sysweb/NAT-DIR?LIB=SYSEXT です。 プログラムをクリックして開始します。
Web ブラウザからサブプログラムを呼び出さない場合は、Natural プログラム WEB-ONL を使用してリモートコールをシミュレーションできます。 このプログラムの出力は Natural テキストオブジェクトとして保存されます。 この "オンライン実行" では、Natural デバッガを使用できます。
Natural Web サーバーエクステンションは、HTTP サーバーから呼び出されます。 プログラムは、HTTP サーバーから受け取るパラメータを再パッケージし、指定された Natural サブプログラムまたはメソッドへの Entire Broker RPC または DCOM 呼び出しを実行します。
HTTP サーバーによって送信されたデータは認識され、前処理されます。 URL デコードされた(修正された)フォームで HTTP サーバーに送信された URL は、元の状態にリセットされます。 すべての非バイナリデータはデータとして送信可能であり、必要に応じて、ASCII から EBCDIC に、またはその逆に変換されます。
HTML ページに指定された変数のみが、呼び出されたサブプログラムに自動的に転送されます。 転送される他のすべての変数は、.ini ファイルの ENV= エントリに指定する必要があります。 この方法で、システム環境変数として処理される変数を追加できます。
システム環境変数を追加するには、.ini
ファイルに SETENV= エントリを指定します。
ENV=HTTP_REFERRER ENV=HTTP_HOST ; SETENV=VERSION:=alpha SETENV=BROKER:=local
サーバーからファイルに送られた最後の HTML ページを保存するには、コンフィグレーションファイルに TRACE_FILE パラメータを指定します。
エラーログを返すには、コンフィグレーションファイルにログファイル名として ERROR_LOG_FILE パラメータを指定します。
独自のエラー画面を表示するには、コンフィグレーションファイルに ERROR_TEMPLATE パラメータを目的の HTML エラーページ名で指定します。 接頭辞 "$" を使用することによって、環境変数を HTML エラーページ内に指定できます。 環境変数 $NWW_ENVIRONMENT を使用すると、呼び出されたサブルーチンに送信されたすべての環境変数がコメント行としてエラーページに書き込まれます。
W3*
サブルーチンは、Natural Web サーバーエクステンションの HTTP サーバーへのインターフェイスにアクセスします。 このようなインターフェイスは、基本的に、パラメータデータエリアと、送信されたデータのログで構成されています。 サブプログラムで使用される
W3*
サブルーチンは、Natural RPC を使用する HTTP サーバーに呼び出されます。
サブルーチンの 1 つから H3*
サブルーチンを呼び出すと、基本的な HTML タグが作成されます。
NAT*
サブプログラムは、インターネットから呼び出すことができるユーティリティです。
T3*
テキストメンバには、ライブラリ SYSWEBの内容と、渡すことのできるサブルーチン名およびパラメータが記載されています。 それらをどのように呼び出すかのコードサンプルも提供します。 このオンラインドキュメントにアクセスするには、ユーティリティ
nat-docu を使用します。
オンラインドキュメントのサンプルコード。
D3*
および D4*
メンバは、デモアプリケーションです。
Web*
プログラムは、Natural の NEXT プロンプトから実行できるユーティリティです。