4D v14.3

URLとフォームアクション

ホーム

 
4D v14.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サーバーがポストされたフォームを受信すると、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">単語全体<br>
<!-- OKは特別なケース-->
<input type="submit" name="OK" value="検索">
</form>

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

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) // Return the list in HTML
    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を使用すると、以下のようなランタイムエラーが発生します: "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データベースのデータを更新したりできます。

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

 
プロパティ 

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

 
参照 

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

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v14 R2)
ランゲージリファレンス ( 4D v14 R3)
ランゲージリファレンス ( 4D v13.5)
ランゲージリファレンス ( 4D v14.3)
ランゲージリファレンス ( 4D v14 R4)

Inherited from : URLとフォームアクション ( 4D v12.4)