version 2003 (Modified)
4D Webサーバはコンテキストモードと非コンテキストモードで、データベースに様々なアクションを実装することを可能にする、URLやHTMLフォームアクションを提供します。
URLには以下のものがあります:
・4DMETHOD/ はコンテキストモードで、HTMLオブジェクトとデータベースのプロジェクトメソッドをリンクします。
・4DACTION/ は非コンテキストモードで、HTMLオブジェクトとデータベースのプロジェクトメソッドをリンクします。
・4DCGI/ はHTMLオブジェクトからOn Web Connection データベースメソッドを呼び出します。
さらに4D Webサーバは追加でいくつかのURLを受け入れます:
・/4DSTATS, /4DHTMLSTATS, /4DCACHECLEAR そして /4DWEBTESTは、4D Webサイトの動作状況に関する情報を入手するために使用します。これらのURLは Webサイトに関する情報の節で説明しています。
・/4DWSDLは、Webサービスサーバ上で公開されているWebサービスの定義ファイルへのアクセスを可能にします。詳細情報は Web サービス (サーバ) コマンド の節とDesign Referenceマニュアルを参照してください。
URL 4DACTION/
シンタックス: 4DACTION/MyMethod{/Param}
モード: 非コンテキストモード。コンテキストモードから呼ばれるとコンテキストプロセスをアボートし、非コンテキストモードにスイッチします。
利用法: URLまたはフォームアクション
このURLを使用して、非コンテキストモードで、HTMLオブジェクト (テキスト、ボタン...) を4Dプロジェクトメソッドにリンクできます。リンクは /4DACTION/MyMethod/Param のように記述され、MyMethod はユーザがリンクをクリックしたときに実行される4Dプロジェクトメソッド名、Param はオプションのテキスト引数で、メソッドの $1 に渡されます (後述の“URLから呼ばれる4Dメソッドに渡されるテキスト引数”参照)。
4Dが /4DACTION/MyMethod/Param リクエストを受け取ると、On Web Authentication データベースメソッドが (存在すれば) 呼ばれます。このメソッドからTrueが返されると、MyMethodメソッドが実行されます。
4DACTION/ をスタティックなWebページのURLに割り当てることもできます。URLのシンタックスは以下の形式でなければなりません: <A HREF="/4DACTION/MyMethod/Param">Do Something</A>
MyMethod プロジェクトメソッドは通常レスポンスを返すべきです (SEND HTML FILE や SEND HTML BLOBでHTMLページを送信するなど)。ブラウザをブロックしないために、処理は可能な限り短時間で行われるようにします。
Note: 4DACTION から呼び出されるメソッドはインタフェース要素 (DIALOG, ALERT...) を呼び出してはいけません。
警告: 4DACTION/ URLを使用して4Dメソッドを呼び出せるようにするには、メソッドプロパティで“4DACTION、4DMETHODおよび4DSCRIPTで利用可能” 属性がチェックされていなければなりません。これはデフォルトで選択されていません。詳細は接続セキュリティの節を参照してください。
例題
この例題はHTMLピクチャオブジェクトに4DACTION/ URLを割り当て、ページにダイナミックなピクチャを表示する方法を説明しています。スタティックHTMLページに以下のコードを記述します:
<IMG SRC="/4DACTION/PICTFROMLIB/1000">
PICTFROMLIBメソッドは以下のとおりです:
C_TEXT($1) ` この引数は常に宣言する C_PICTURE($PictVar) C_BLOB($BlobVar) C_LONGINT($number) `ピクチャ番号を$1文字列から取り出す $number:=Num(Substring($1;2;99)) GET PICTURE FROM LIBRARY($number;$PictVar) PICTURE TO GIF($PictVar;$BlobVar) SEND HTML BLOB ($BlobVar;"image/gif")
フォームをポストする4DACTION
4D Webサーバは、スタティックなページからWebサーバにデータを送信する、ポストされたフォームを使用する際の追加の可能性を提供します。POSTタイプを使用し、フォームのアクションは /4DACTION/MethodName で始まっていなければなりません。
Note: フォームは2つのメソッドを使用してサブミットできます (4Dでは両方のタイプを使用できます):
・POSTは通常Webサーバからデータベースにデータを追加するために使用します。
・GETは通常Webサーバに、データベースから取得するデータをリクエストするために使用します。
この場合、Webサーバがポストされたフォームを受信すると、COMPILER_WEBプロジェクトメソッドを (存在すれば、後述参照) を呼び出し、そして On Web Authentication データベースメソッドを (存在すれば) 呼び出します。このメソッドがTrueを返すと、MethodNameメソッドが実行されます。4Dはフォームに現れるHTMLフィールドを解析し、値を取り出して自動で4D変数に代入します。フォーム中のフィールドと4D変数は同じ名前でなければなりません。
Note: 詳細情報は4DオブジェクトをHTMLオブジェクトにバインドするの節を参照してください。
フォームに適用するHTMLシンタックスは以下のタイプです:
・フォームのアクションを定義するには:
<FORM ACTION="/4DACTION/MethodName" METHOD=POST>
・フォームのフィールドを定義するには:
<INPUT TYPE="Field type" NAME="Field name" VALUE="Default value">
フォーム中のフィールドごとに、4Dはフォームフィールドの値を同じ名前の変数に代入します。フォームオプション (チェックボックスなど), の場合、4Dは割り当てられた変数を、選択されていれば1に、そうでなければ0に設定します。
数値の入力の場合、4Dはフィールドの値を文字から実数に変換します。
Note: フォーム中のフィールドの名前がOKであるとき (例えばサブミットボタン)、フィールド値が空でなければOKシステム変数が1に設定されます。そうでなければ0に設定されます。
例題
4D Webデータベースが開始され、非コンテキストモードで使用されているとき、ブラウザがスタティックHTMLページからレコードを検索できるようにしたいとします。このページを“search.htm”とします。データベースには検索結果を表示するための“results.htm”のようなスタティックページもあります。POST型と/4DACTION/SEARCHアクションがページに割り当てられています。
以下はAdobe(R) PageMill(TM)でページを表示したときの様子です:
以下はこのページのHTMLコードです:
<FORM ACTION="/4DACTION/PROCESSFORM" METHOD=POST> <INPUT TYPE="TEXT" NAME="VNAME" VALUE=""><BR> <!-- 通常ボタン名をVALUEにいれますが、解釈のためVALUEに数字を入れなければいけない--> <INPUT TYPE="CHECKBOX" NAME="VEXACT" VALUE="1">Whole word<BR> <!-- OKは特別なケース--> <INPUT TYPE="SUBMIT" NAME="OK" VALUE="Search"> </FORM>
データ入力エリアに“ABCD”とタイプし、オプションをチェックしてSearchボタンをクリックします。
4Dは以下のCOMPILER_WEBメソッドを呼び出します:
C_TEXT(VNAME) VNAME:="" C_LONGINT(vEXACT) vEXACT:=0 OK:=0 `particular case
この例題では、VNAMEに文字列“ABCD”が代入され、vEXACTは1に、OKも1になります (ボタン名がOKであるため)。
4DはOn Web Authentication データベースメソッドを (存在すれば) 呼び出し、そして以下のPROCESSFORMプロジェクトメソッドが呼び出されます:
If (OK=1) If (vEXACT=0) `オプションが選択されいなければ vNAME:=VNAME+"@" End if QUERY([Jockeys];[Jockeys]Name=vNAME) vLIST:=Char(1) `リストをHTMLに返す FIRST RECORD([Jockeys]) While (Not(End selection([Jockeys]))) vLIST:=vLIST+[Jockeys]Name+” “+[Jockeys]Tel+”<BR>” NEXT RECORD([Jockeys]) End while SEND HTML FILE(“results.htm”) `リストを結果のresults.htm フォームに送信 `このページには変数vLISTへの参照が含まれいる (<!--4DVAR vLIST-->) ... End if
URL 4DMETHOD/
シンタックス: 4DMETHOD/MyMethod{/Param}
モード: コンテキスト。非コンテキストモードから呼ばれると、コンテキストモードにスイッチする。
利用法: URLまたはフォームアクション
このURLを使用して、コンテキストモードで、HTMLオブジェクト (テキスト、ボタン...) を4Dプロジェクトメソッドにリンクできます。リンクは /4DMETHOD/Method_Name/Param のように記述され、Method_Name はユーザがリンクをクリックしたときに実行される4Dプロジェクトメソッド名、Param はオプションのテキスト引数で、メソッドの $1 に渡されます (後述の“URLから呼ばれる4Dメソッドに渡されるテキスト引数”参照)。リンクされた項目はURLを使用して4Dプロジェクトメソッドの実行をトリガします。プロジェクトメソッド自身は4DフォームやHTMLページなどを送信できます。
4Dが /4DMETHOD リクエストを受け取ると、On Web Authentication データベースメソッドが (存在すれば) 呼ばれます。このメソッドからTrueが返されるとOn Web Connection データベースメソッドが (存在すれば) 呼び出され、そしてMethod_Nameメソッドが$1に/Paramテキスト引数を渡されて実行されます。
/4DMETHOD/Method_Name をスタティックなWebページのフォームアクションに割り当てると、フォームのサブミットボタンがクリックされるとそのメソッドが実行されます。4DにHTMLフォームをサブミットするには、フォームがサブミットされたときに4Dが実行するPOSTアクション4Dメソッドを指定する必要があります。SEND HTML FILEの例題を参照してください。
4DにHTMLページを統合する際、normal または submit タイプのボタンを使用します。
フォームに適用するHTMLシンタックスは以下のとおりです:
<FORM ACTION="/4DMETHOD/MethodName" METHOD="POST">
ポストされたフォームに関する詳細は前の段落を参照してください。
警告: 4DMETHOD/ URLを使用して4Dメソッドを呼び出せるようにするには、メソッドプロパティで“4DACTION、4DMETHODおよび4DSCRIPTで利用可能” 属性がチェックされていなければなりません。これはデフォルトで選択されていません。詳細は接続セキュリティの節を参照してください。
URL 4DCGI/<action>
シンタックス: 4DCGI/<action>
モード: 両方.
利用法: URL.
4D Webサーバが /4DCGI/<action> URLを受信すると、On Web Authentication データベースメソッドが (存在すれば) 呼び出されます。このメソッドがTrueを返すと、WebサーバはOn Web Connection データベースメソッドを呼び出し、$1にURLをそのまま渡します。
4DCGI/ URLはどのファイルにも対応しません。その役割は4DのOn Web Connection データベースメソッドを呼び出すことです。“<action>” 引数にはどのようなタイプの情報でも含めることができます。
このURLを使用してどのようなタイプのアクションでも行うことができます。On Web Connection データベースメソッドやそのサブメソッド内で$1値をテストして、適切なアクションを実行できます。例えば完全にカスタマイズされたHTMLからレコードの追加、検索、並び替えなどを行ったり、GIFイメージを作成したりできます。このURLを使用する例題はPICTURE TO GIFコマンドおよびSEND HTTP REDIRECT コマンドにあります。
アクションを指示した後は、データを送信するコマンド (SEND HTML FILE, SEND HTML BLOB, 等) を使用してレスポンスを返さなければなりません。
警告: ブラウザをブロックしないようにするため、アクションはなるべく短時間で終わらせるようにしてください。
URLから呼ばれる4Dメソッドに渡されるテキスト引数
4Dは特別なURL (4DMETHOD/, 4DACTION/ and 4DCGI/) から呼ばれるメソッドに、コンテキストモードおよび非コンテキストモード両方で、テキスト引数を送信します。これらのテキスト引数に関して:
・これらの引数を使用しないとしても、C_TEXTコマンドを使用して明示的に定義しなければなりません。そうしなければコンパイルモードで実行されているデータベースにアクセスするWebを使用すると、ランタイムエラーが発生します。
・$1 引数にはURLに追加されたデータが格納され、HTML環境から4D環境にデータを渡すためのプレースホルダとして使用できます。
コンパイルモードでのランタイムエラー
以下の例題を見てみましょう。リンクを使用してHTMLオブジェクトにバインドされたメソッドを実行し、Webブラウザ上に以下の表示がされます:
このランタイムエラーは、HTMLリンクをクリックしたときに呼び出される4Dメソッドで、$1 引数の宣言が行われていないために発生しています。実行のコンテキストはカレントのHTMLページなので、エラーはこのページを実際に送信したメソッドの0行目を示しています。
はじめてのWebサーバの例題に対し、M_ADD_RECORDS や M_LIST_RECORDSプロジェクトメソッド内で$1 引数を明示的にテキスト変数として宣言することで、この問題を回避できます:
` M_ADD_RECORDS project method C_TEXT($1) ` この引数を明示的に宣言しなければならない Repeat ADD RECORD([Customers]) Until(OK=0) ` M_LIST_RECORDS project method C_TEXT($1) ` この引数を明示的に宣言しなければならない ALL RECORDS([Customers]) MODIFY SELECTION([Customers])
これらの変更を行った後、コンパイルモードでのランタイムエラーは発生しなくなります。
呼び出される4Dメソッドで明示的に宣言する引数
4Dメソッドへの呼び出し元により、異なる引数を宣言しなければなりません。
・On Web Authentication データベースメソッド
接続に関する6つの引数と接続の可否を示す戻り値を宣言しなければなりません:
` On Web Authentication データベースメソッド C_TEXT($1;$2;$3;$4;$5;$6) C_BOOLEAN($0)
接続に関する6つの引数を宣言しなければなりません:
` On Web Connection データベースメソッド C_TEXT($1;$2;$3;$4;$5;$6) ・4DMETHOD/ URLから呼ばれるメソッド
$1 引数を宣言します:
` 4DMETHOD/ URLから呼ばれるメソッド C_TEXT($1)
・4DACTION/ URLから呼ばれるメソッド
$1 引数を宣言します:
` 4DACTION/ URLから呼ばれるメソッド C_TEXT($1)
・ドキュメント中のHTMLコメントとして描かれる4DSCRIPT/ タグから呼ばれるメソッド
メソッドは$0にテキストを返すことができます。$0 と $1 引数を宣言しなければなりません:
` 4DSCRIPT/ HTMLコメントから呼び出されるメソッド C_TEXT($0; $1)
参照
4DオブジェクトをHTMLオブジェクトにバインドする, GET WEB FORM VARIABLES, コンテキストモードの利用, はじめてのWebサーバ.