バージョン 6.3.3
 —  Web テクノロジ  —

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

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


環境の設定

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 Web インターフェイスの SYSWEB3 について、次の前提条件を満たしている必要があります。

Top of page

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

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

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

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

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

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

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

graphics/nat_build_sub.png

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

    ライブラリ SYSWEB3(または SYSWEB)の Web インターフェイスプラグインを開始し、手順 1b で作成した HTML ページを変換します。

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

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

以下の点に注意してください。

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

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

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

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

例:プログラムエディタでの 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> 
<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 プロンプトから実行できるユーティリティです。

Top of page