version 2003 (Modified)
4D Webサーバは2つの異なるモード、非コンテキストモード (標準モード) と コンテキストモードで動作します。この節ではこれらのモードについて、特にコンテキストモードに関して詳細を説明します。
警告: コンテキストモードは4Dローカルモードと4D Serverでのみ利用できます。リモートモードの4D Webサーバはこのモードをサポートしません。
Note: はじめてのWebサーバの節ではコンテキストモードでデータベースを公開する例題を説明しています。
非コンテキストモードとコンテキストモード
4D Webサーバはデフォルトで非コンテキストモード (非接続モード) が使用されます。このモードの4D Webサーバの動作は、標準のWebサーバの動作と変わりません。つまり、ブラウザからのHTTPリクエストを受信すると(URL、ポストされたフォーム等)、サーバがリクエストを処理し、必要に応じて応答を返します(例えば、Webページを送信する)。この後、サーバとブラウザの間には特定の接続は維持されません。
非コンテキストモードにおいて、Webサーバはスタティックページまたはセミダイナミックページを送信することができます。セミダイナミックページを使用すると、特別な4Dタグを用いてデータベースのデータへのアクセスやあらゆるタイプの処理の実行が可能になります。この4Dタグはページを送信した時に評価されます。セミダイナミックページを使用することにより、コンテンツのすべて、またはその一部が4Dによる処理を元にしたWebページの作成、管理、送信を行うことができます。通常は、非コンテキストモードによりWebサイト開発における大半の要求に応えることができます。
コンテキストモードでWebブラウザへ接続するとコンテキストが作成され、このコンテキスト内にカレントセレクションや変数等が配置されます。ある意味では、各ブラウザはアプリケーションモードでデータベースに接続している4D Clientとして扱われます。コンテキストは特定のWeb接続プロセスによって処理されます。
このモードを使用すると、Webページを作成しなくても、簡単に4DデータベースをWeb上に公開することができます。つまり、4Dはデータベースのメニューバーやフォームを自動的にHTMLへ変換し、これを元に作成されたダイナミックページを管理してブラウザ側へ送信します。コンテキストモードでも、セミダイナミックページやスタティックページを送信することができます。また、Web上で表示されるページに機能を追加するために、HTMLコードやJavascriptを4Dフォームに挿入することも可能です。
さらに、このモードで4Dはデータへの同時アクセスを自動的に処理します。ブラウザまたは4D クライアントマシンがレコードをロードすると、それがブラウザや他の4Dクライアントマシンで
あっても、4Dは他のユーザに対してこのレコードを透過的にロックします。また、4Dで
は、4Dと同じ方法で、トランザクション中にWebブラウザを使用したデータ入力を行うことができます。このシステムにより、4D Webサーバ側でブラウザの動作を制御したり、データの整合性を保証できるようになります。
公開が容易である代わりに、コンテキストモードにはいくつかの制約があります:
- Webブラウザでは、あるWebページから別のページへ、あるサイトから別のサイトへと“サーフィン”することができます。クライアント/サーバタイプのデータベースを使用する場合には、データベーストランザクションのロジックを守るため、このナビゲーションを制御しなくてはなりません。ユーザが実行したレコードへの各入力は、不確定な状態のままにならないよう、必ず確定するかキャンセルしなくてはなりません。4D Webサーバエンジンには、データベースセッションとコンテキストを管理する自動メカニズムが導入されています。これらのメカニズムにより、一部の標準的なブラウ
ザ機能(再読み込み、戻る等、次の節を参照)が使用できなくなります。
- コンテキスト管理を行う接続プロセスは、データベースの環境設定で指定した、ブラウザのタイムアウトに達するまで有効です。例えば、ブラウザがそのタイムアウトの時間サーバにアクセスしないと、そのコンテキストは廃棄されます。
これらの制約が意味するのは、コンテキストモードはどちらかと言えば、イントラネットや特定のインターネットアプリケーションのフレームワーク内での使用を目的としているということです。
4D Webサーバの機能方法を要約すると次の図のようになります:
モードの選択
4D Webサーバの動作モードの選択は、次のように行われます:
・サーバの開始時に、データベース環境設定の開始時のモードオプションを使用する。
・Webサーバの使用中に、送信されたURLや実行されたコマンドに従う。
実際には、いくつかの特別なURLや特定の4Dコマンドを使用して、モードを変更することができます。原則として、URLや4Dコマンドによりモードが変更されるまでの間は、現在のモードが使用されます。
・開始時にコンテキストモードを指定する
デフォルトでは、Webサーバは非コンテキストモードで開始します。しかし、Webサーバを直接コンテキストモードで開始することができます。つまり、ユーザがデータベースに接続する際に、コンテキストが自動的に生成されます。
開始時に非コンテキストモードを指定するには、データベースの環境設定ダイアログでWebテーマの設定ページにあるコンテキストモード(永続的コンテキスト)オプションを選択します:
・モード変更を行うコマンドとURL
データベースの操作中に、次の要素を呼び出してモードを変更することができます:
・非コンテキストモードへの変更:
- SEND HTML BLOB: オプションの引数noContextにTrueを渡す
- SEND HTML TEXT: オプションの引数noContextにTrueを渡す
- /4DACTIONで始まるURL
・コンテキストモードへの変更:
- /4DMETHOD/MyMethodで始まるURL
URL /4DMETHOD/MyMethod が送信されると、4D Webサーバは新しいコンテキストを作成し、次の処理を実行します:
- On Web Authentication データベースメソッドを実行する (存在すれば),
- On Web Connection データベースメソッドを実行する (存在すれば)、この特殊なケースでは、$1に“/”(スラッシュ)ではなく/4DMETHOD/MyMethodが代入されます。
- 最後に、新しく作成したコンテキスト内でリクエストされたメソッドを実行します。
生成されたコンテキストの数を調べる
実行する動作によって、Webコンテキストを使用するWebプロセスもあれば、使用しないものもあります。
PROCESS PROPERTIESコマンドを使用すると、生成されたコンテキストの数を調べることができます。このコマンドは任意のWebプロセスに関して、コンテキストが使用されているか(-11:Web Process with Contex)または使用されていないか(-3:Web Process with no Context)を示す値をorigin引数に返します。
Web接続コンテキスト管理
Web接続コンテキストID
Web接続プロセスの名前に示されている番号をコンテキストIDといいます。この番号はランダムに生成され、各Web接続を一意に特定します。コンテキストIDは、Web接続中、4D側とブラウザ側の両方で保守されます。この例では、コンテキストIDは“1066993139”です。以下のWebブラウザウインドウでは、ブラウザのアドレスエリアに表示されたURLでこの番号を確認することができます:
URLはコンテキストモードのWebセッション中には4Dによって自動的に保守されます。HTTPリクエストが4DのTCP/IP経由で受信されるたびに、4DはURLからコンテキストIDを抽出し、これによりそのリクエストを正しいWeb接続プロセスへ転送することができます。
コンテキストIDでは、以下のことを実行することができます:
・4Dによって各Web接続経由でWebとデータベースの両方のセッションを保守できる。
・複数の同時実行Web接続を透過的に処理できる。
・異なるコンテキストIDが各接続で生成されるため、ブックマークを使用するような好ましくない接続を防ぐことができる。
Webとデータベースセッションの同期化:Web接続サブコンテキストID
上記のウインドウでは、コンテキストIDの後にドットと数値の2 (.2) のサブコンテキストIDがあります。4Dは、コンテキストモードのブラウザに新しい4DベースのHTMLページが送信されるたびにこの番号を自動的に管理し、1つずつ増分します。サブコンテキストIDは、データベースセッションの保守において重要なものです。
通常、Webブラウザには、戻るボタン、次ボタン、履歴ウインドウ等のナビゲーション制御が含まれています。これらの制御は、ドキュメント、ニュース、掲示板等をブラウズする時に便利です。これらはデータベーストランザクションを実行する時には、あまり魅力的な制御ではありません。
例えば、Webユーザがテーブルにレコードを追加している時に、そのデータ入力が確定されたのかどうか、つまり、Webユーザが4Dフォームの「登録」ボタンまたはキャンセルボタンをクリックしたかどうかを開発者は知る必要があります。この時点で、Webユーザが他のページをナビゲートすると、データ入力は不確定な状態のままになってしまいます。これを防ぐために、4Dはブラウザ側のWebセッションと4D側のデータベースセッションをサブコンテキストIDを使って同期させています。
フォームがサブミットされたり、HTTPリクエストがブラウザから4Dに送信されるたびに、Webとデータベースセッションの同期が失われていることが検出された場合には、4Dは「同期が外れました。ブラウザのナビゲーションコントロールなど (例えば“戻る”ボタン) を使用したために、データ検証を必要とするフォームから離脱してしまいました。検証もしくはキャンセルをするために、今からそのフォームへ戻ります。」というメッセージを送信します。そして、4DはサブコンテキストIDを使ってWebデータ入力ページに戻ります。
この同期化は、Web接続プロセスにとっても重要なものです。4Dコードの実行を続けるため、例えばADD RECORD ([...])というコマンドから正確に抜ける必要があります。
同期化は選択的なものです。ブラウザ側に表示されているカレントWebページが4Dフォームである場合 (ADD RECORD、DISPLAY SELECTION、DIALOG等) 、必然的に同期化が行われます。
カレントWebページが別のWebページからのリンクでアクセスされたHTMLページである (SEND HTML FILEコマンドで送信された) 場合、ページを自由にナビゲートすることができます。
以下の4Dコードがあるとします:
ADD RECORD ([Customers])
SEND HTML FILE ("anyPage.HTM")
DISPLAY SELECTION ([Products])
以下の図は、実行中に4DとWebブラウザの両方で発生することを詳細に示しています。
・赤の線は、4Dフォーム変換とサブミッションを示しています。
・青の線は、4DベースのHTMLページと4DベースではないHTMLページとの切り換えを示しています。
・緑のエリアは、4DベースではないHTMLページを示しています。
手順の説明
(1) ADD RECORDコマンドが発行されます。4Dはテーブルのカレント入力フォームをHTMLページに変換して、それをWebブラウザに送信します。入力フォームがマルチページフォームの場合には、標準4Dページナビゲーションボタンによって、フォームのページ間をナビゲートできます。この4Dベースのナビゲーションが実装され、4Dによって透過的に実行されます (Webフォームサブミッション経由) 。
(2) データ入力中 (つまり、ADD RECORDコール内) に、ボタンがクリックされ、そのオブジェクトメソッドからSEND HTML FILEコールを発行します。
(3) SEND HTML FILEコール内部で、HTMLページにリンクがある場合には、複数のページをナビゲートすることが可能です。そしてSEND HTML FILE("")が発行されたときにHTMLモードは終了します。
(4) クリックされたボタンのオブジェクトメソッドと、ADD RECORDコマンドで開始されたデータ入力が実行されます。手順(2)と(3)はデータ入力内で数回繰り返すことができます。
(5) 最終的に、データ入力が受け付けられるか、キャンセルされ、Web接続プロセスが実行されます。
(6) 次のコールはSEND HTML FILEコマンドです。
(7) この手順は手順3と似ています。HTMLページにリンクがある場合には、複数のページをナビゲートすることが可能です。そしてSEND HTML FILE("")が発行された時にHTMLモードが終了します。
(8) Web接続プロセスが実行されます。
(9) DISPLAY SELECTIONコマンドが発行されます。4Dはテーブルの現在の出力フォームをHTMLページに変換して、それをWebブラウザに送信します。DISPLAY SELECTIONコマンド中に、4Dは選択ページと個別のレコード表示の間を透過的にナビゲートします。また、4DはMODIFY SELECTIONコマンドを使用してデータ入力の管理とレコードロックをWebフォームサブミッションから実行することができます。
(10) セレクションのナビゲーション中に、フォームのフッタエリアにあるボタンがクリッ
クされ、そのオブジェクトメソッドからSEND HTML FILEコールを発行します。
(11) この手順は手順3および手順7と似ています。HTMLページにリンクがある場合には、複数のページをナビゲートすることが可能です。そしてSEND HTML FILE("")が発行された時に、HTMLモードが終了します。
(12) クリックされたボタンのオブジェクトメソッドと、DISPLAY SELECTIONコマンドで開始されたセレクション表示が実行されます。手順(10)と(11)はセレクションのナビゲーション中に数回繰り返すことができます。
(13) 最終的に、選択表示が終了し、Web接続プロセスが実行されます。
以下同様...
自由なWebナビゲーション (例えば、戻るボタンや次ボタンをクリックすること) は、任意のSEND HTML FILE (コマンド前述の図の緑のエリア) 内で可能です。その一方で、任意の4DベースのHTMLページ (データ入力、セレクション表示等、CONFIRMコマンドやRequest関数によって表示されるような標準ダイアログボックスを含む) はブラウザナビゲーション制御の1つを使用して終了され、4Dは最後にはWeb接続プロセス側で現在実行されている発行済の4Dコマンドに対応するサブコンテキストIDを持つWebページに戻ることによって、Webセッションとデータベースセッションを同期化します。
Web接続プロセスとWebセッション
ユーザの立場からすると、Webブラウザ側でのユーザのアクションがWebセッションを誘導します。
プログラム作成の立場からすると、Web接続プロセスがWebセッションを誘導するのであって、WebセッションがWeb接続プロセスを誘導するわけではありません。WebブラウザはWeb接続プロセスが送信したページを表示します。それは、以下のいずれかを行います:
・4Dコードを実行する、または
・カレントWebページのブラウザからのサブミッションを待機する。
設計者の立場からすると、Web接続プロセスは実行のドメインが4Dまたは4D Serverである4Dプロセスとして見えるべきですが、そのユーザインタフェースは接続されたWebブラウザ上でエコーされます。
このようなことから、コンテキストモードのWebデータベースアプリケーションの設計を実行する場合には、このWeb接続プロセスの二重性を常に考慮してください。以下の例を参照してください:
・どんな種類のデータ入力でも、その間、メインメニューバーはブラウザのものであり、4Dのメニューバーではありません。フォーム内では、4Dメニューバーを頼りにしないでください。4DメニューバーはWebサーバマシン上にあり、Webブラウザマシン上にはありません。
・Webブラウザで使用されるフォームを設計する場合には、4Dフォームの機能はHTMLのフォーム上で制限されていることを考慮してください (ただし、時には4Dの追加機能もあります) 。4Dフォームの機能をすべて使用できるとは限りません (例:オブジェクトタイプやフォームイベント) 。詳細については、後述の “HTMLの自動変換” を参照してください。
・プロセス間通信において、CALL PROCESSコマンドをWeb接続プロセスに適用した場合には、現在アクティブなフォームはWebブラウザに表示されているため、何の動作も行いません。一方Web接続プロセスは別の4Dプロセスに対してCALL PROCESSコマンドを発行できます。
さらに、プロセス間通信はGET PROCESS VARIABLEコマンドおよびSET PROCESS VARIABLEコマンドを使用することで、双方向に実行することができます。これらのコマンドは、ユーザインタフェースを持つ必要がないからです。
Web接続タイムアウト
前述したように、Web接続プロセスは4Dコードを実行しているか、またはブラウザ側で現在表示されているWebページのサブミッションを待機しているかのいずれかです。後者の場合、Web接続プロセスはWebプロセスタイムアウトと同じ時間だけ待機します。このタイムアウトは、環境設定ウィンドウの詳細ページ (Webテーマ) において、あるいはSET WEB TIMEOUTコマンドを用いてプログラムから設定されます。
Webサーバ接続タイムアウト設定の有効範囲は、データベースセッションです。すべてのWeb接続プロセスは、タイムアウト時間の値に従います。値の設定が変更されると、プロセスは即座に影響を受けます。デフォルト値は5分間です。
Note: SET WEB TIMEOUTはWebプロセスごとにタイムアウト値を指定できます。
必要に応じてこのタイムアウトを長くする、あるいは短くすることができます。例えばWebユーザがデータベースから提供されるページ内のHTMLリンクを経由して、他のWebサイトに移動することをアプリケーションが許可している場合には、タイムアウトを長くすることができます。タイムアウトを長くすることで、ユーザはデータベースへの接続がクローズされることなく、他のWebサイトをさらに長い時間ナビゲートできます。
警告: Web接続プロセスをプログラムで停止する方法はありません。長いタイムアウトを指定した場合には、Webユーザがかなり前にWeb接続での作業を終っていても、プロセスはその遅延を待つことになります。タイムアウトなしオプションを指定すると、Web接続プロセスはデータベースが終了した時にだけ停止します。しかし、Web接続プロセスはWebサーバが非コンテキストモードに切り替えられると同時に自動的にアボートされます。
Tip: Webサーバプロセスとは違って、Web接続プロセスはアボートコマンドを使用してアボートすることができます (プロセスページが表示されているときにランタイムエクスプローラで利用できます) 。
HTMLの自動変換
この節では、コンテキストモードにおいて4DがデータベースをHTMLに変換する際、自動的に処理される要素やオブジェクト、ならびにメカニズムについて説明します。
メニューバー
・各メニュータイトルはテキストとしてのみ表示され、4Dメソッドに関連付けられたメニューコマンドは4Dメソッドへのリンクとして表示されます。自動アクションだけに関連付けられたメニューコマンドは、テキストとしてのみ表示されます。
・Webブラウザ側でメニュー項目をクリックすると、Web接続プロセス側で関連する4Dメソッドの実行が開始されます。
Note: メニューコマンドに対して"新規プロセス開始"プロパティが指定されている場合、関連するメソッドは4DMETHOD URLを使用して、4D Webサーバにより新しいWeb接続プロセス内で実行されます。この場合、そのメニューのメソッドには4DACTION、4DMETHODおよび4DSCRIPTで利用可能オプション (デフォルトで未選択) が指定されていなくてはなりません。詳細については接続セキュリティの節を参照してください。
・ピクチャはブラウザのメニューの下に位置するメニューバーと結び付けられています。
フォーム
・オブジェクトは上から下へ、左から右への順で変換され、それらはブラウザと4Dフォームにあるものと同じ位置あります。しかしながらHTMLはワープロ志向のアプリケーションであり、オブジェクトの水平位置がフォームと異なったり、折り返しが発生したりすることがある点に留意してください。
・マルチページフォームは、0ページと警鐘フォームを含め、透過的にサポートされます。
・適切な場合には、自動アクションが透過的にサポートされます。
・フォームイベント (On Load、On Unload、On Clicked、On Timer) がサポートされます。それ以外のイベントはサポートされません。
・ヘッダ、ディテイル (詳細) 、ブレーク、フッタのタグは、DISPLAY SELECTIONコマンドとMODIFY SELECTIONコマンドへの呼び出し中に考慮されます。フォームのヘッダは、HTMLページの先頭に一度表示され、ディテイル (詳細) エリアは必要な数だけ繰り返されます。また、フッタエリアにある変数 (ボタン等) はHTMLページの最後、つまり自動選択ページナビゲーションリンクのすぐ下に配置されます。
・フォームエディタでピクチャとして表示されるボタンに割り当てられたtipsは、ブラウザが許可していれば、ブラウザ上で表示されます。
・4Dのフォームエディタ内の座標 (0、0、x、x、) に挿入された繰り返しピクチャ (表示タイプが"繰り返し") は、ブラウザの背景ピクチャとして送られます。暗いピクチャは避けるべきです。
Note: 4D Web ServerはCSS1(Cacading Style Sheet 1)を使って、4Dフォームに極めて近い外観を持つHTMLページを生成します。CSS1の仕様はW3C(World Wide Web Consourtium)により定義されます。これらのスタイルシートはドキュメントの外観に関わる特質、フォント、サイズ、タイトル、ボディ、行間などを設定します。4Dバージョン6.5から.CSSドキュメントはMIMEタイプのテキストまたはCSSとともに送られることになりました。コンテクスト/非コンテクストモードにかかわらずこれらのドキュメントは4Dにより処理されません。
互換性のため、SET DATABASE PARAMETERコマンド (セレクタ8、Web Conversion Mode) を用いてウェブ変換モードを変更することができます。
フィールドオブジェクト
4DフォームがHTMLページに変換される時に、フィールドオブジェクトは以下のように変換されます:
| 4D フィールドタイプ | HTML オブジェクト | HTML マークアップ |
| 文字 | Text フィールド (*) | <INPUT type="text" ...> |
| テキスト | Text フィールド (*) | <TEXTAREA ...> (**) |
| <INPUT type="text" ...> (***) | ||
| 実数 | Text フィールド (*) | <INPUT type="text" ...> |
| 整数 | Text フィールド (*) | <INPUT type="text" ...> |
| 倍長整数 | Text フィールド (*) | <INPUT type="text" ...> |
| 日付 | Text フィールド (*) | <INPUT type="text" ...> |
| 時間 | Text フィールド (*) | <INPUT type="text" ...> |
| ブール | Radio または Check box (*) | <INPUT type="radio" ...> |
| <INPUT type="checkbox" ...> | ||
| ピクチャ | イメージ (常に入力不可) | <IMG SRC="..." ...> |
| サブテーブル | HTML サポートなし | なし |
| BLOB | HTML サポートなし | なし |
(*) または入力不可の場合にはテキストのみ
(**) テキスト値が複数の行で構成されている場合
(***) テキスト値が1行だけ、または空行の場合
Note: 入力可能な変数は、変数と同じタイプのフィールドと似た動作になります。
フォームオブジェクト
4DフォームがHTMLページに変換される時に、フォームオブジェクトは以下のように変換されます:
| フォームオブジェクト | 同等のHTMLオブジェクト | HTML マークアップ |
| 線 | 水平線 (1) | <HR> |
| 四角 | 四角 | CSS1による管理 |
| 楕円 | HTML サポートなし | なし |
| 角の丸い四角 | HTML サポートなし | なし |
| スタティックピクチャ | イメージまたはイメージマップ (2) | <IMG SRC="..."> |
| <INPUT type="image" ...> | ||
| グループボックス | テキスト | 必要に応じてfontマークアップされたテキスト |
| スタティックテキスト | テキスト | 必要に応じてfontマークアップされたテキスト |
| ボタン | 送信ボタン | <INPUT type="submit" ...> |
| デフォルトボタン | 送信ボタン | <INPUT type="submit" ...> |
| ラジオボタン | ラジオボタン (3) | <INPUT type="radio" ...> |
| チェックボックス | チェックボックス | <INPUT type="checkbox" ...> |
| ポップアップ/ドロップダウンリスト | ドロップダウンリスト | <SELECT ...>...</SELECT> |
| コンボボックス | ドロップダウンリスト | <SELECT ...>...</SELECT> |
| スクロールエリア | スクロールリスト (4) | <SELECT ...>...</SELECT> |
| タブコントロール | URLリスト (5) | <A HREF="/4DTAB/4DVar.Onglet..."> |
| 非表示ボタン | note 2参照 | |
| ハイライトボタン | note 2参照 | |
| 3Dボタン | note 2参照 | |
| ボタングリッド | note 2参照 | |
| グラフ | イメージ (入力不可) | <IMG SRC="..." ...> |
| プラグイン | HTML テキスト, イメージ | 必要に応じてfontマークアップされたテキスト |
| またはイメージマップ (6) | または <IMG SRC="..." ...> | |
| または <INPUT type="image"...> |
以下のオブジェクトは、HTMLではサポートされていないため、トランザクション中は無視されます:
階層ポップアップメニュー、階層リスト、サブフォーム、タブコントロール、ラジオピクチャ、サーモメータ、ルーラ、ダイアル、ピクチャポップアップメニュー、ピクチャボタン、3Dチェックボックス、3Dラジオボタン
Notes
1. 水平方向以外の行は、HTMLではサポートされません。そのため、それらの行は無視されます。
2. 非表示系のボタンは、透明ボタン、ハイライトボタン、3Dボタン、ボタングリッドタイプのオブジェクトです。非表示系のボタンが静止ピクチャの上に重ならない場合には、静止ピクチャは静的イメージとして変換されます。非表示系のボタンが静止ピクチャの上に1つでも重なる場合は、静止ピクチャはサーバサイドイメージマップとして変換されます。Webブラウザ側では、このイメージはサーバサイドイメージマップとして扱われます。4D側では、サブミッションが受け付けられた時に、ボタンが実際にクリックされたかのように適切なボタン用にOn Clickedイベントを生成するために、クリックの場所を4Dが再計算します。このようなことから、非表示系のボタンを管理することは、静止ピクチャと重なっている場合には非常に簡単です。非表示系のボタンは、通常の4Dインタフェースで実行するように、フォーム」ソッドまたはそれらのオブジェクトメソッドによって管理します。また、非表示系のボタンではWeb Image Mappingを処理するのが非常に簡単になります。非表示系のボタンは、静止ピクチャオブジェクトとまったく重ならない場合には、変換中は無視されます。
3. ラジオボタンのグループ化は、変換中に保持されます。
4. グループ化されているスクロールエリアは、HTMLではサポートされません。4Dは同じ行にある独立したスクロールリストとしてグループ化されたスクロールエリアを変換します。
5. タブコントロール(配列タイプ又はオブジェクトプロパティで定義された値を使って作成された)はURLリストに変換されます。
配列要素が空白の文字だったら、4Dはブラウザに1,2,3を表示します。
6. プラグインエリアは、最初にHTMLにイメージまたはイメージマップとして変換することで、Web上に公開可能です。イメージマップのソリューションにより、プラグインエリア内でマウスのクリックを管理することができます(例えば、4D Chartのプラグインの統合はイメージマップで公開され、4D_Pack _AP External clockはイメージとして公開されています)。これらのプラグインエリアや4Dフォーム上は、プラグインエディタの詳細によりWeb上に公開されます。
Display Selection / Modify Selection
・UserSet メカニズムは、サポートされません。
・自動セレクションページングメカニズムが4Dから提供されます。詳細については、SET WEB DISPLAY LIMITSコマンドの説明を参照してください。
4D コマンド
4D Webデータベースを開発している時に、コマンドが呼び出されると何が起きるかを知りたい場合があります。コマンドは、Webサーバマシン上で有効になるのか、あるいはWebブラウザマシン上で有効になるのでしょうか?Web接続プロセスはWebサーバマシン上で稼働していますが、そのユーザインタフェースは接続されているWebブラウザ上にリモートでエコーされます。したがって、Webデータベースの開発では、4Dコマンドは以下のように規定できます:
Web接続プロセス内からの実行に影響を受けないコマンド
CREATE RECORDのようなコマンドは、稼働中のプロセスの中で作動します。この場合、CREATE RECORDコマンドはWeb接続プロセス内でレコードを作成します。同じことがScreen width等の関数にも当てはまります。この関数は、Webサーバマシン(プロセスが稼働しているマシン)の画面の幅を返します。
透過的なWebサポートのための追加組み込み機能を含むコマンド
| コマンド名 | コメント |
| ADD RECORD | フォームの自動変換。マルチページフォームをサポートする |
| ALERT | ダイアログボックスの自動変換 |
| CONFIRM | ダイアログボックスの自動変換 |
| DIALOG | フォームの自動変換、マルチページフォームをサポートする |
| DISPLAY SELECTION | フォームの自動変換 |
| 内蔵ののWebページングメカニズム | |
| UserSetメカニズムはサポートしない | |
| MODIFY RECORD | フォームの自動変換、マルチページフォームをサポートする |
| MODIFY SELECTION | フォームの自動変換 |
| 内蔵のWebページングメカニズム | |
| UserSetメカニズムはサポートしない | |
| QUERY | 標準のクエリダイアログボックスをサポートする |
| QUERY BY EXAMPLE | フォームの自動変換、マルチページフォームをサポートする |
| Request | ダイアログボックスの自動変換 |
| REDRAW | ブラウザ上で表示されたフォームのアップデート |
実行したいことがわかっている場合に使用するコマンド
以下のコマンドは、Webサーバマシン上でローカルに実行されます。
例えば、Webブラウザからセレクションの印刷処理を起動できます。ただし、印刷はWebサーバマシン上で行われます。
さらに、ユーザインタフェースコンポーネントが含まれると、そのコンポーネントはWebサーバマシンに表示されます。つまりOpen document("")とOpen Document("This document")の違いです。Webサーバマシン上でダイアログボックスがクローズされるまでWebブラウザが応答を待つため、このような呼び出しは避けるべきです。それに対して、ダイアログボックスが含まれない時にこれらのルーチンを呼び出すことはまったく問題がありません。
| コマンド名 | コメント |
| Append document | ファイルダイアログボックスが起動されなければ、問題なし |
| BEEP | Webサーバマシン上で警告音を出す |
| Create document | ファイルダイアログボックスが起動されなければ、問題なし |
| DISPLAY RECORD | 何も行わない |
| EXPORT DIF | ファイルダイアログボックスが起動されなければ、問題なし |
| EXPORT SYLK | ファイルダイアログボックスが起動されなければ、問題なし |
| EXPORT TEXT | ファイルダイアログボックスが起動されなければ、問題なし |
| IMPORT DIF | ファイルダイアログボックスが起動されなければ、問題なし |
| IMPORT SYLK | ファイルダイアログボックスが起動されなければ、問題なし |
| IMPORT TEXT | ファイルダイアログボックスが起動されなければ、問題なし |
| LOAD SET | ファイルダイアログボックスが起動されなければ、問題なし |
| LOAD VARIABLES | ファイルダイアログボックスが起動されなければ、問題なし |
| MESSAGE | メッセージは、Webサーバマシン上に表示される |
| Open document | ファイルダイアログボックスが起動されなければ、問題なし |
| Open external window | ウインドウは、Webサーバマシン上で開かれる |
| Open resource file | ファイルダイアログボックスが起動されなければ、問題なし |
| Open window | ウインドウは、Webサーバマシン上で開かれる |
| PLAY | 音は、4Dマシン上で再生される |
| Print form | ファイルダイアログボックスが起動されなければ、問題なし |
| PRINT LABEL | ファイルダイアログボックスが起動されなければ、問題なし |
| PRINT RECORD | ファイルダイアログボックスが起動されなければ、問題なし |
| PRINT SELECTION | ファイルダイアログボックスが起動されなければ、問題なし |
| QUIT 4D | サポートされている、Webサーバマシンをリモートでシャットダウンできる |
| SAVE SET | ファイルダイアログボックスが起動されなければ、問題なし |
| SAVE VARIABLES | ファイルダイアログボックスが起動されなければ、問題なし |
| SELECT LOG FILE | ファイルダイアログボックスが起動されなければ、問題なし |
| SET CHANNEL | ファイルダイアログボックスが起動されなければ、問題なし (ドキュメント) |
| TRACE | デバッガウインドウは、Webサーバマシン上に表示される |
Web接続プロセスではサポートされないコマンド
| コマンド名 | コメント |
| ADD DATA SEGMENT | Web接続プロセスからこのコマンドを呼び出してはならない |
| このコマンドはWeb上で使用するようには設計されていません | |
| ADD SUBRECORD | Web接続プロセスからこのコマンドを呼び出してはならない |
| このコマンドはWeb上で使用するようには設計されていません | |
| CHANGE CURRENT USER | Web接続プロセスからこのコマンドを呼び出してはならない |
| このコマンドはWeb上で使用するようには設計されていません | |
| EDIT ACCESS | Web接続プロセスからこのコマンドを呼び出してはならない |
| パスワードウインドウは4Dマシン上に表示されます | |
| ブラウザはウインドウが閉じられるまで待ちます | |
| GRAPH TABLE | Web接続プロセスからこのコマンドを呼び出してはならない |
| このコマンドはWeb上で使用するようには設計されていません | |
| MODIFY SUBRECORD | Web接続プロセスからこのコマンドを呼び出してはならない |
| このコマンドはWeb上で使用するようには設計されていません | |
| ORDER BY | プログラムによるサポートのみ |
| 標準の並び替えダイアログボックスはWebではサポートされていません | |
| PRINT SETTINGS | Web接続プロセスからこのコマンドを呼び出してはならない |
| プリントダイアログボックスは4Dマシン上に表示されます | |
| ブラウザはウインドウが閉じられるまで待ちます | |
| QR REPORT | Web接続プロセスからこのコマンドを呼び出してはならない |
| Quick Reportは4Dマシン上に表示されます | |
| ブラウザはウインドウが閉じられるまで待ちます |
HTMLの埋め込み
HTMLコード(またはJavascript)をフォーム内に埋め込むことにより、HTMLに変換された4Dフォームの内容をカスタマイズすることができます。この結果Webブラウザ側に表示されるフォームには、HTMLと4Dオブジェクトが混在します。
スタティックテキストオブジェクトを使用したHTMLページの挿入
例えば、“{page.HTM}”という文字列を含む4Dフォームのスタティックテキストオブジェクトは、4Dフォーム内にあるそのテキストオブジェクトの場所にHTMLドキュメント“page.HTM”を挿入します。この場合、ドキュメント全体(実際には<BODY>から</BODY>タグの間に含まれるものすべて)が挿入されます。既存のHTMLドキュメントを使用するか、あるいはランゲージを使用してディスクに保存するドキュメントを作成し、この後にそれを参照することもできます。
Note: 場合によって、バージョン6.0.xで作成された4DフォームにHTMLドキュメント({mypage.htm})への参照が含まれていると、バージョン6.7以降の4DではこのフォームのHTML変換が予期しない結果になることがあります。この場合、SET DATABASE PARAMETERコマンドを使用して、フォームの変換モードを変更することができます。
HTMLコードの挿入
4Dのテキスト変数の1桁目がASCIIコード1である場合、テキスト変数を使用してHTMLコードを4Dフォームに埋め込むことができます(例えばvtHTML:=Character(1)+"...HTML code...")。
このようにして、コードを挿入することができます。また、この場合はHTMLコードをメモリ上に作成することができます。
ファイル参照とURL
コンテキストモードでデータベースのコンテキストIDとサブコンテキストIDの保守を確実にするために、4Dはファイル参照とURLを自動的に再マップします。例えば、4DはすべてのIMG参照とHREF参照をローカルファイルに再マップします。
テキスト変数を使用して独自のHTMLコードを4Dフォームに挿入する場合には、4D再マッピング構文に従う必要があります。
ローカルのGIFファイルは"/4DBin/_/GIF_file_pathname"として再マップされ、ここでGIF_file_pathnameはファイルが存在するボリュームのルートに相対的なGIFファイルの完全なHTMLパス名になります。
例題
以下の4Dメソッドは、引数として受け取ったパス名に対する再マップされた参照を返します:
` WWW Local GIF URL Project Method ` WWW Local GIF URL Project ( Text ) ` WWW Local GIF URL ( Native pathname ) -> URL to local GIF file C_TEXT($0;$1) $0:="/4Bin/_/"+HTML Pathname ($1)
Note: HTML Pathnameメソッドの詳細は、Mac to ISOコマンドを参照してください。
次に、テキスト変数を使ってHTMLコードを4Dフォームに挿入する場合は、以下のように指定できます:
vtHTML:=Char(1)+"<P><IMG SRC="+Char(34)+WWW Local GIF URL("F:\ThisImage.HTM"+Char(34)
+" ALIGN=MIDDLE></P>"+Char(13)
これによって、4D変数vtHTMLの位置にGIFドキュメントが4Dフォームに挿入されます。
重要: カスタムHTMLコードを4Dフォームに挿入するには、単にこの種のコードを作成します。SEND HTML FILEコマンドを使用してHTMLページを送信するだけ、またはADD RECORDコマンド等のコマンドを使用する場合には、4Dが透過的にHTMLを変換し、再マップすることに注意してください。
再マッピングは、以下のプロトコルを持つリンクを変更しません:
・http:
・ftp:
・mailto:
・news:
・gopher:
・javascript:
・nntp:
・wais:
・prospero:
・telnet:
参照
On Web Authentication データベースメソッド, On Web Connection データベースメソッド, SET DATABASE PARAMETER, 接続セキュリティ.