4D v16.3

URLとフォームアクション

ホーム

 
4D v16.3
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プロジェクトメソッドは通常レスポンスを返すべきです (WEB SEND FILEWEB SEND 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)
 WEB SEND BLOB($BlobVar;"Pict/gif")

4D Webサーバーでは、ポストされたフォームを使用することもできます。これはスタティックなページからWebサーバーにデータを送信し、全ての値を簡単に取得するというものです。POSTタイプを使用し、フォームのアクションは /4DACTION/MethodName で始まっていなければなりません。

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

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

この場合、Webサーバーがポストされたフォームを受信すると、On Web Authenticationデータベースメソッドが (存在すれば) 呼び出されます。このメソッドがTrueを返すと、MethodNameメソッドが実行されます。このメソッド内では、サーバーに投稿されたHTMLページに含まれる全てのフィールドの名前と値を取得するためにはWEB GET VARIABLES コマンドを呼び出す必要があります。

互換性に関する注意: 変換されたデータベースにおいては、互換性ページ の"Web変数を自動的に代入"オプションがチェックされている場合、特殊なCOMPILER_WEB プロジェクトメソッドが(存在していれば)最初に呼び出されていました。4Dはフォーム内のHTMLフィールドの値を取得し、呼び出されたメソッド内の変数と同じ名前を持っている場合にはその中身を4D変数の中へと自動的に移していました。この機能は現在は廃止予定となっています。より詳細な情報については、4DオブジェクトをHTMLオブジェクトにバインドする の章を参照して下さい。

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

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

フォーム中のフィールドごとに、4Dはフォームフィールドの値を同じ名前の変数に代入します。

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

以下はこのページのHTMLコードです:

<FORM ACTION="/4DACTION/PROCESSFORM" METHOD=POST>
<INPUT TYPE=TEXT NAME=VNAME VALUE=""><BR>
<INPUT TYPE=CHECKBOX NAME=EXACT VALUE="Word">Whole word<BR>
<INPUT TYPE=SUBMIT NAME=OK VALUE="Search">
</FORM>

データ入力エリアに“ABCD”とタイプし、"句として検索"オプションをチェックして検索ボタンをクリックします。

Webサーバーに送られたリクエスト内部は以下の通りです:

VNAME="ABCD"
vEXACT="Word"
OK="Search"

4DはOn Web Authenticationデータベースメソッドを (存在すれば) 呼び出し、そして以下のPROCESSFORMプロジェクトメソッドが呼び出されます:

 C_TEXT($1//コンパイルモードの場合必須
 C_LONGINT($vName)
 C_TEXT(vNAME;vLIST)
 ARRAY TEXT($arrNames;0)
 ARRAY TEXT($arrVals;0)
 WEB GET VARIABLES($arrNames;$arrVals//フォーム上の全ての変数を取得します
 $vName:=Find in array($arrNames;"vNAME")
 vNAME:=$arrVals{$vName}
 If(Find in array($arrNames;"vEXACT")=-1) //オプションがチェックされていない場合
    vNAME:=VNAME+"@"
 End if
 QUERY([Jockeys];[Jockeys]Name=vNAME)
 FIRST RECORD([Jockeys])
 While(Not(End selection([Jockeys])))
    vLIST:=vLIST+[Jockeys]Name+" "+[Jockeys]Tel+"<BR>"
    NEXT RECORD([Jockeys])
 End while
 WEB SEND FILE("results.htm") // 検索結果が挿入されるresults.htmを送信
  // このページには変数vLISTの参照が含まれている
  // 例えば (<!--4DTEXT 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 および WEB SEND HTTP REDIRECTコマンドにあります。

アクションを指示した後は、データを送信するコマンド (WEB SEND FILE, WEB SEND BLOB等) を使用してレスポンスを返さなければなりません。

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

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

  • これらの引数を使用しない場合でも、C_TEXTコマンドを使用して明示的に定義しなければなりません。そうしなければコンパイルモードで実行されているデータベースにアクセスするWebを使用すると、以下のようなランタイムエラーが発生します:
    "Error in dynamic code
    Invalid parameters in an EXECUTE command
    Method Name:
    Line Number:
    Description: [<date and time>]"

    このラインタイムエラーは、HTMLリンクがクリックされることで呼び出される4Dメソッド中で、$1テキスト引数が定義されていないことにより発生します。実行コンテキストはカレントのHTMLページであるため、 エラーは特定のメソッドの行を参照することはしません。明示的に$1テキスト引数を定義することでこれらのエラーを取り除くことができます: 
      //M_SEND_PAGE プロジェクトメソッド
     C_TEXT($1// この変数は明示的に宣言されている必要があります
      //...
     WEB SEND FILE($mypage)
  • $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データベースのデータを更新したりできます。

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

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

注: この同期メカニズムを有効にするにはデータベース設定のWeb/設定ページで、"4DSYNC" URLを許可するオプションを選択しなければなりません。選択しない場合、4DSYNC URLを含むリクエストは失敗します。

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

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



参照 

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

 
プロパティ 

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

 
履歴 

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v16)
ランゲージリファレンス ( 4D v16.1)
ランゲージリファレンス ( 4D v16.2)
ランゲージリファレンス ( 4D v16.3)