Natural Web インターフェイスでの作業

このセクションでは、次のトピックについて説明します。


環境の設定

Web 環境側の前提条件

次のソフトウェアをインストールする必要があります。

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 サーバー側の前提条件

Natural Web インターフェイスの SYSWEB について、次の前提条件を満たしている必要があります。

  • 最新バージョンの Natural をインストールする必要があります。

  • ライブラリ SYSWEB。
    Natural の steplib が使用可能になっているか、ライブラリ SYSWEB の内容を SYSTEM ライブラリまたは RPC に呼び出されるユーザーライブラリにコピーしている必要があります。

  • パラメータデータエリア W3PARM。

  • Natural RPC スタブまたは NaturalX。

Natural Web インターフェイスの SYSWEB3 について、次の前提条件を満たしている必要があります。

  • 最新バージョンの Natural をインストールする必要があります。

  • ライブラリ SYSWEB3。
    Natural の steplib が使用可能になっているか、ライブラリ SYSWEB3 の内容を SYSTEM ライブラリまたは RPC に呼び出されるユーザーライブラリにコピーしている必要があります。

  • パラメータデータエリア W3PARM。

  • Natural RPC スタブまたは NaturalX。

Natural でのサブプログラムの構築

以下の図は、サブプログラムを構築する方法を示しています。

  1. HTML エディタを使用します。

  2. HTML エディタを使用して、HTML および Natural コードを入力します。

  3. 次に、それを Natural ソースに変換します。

  4. 最後に、生成プログラムを Natural に移動します (Natural で直接コーディングします)。

処理の各段階は数字で識別されます。これらの段階で発生する処理の詳細については、以下で説明します。

graphics/nat_build_sub_luw.png

    • 1a. Natural コードは、ユーザーライブラリで作成されて保存されます。

      サーバー側で、HTML タグをコードに含めることによって、または HTML タグを生成する事前に組み込まれたサブプログラムを呼び出すことによって、Natural コードを作成します。 その後、サーバープログラムとして保存するか、サブプログラム WEB-WIZ を使用してデフォルトプログラムを生成します。

    • 1b. Natural コードは HTML として入力されます。 2 に進みます。

      HTML エディタを使用して、HTML ページを作成します。

  1. プログラム HTML2NAT によって、HTML から Natural ソースが生成されます。

    ライブラリ SYSWEB3 または(SYSWEB)のプログラム HTML2NAT を開始し、手順 1b で作成した HTML ページを変換します。

  2. 生成された Natural ソースをユーザーライブラリに移動します。

サブプログラムを作成する前に

次のことに注意してください。

  • HTML 戻りページは、送信可能な最大データに制限されます。 この最大値は、戻りページ変数によって決まります。

  • ライブラリ SYSWEB3(または SYSWEB)のサブルーチン W3INIT および W3END を呼び出して、Natural サーバーサブルーチンへのアクセスを初期化し、終了する必要があります。

  • 常に、パラメータデータエリア W3PARM および W3CONST を使用してください。

  • ユーザー独自のプログラムのためのフレーム(デフォルトプログラム)を生成するために、サブプログラム WEB-WIZ を使用してください。

サブプログラムを作成する方法

基本的な方法は 2 つあります。 Natural でコーディングを直接開始するか、HTML エディタを使用します。

方法 1:Natural での直接コーディング

Natural で直接コーディングする方法も 2 つあります。

  • 戻りページの SYSWEB3(または SYSWEB)サブルーチン(W3HTML や W3TEXT など)への呼び出しをプログラムエディタで入力します。 ライブラリ SYSWEB3(または SYSWEB)のプログラムを確認します。これは、基本的なシステム関数の実行のみに役立ちます。この方法では、作成するデータタイプ(HTML や XML など)の深い知識が必要です。

  • HTML タグを生成するサブプログラムを呼び出します。 ライブラリ SYSWEB3(または SYSWEB)を確認します。ライブラリ SYSWEB3(または SYSWEB)のプログラムを使用して、基本的なシステム関数を実行できます。さらに、ライブラリ SYSWEB3(または SYSWEB)のプログラムで HTML タグが生成されます。この方法では、HTML の深い知識を必要とせずに、呼び出すプログラムを変更できます。

例:プログラムエディタでの SYSWEB3(または SYSWEB)サブルーチンへの呼び出しの入力

* 
* 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 エディタの使用

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 の定数値

ローカルデータエリア 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 互換のすべての値、特に文字列を使用できます。

次ページの作成

出力が戻りページの上限を超えている可能性がある場合に、戻りページに何バイトの空きがあるかを評価するには、ライブラリ SYSWEB3(または SYSWEB)のサブルーチン W3COUNTER を使用します。

サブプログラムのテスト

サブプログラムをテストする方法は 3 つあります。

SYSWEB を使用している場合:

  1. Web ブラウザからサブプログラムを呼び出します。

  2. ライブラリ SYSWEB のサブプログラム NAT-DIR を呼び出して、Natural ライブラリの内容を確認します。 また、パラメータでライブラリの名前を指定することもできます。例えば、 http://.../sysweb/NAT-DIR?LIB=SYSEXT です。 プログラムをクリックして開始します。

  3. Web ブラウザからサブプログラムを呼び出さない場合は、Natural プログラム WEB-ONL を使用してリモートコールをシミュレーションできます。 このプログラムの出力は Natural テキストオブジェクトとして保存されます。 この "オンライン実行" では、Natural デバッガを使用できます。

SYSWEB3 を使用している場合:

  1. Web ブラウザからサブプログラムを呼び出します。

  2. ライブラリ SYSWEB3 のサブプログラム NAT-DIR を呼び出して、Natural ライブラリの内容を確認します。 また、パラメータでライブラリの名前を指定することもできます。例えば、 http://.../sysweb3/NAT-DIR?LIB=SYSEXT です。 プログラムをクリックして開始します。

  3. Web ブラウザからサブプログラムを呼び出したくない場合は、Natural プログラム WEB-ONL3 を使用してリモートコールをシミュレーションできます。 このプログラムの出力は Natural テキストオブジェクトとして保存されます。 この "オンライン実行" では、Natural デバッガを使用できます。

Natural Web サーバーエクステンション

Natural Web サーバーエクステンションは、HTTP サーバーから呼び出されます。 プログラムは、HTTP サーバーから受け取るパラメータを再パッケージし、指定された Natural サブプログラムまたはメソッドへの Entire Broker RPC または DCOM 呼び出しを実行します。

パラメータ

HTTP サーバーによって送信されたデータは認識され、前処理されます。 URL デコードされた(修正された)フォームで HTTP サーバーに送信された URL は、元の状態にリセットされます。 すべての非バイナリデータはデータとして送信可能であり、必要に応じて、ASCII から EBCDIC に、またはその逆に変換されます。

初期化ファイル

HTML ページに指定された変数のみが、呼び出されたサブプログラムに自動的に転送されます。 転送される他のすべての変数は、.ini ファイルの ENV= エントリに指定する必要があります。 この方法で、システム環境変数として処理される変数を追加できます。 システム環境変数を追加するには、.ini ファイルに SETENV= エントリを指定します。

.ini ファイルの例

ENV=HTTP_REFERRER 
  ENV=HTTP_HOST  
  ;
  SETENV=VERSION:=alpha 
  SETENV=BROKER:=local 

エラーのログ

サーバーからファイルに送られた最後の HTML ページを保存するには、コンフィグレーションファイルに TRACE_FILE パラメータを指定します。

エラーログを返すには、コンフィグレーションファイルにログファイル名として ERROR_LOG_FILE パラメータを指定します。

独自のエラー画面を表示するには、コンフィグレーションファイルに ERROR_TEMPLATE パラメータを目的の HTML エラーページ名で指定します。 接頭辞 "$" を使用することによって、環境変数を HTML エラーページ内に指定できます。 環境変数 $NWW_ENVIRONMENT を使用すると、呼び出されたサブルーチンに送信されたすべての環境変数がコメント行としてエラーページに書き込まれます。

ライブラリ SYSWEB および SYSWEB3 の命名規則

サブルーチン W3*

W3* サブルーチンは、Natural Web サーバーエクステンションの HTTP サーバーへのインターフェイスにアクセスします。 このようなインターフェイスは、基本的に、パラメータデータエリアと、送信されたデータのログで構成されています。 サブプログラムで使用される W3* サブルーチンは、Natural RPC を使用する HTTP サーバーに呼び出されます。

サブルーチン H3*

サブルーチンの 1 つから H3* サブルーチンを呼び出すと、基本的な HTML タグが作成されます。

サブプログラム NAT*

NAT* サブプログラムは、インターネットから呼び出すことができるユーティリティです。

Natural テキストメンバ T3*

T3* テキストメンバには、ライブラリ SYSWEB3(または SYSWEB)の内容と、渡すことのできるサブルーチン名およびパラメータが記載されています。 それらをどのように呼び出すかのコードサンプルも提供します。 このオンラインドキュメントにアクセスするには、ユーティリティ nat-docu を使用します。

サブプログラム E3*

オンラインドキュメントのサンプルコード。

メンバ D3* および D4*

D3* および D4* メンバは、デモアプリケーションです。

プログラム Web*

Web* プログラムは、Natural の NEXT プロンプトから実行できるユーティリティです。