4Dアプリケーションでは、4種類のセッションが存在します。4Dリモートセッション、ストアドプロシージャーセッション、モバイルセッション、Webセッションです。
Sessionコマンドはいままで、Web または モバイルセッションを返しました。これにより、セッションに関する豊富な情報と、セッション内のすべてのプロセスで共有されるオブジェクトにアクセスできます。
4D 20 R5 では、Sessionコマンドの対象がクライアント/サーバー接続とストアドプロシージャーに拡張されました。
4Dセッション
セッションタイプ
ストアドプロシージャーセッションとリモートセッションの定義は以下の通りです:
ストアドプロシージャーセッション
Execute on serverコマンドでメソッドを呼び出すと、4Dは “ストアドプロシージャー” プロセスを作成します。すべての “ストアドプロシージャー” プロセスは、ストアドプロシージャー専用の同じセッションに属します。
リモートセッション
“サーバー上で実行” プロパティを持つメソッドは、サーバー上でクライアントプロセスの “双子” プロセスで実行されます。これらの “双子” プロセスはすべて、同じセッション内で実行されます。
Sessionクラス
リモートセッションまたはストアドプロシージャーセッションに対して、Sessionコマンドは以下のプロパティを含む 4D.Sessionオブジェクトを返します:
- id – セッションの一意な識別子
- info – セッションに関するすべての情報。
- storage – リモートセッションの全プロセスで利用可能な情報を格納するのに使用できる共有オブジェクト。
- userName – セッションに関連付けられたユーザー名
Webセッションと同じ関数が、汎用的なコードを書くために利用可能です。しかし、リモートセッションではこれらは何もせず、常に同じ値を返します。Session クラスのドキュメントを参照ください。
例
{ "id": "B022A91187EF46C6B4D58C2A9BDE3C91", "info":{ "type": "remote", "userName": "Designer", "machineName": "John Computer", "systemUserName": "John Doe", "IPAddress": "localhost", "hostType": "mac", "creationDateTime": "2024-03-27T10:11:31Z", "state": "active", "ID": "B022A91187EF46C6B4D58C2A9BDE3C91", "persistentID": "24336199BADF4BFE945B109E565D1189" }, "storage": { "settings": { "text": "test" } }, "userName": "Designer" }
プロセス間のデータ共有
新しいセッションが作成されると、”Session.storage” プロパティは空の共有オブジェクトでインスタンス化されます。そして、同じセッション内のプロセス間で共有したいデータを格納することができます。
Use (Session.storage)
Session.storage.settings:=New shared object("property"; $value; "property2"; $value2)
End use
使用例
ユーザー認証および検証プロセス
クライアントがサーバーに接続するときに、ユーザー認証と検証の手順を起動します。これには、電子メールや SMS で送信されたコードをアプリケーションに入力するなどの操作が含まれるかもしれません。その後、セッションストレージにユーザー情報を追加することで、サーバーがユーザーを識別できるようにします。このようにして、4Dサーバーは、すべてのクライアントプロセスのユーザー情報にアクセスすることができ、ユーザーの役割 (マネージャー、人事など) に応じてカスタマイズされたコードを実行することができます。
データの制限
この新しいセッションタイプでは、接続ユーザーに対して表示するデータを制限することができます。たとえば、顧客管理アプリケーションで、営業担当者が自分の顧客データにのみアクセスできるようにします。この新機能に関するすべての情報は、このブログで説明されています。
最後に
ご質問がある場合、または経験や使用例を共有したい場合は、4Dフォーラムにお気軽にご参加ください。