4D Serverで、サーバマシン上で4Dコードを実行する状況が4つあります:
- トリガ
- ストアドプロシージャ
- "サーバ上で実行"属性が設定されたプロジェクトメソッド
- データベースメソッド
トリガはテーブルに付属するメソッドです。トリガを使用すれば、データベースのレコードに対して"不正な"操作が行われるのを防ぐことができます。 トリガは、偶発的にデータが失われたり、変更されたりするのを防ぐだけでなく、テーブルに対する操作を制限するための非常に強力なツールです。例えば、請 求システムにおいて、誰かが請求先である顧客を指定せずに請求書を追加するのを防止することができます。
トリガは、データベースエンジンが実際に存在するマシン上で実行されます。
4D Serverでは、トリガはクライアントマシンではなく、サーバマシン上で実行されているプロセスのコンテキストで実行されます。すなわちトリガは、デー タベース処理を呼び出したユーザプロセスに対応するサーバプロセスのコンテキストで実行されます (特にトランザクションの状態とレコードロック) が、ランゲージコンテキスト (変数、プロセス、セット、カレントセレクション) は共有しません。ただしトリガテーブルのカレントレコードはすべてのコンテキストで同じです。
トリガについては4D Language Referenceのトリガを参照してください。
注意: サーバー上では、トリガは割り当てられたアクション(作成/更新/削除)に対応したプロセス内で実行されます。アクションがサーバー上のプリエンプティブプロセス(例: ストアドプロシージャー、スケーラブルセッションモード内のhttpリクエスト)から引き起こされた場合、トリガは同じプリエンプティブプロセス内で実行されます。しかし、アクションが4Dリモートから引き起こされた場合、トリガはツインプロセス内で実行され、このツインプロセスは必ずコオペラティブモードとなります(ツインプロセスはそのユーザーの全ての呼び出しに対して共有されます)。詳細については developer.4d.com 上のプリエンプティブプロセスのページ をご覧下さい。
4Dのストアードプロシージャは、それを起動したクライアントマシンの代わりに、サーバマシン上で実行されるプロセス内のプロセスメソッドを実行するプロジェクトメソッドです。ストアドプロシージャを参照してください。
サーバー上で実行されている全てのストアドプロシージャーは同じバーチャルユーザーセッションを共有します。このセッションはSession コマンドによってSession class オブジェクトとして返されます。
セッションオブジェクトを使用すると、セッションのについての情報を取得することができるようになる上に、.storage プロパティを使用することでプロセス間で情報を共有できるようになります。
バーチャルユーザーセッションは以下のコンテキストから利用可能です:
- Execute on server コマンドで呼び出されたメソッド
- On Server Startup、On Server Shutdown、On Backup Startup、On Backup Shutdown、およびOn System event データベースメソッド
注意: サーバー上の全てのユーザーセッションはそれぞれのセッションオブジェクトを持っています。詳細な情報については、developer.4d.com 上のこちらのページを参照してください。
"サーバ上で実行"の属性が指定されたプロジェクトメソッドもサーバ上で実行されます。しかしストアドプロシージャと異なり、このメソッドはクライアントプロセスに対応するサーバ上のプロセスで実行され、トリガのように、データベースコンテキストを利用できます。詳細はサーバー上で実行属性を参照してください。
4つのデータベースメソッドがサーバマシン上でのみ実行されます:
他の5つのデータベースメソッドはコンテキストに応じてサーバマシンおよびクライアントマシン両方で実行されます:
3つのデータベースメソッドはクライアントマシン上でのみ実行されます:
詳細はこのマニュアル内および4D Language Reference マニュアルのそれぞれ対応する節を参照してください。
4D Serverにおいて、セットと命名セレクションの可視範囲はそれが作成された場所 (サーバプロセスまたはクライアントプロセス) およびそのオブジェクトタイプ (ローカル、プロセス、またはインタープロセスオブジェクト) に基づきます。詳細は4D Server: セットと命名セレクションを参照してください。