4D v12.4

URLとフォームアクション

ホーム

 
4D v12.4
URLとフォームアクション

 

URLとフォームアクション  


 

 

4D Webサーバーはデータベースに様々なアクションを実装することを可能にする、URLやHTMLフォームアクションを提供します。

URLには以下のものがあります:

  • /4DACTION/ はHTMLオブジェクトとデータベースのプロジェクトメソッドをリンクします。
  • /4DCGI/ はHTMLオブジェクトからOn Web Connectionデータベースメソッドを呼び出します。
  • /4DSYNC/ はテーブルのデータを同期するために使用します。

さらに4D Webサーバーは追加でいくつかのURLを受け入れます:

  • /4DSTATS, /4DHTMLSTATS, /4DCACHECLEAR そして /4DWEBTESTは、4D Webサイトの動作状況に関する情報を入手するために使用します。これらのURLはWebサイトに関する情報で説明しています。
  • /4DWSDLは、Webサービスサーバー上で公開されているWebサービスの定義ファイルへのアクセスを可能にします。詳細情報はWebサービス (サーバ) コマンドとDesign Referenceマニュアルを参照してください。

シンタックス: 4DACTION/MyMethod{/Param}

利用法: URLまたはフォームアクション

このURLを使用して、HTMLオブジェクト (テキスト、ボタン...) を4Dプロジェクトメソッドにリンクできます。リンクは /4DACTION/MyMethod/Param のように記述され、MyMethod はユーザーがリンクをクリックしたときに実行される4Dプロジェクトメソッド名、Param はオプションのテキスト引数で、MyMethodメソッドの $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 FILESEND HTML BLOBでHTMLページを送信するなど)。ブラウザーをブロックしないように、処理は可能な限り短時間で行われるようにします。

注: /4DACTION/ から呼び出されるメソッドはインターフェース要素 (DIALOG, ALERT...) を呼び出してはいけません。

警告: /4DACTION/ URLを使用して4Dメソッドを呼び出せるようにするには、メソッドプロパティで“4D HTMLタグやURL (4DACTION) で利用可能” 属性がチェックされていなければなりません。これはデフォルトで選択されていません。詳細は接続セキュリティを参照してください。

この例題は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")

4D Webサーバーは、スタティックなページからWebサーバーにデータを送信する、ポストされたフォームを使用する際の追加の可能性を提供します。POSTタイプを使用し、フォームのアクションは /4DACTION/MethodName で始まっていなければなりません。

注: フォームは2つのメソッドを使用してサブミットできます (4Dでは両方のタイプを使用できます):

  • POSTは通常Webサーバーからデータベースにデータを追加するために使用します。
  • GETは通常Webサーバーに、データベースから取得するデータをリクエストするために使用します。

この場合、Webサーバーがポストされたフォームを受信すると、COMPILER_WEBプロジェクトメソッド (存在すれば、後述参照) が呼び出され、そしてOn Web Authenticationデータベースメソッドが (存在すれば) 呼び出されます。このメソッドがTrueを返すと、MethodNameメソッドが実行されます。4Dはフォームに含まれるHTMLフィールドを解析し、値を取り出して自動で4D変数に代入します。フォーム中のフィールドと4D変数は同じ名前でなければなりません。

: 詳細情報は4DオブジェクトをHTMLオブジェクトにバインドするを参照してください。

フォームに適用するHTMLシンタックスは以下のタイプです:

  • フォームのアクションを定義するには:
    <form action="/4DACTION/MethodName" method="post"> 
  • フォームのフィールドを定義するには:
    <input type="Field_type" name="Field_name" value="Default_value">

フォーム中のフィールドごとに、4Dはフォームフィールドの値を同じ名前の変数に代入します。フォームオプション (チェックボックスなど), の場合、4Dは割り当てられた変数を、選択されていれば1に、そうでなければ0に設定します。
数値の入力の場合、4Dはフィールドの値を文字から実数に変換します。

: フォーム中のフィールドの名前がOKであるとき (例えばサブミットボタン)、フィールド値が空でなければOKシステム変数が1に設定されます。そうでなければ0に設定されます。

4D Webデータベースが開始されていて、ブラウザがスタティックHTMLページからレコードを検索できるようにしたいとします。このページを“search.htm”とします。データベースには検索結果を表示するための“results.htm”のようなスタティックページもあります。POSTメソッドと/4DACTION/SEARCHアクションがページに割り当てられています。

以下はこのページの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)
 C_LONGINT(vEXACT)
 OK:=0 `particular case

この例題では、VNAMEに文字列“ABCD”が代入され、vEXACTは1に、OKも1になります (ボタン名がOKであるため)。
4Dはを (存在すれば) 呼び出し、そして以下の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

シンタックス: 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等) を使用してレスポンスを返さなければなりません。

警告: ブラウザーをブロックしないようにするため、アクションはなるべく短時間で終わらせるようにしてください。

4Dは特別なURL (/4DACTION/) から呼ばれるメソッドにテキスト引数を渡します。これらのテキスト引数に関して:

  • これらの引数を使用しない場合でも、C_TEXTコマンドを使用して明示的に定義しなければなりません。そうしなければコンパイルモードで実行されているデータベースにアクセスするWebを使用すると、以下のようなランタイムエラーが発生します: "A runtime error occurred at line number: 0 when executing the method * ON WEB CONNECTION. Invalid parameter in a Run command".
    このラインタイムエラーは、HTMLリンクがクリックされることで呼び出される4Dメソッド中で、$1テキスト引数が定義されていないことにより発生します。実行コンテキストはカレントのHTMLページであるため、 エラーはページをWebブラウザに送信したメソッドの"line 0"を参照します。明示的に$1テキスト引数を定義することでこれらのエラーを取り除くことができます: 
    [#code4D]// M_ADD_RECORDSプロジェクトメソッド
    C_TEXT($1) ` この引数を明示的に宣言しなければならない
    Repeat
    CREATE RECORD ([Clients])
    // フィールドにデータを代入
    SAVE RECORD ([Clients])
    Until (OK=0)
  • $1 引数にはURLに追加されたデータが格納され、HTML環境から4D環境にデータを渡すためのプレースホルダーとして使用できます。

4Dメソッドへの呼び出し元により、異なる引数を宣言しなければなりません。

  • /4DACTION/ URLから呼ばれるメソッド
    $1
    引数を宣言します:

      // 4DACTION/ URLから呼ばれるメソッド
     C_TEXT($1)
  • ドキュメント中のHTMLコメントとして描かれる/4DSCRIPT/ タグから呼ばれるメソッド
    メソッドは$0にテキストを返すことができます。$0$1 引数を宣言しなければなりません:

      // 4DSCRIPT HTMLコメントから呼び出されるメソッド
     C_TEXT($0;$1)

シンタックス:
4DSYNC/$catalog{/TableName}
4DSYNC/TableName{/TableName}{/FieldName1,...,FieldNameN}{Params}

利用: POSTまたはGETメソッドのURL

このURLを使用して、ローカル4Dデータベースのテーブル中のデータをリモートのデータベースとHTTPで同期できます。これは例えばスマートフォン上にインストールされたクライアントアプリケーションや、サードパーティーのHTTPアプリケーションと4Dデータベースを同期するために使用できます。

4DSYNC/ URLをGETメソッドで使用して4Dデータベースのデータを取得したり、POSTメソッドで使用して4Dデータベースのデータを更新できます。

データベース保護のため、リモートのデバイスやシステムに対し同期を行わせるかどうかに基づいて、4DSYNC URLを明示的に許可するか拒否するよう実装することを強くお勧めします (後述のHTTPを使用した同期に関する注意点参照)。

使用できるHTTPリクエストは以下の通りです:

  • GET /4DSYNC/$catalog
    データベーステーブルのリストと、含まれるレコード数が返されます。
  • GET /4DSYNC/$catalog/TableName
    TableName のストラクチャ定義が返されます。
  • GET /4DSYNC/TableName/FieldName1{,FieldName2},...
    TableNameテーブルのFieldNameフィールドのデータを返します。
  • POST /4DSYNC/TableName/FieldName1{,FieldName2},...
    クライアントマシン上で行われた変更を4Dデータベースに統合します。
注: データ交換フォーマットにはJavaScript Object Notation (JSON) が使用されます。この書式については別途テクニカルノート等で情報が公開されます。

4DSYNC/ URLを使用する場合、以下の原則を適用する必要があります:

  • 4Dはデータベースに仮想ストラクチャーが指定されていれば、それを基に動作します。この場合TableNameFieldName 引数はSET FIELD TITLESSET TABLE TITLESコマンドで指定されたテーブル名とフィールド名に対応します。これらのコマンドのスコープはセッションであるという点に留意してください。また4D Serverを使用する場合にはサーバー上のストアドプロシージャーでこれらのコマンドを使用します。
  • データの同期を行うには:
    • HTTPサーバーが起動されていなければなりません。
    • データの同期を行うテーブルごとに、"同期を有効にする"プロパティが選択されていなければなりません。仮想ストラクチャーを定義する場合、同期対象のテーブルを仮想ストラクチャーに含めなければなりません。
      警告: このオプションをチェックすることにより、追加の情報が公開されるようになります。データベースへの接続が保護されるよう確認する必要があります (でこのオプションに関する説明を参照)。
  • 4Dが/4DSYNCリクエストを受け取ると、On Web Authenticationデータベースメソッド が (存在すれば) 呼び出されます (実際にいつ呼び出されるかは接続セキュリティの図を参照してください)。このデータベースメソッドがTrueを返すとリクエストが実行され、そうでなければ拒否されます。

 
プロパティ 

プロダクト: 4D
テーマ: Webサーバ

 
参照 

4DオブジェクトをHTMLオブジェクトにバインドする
GET WEB FORM VARIABLES