4D v14.34Dテーブルとメソッドの呼び出し |
||||||||||
|
4D v14.3
4Dテーブルとメソッドの呼び出し
4Dテーブルとメソッドの呼び出し
Wakandaから参照されている4Dテーブルへのアクセスモードは、外部カタログがどのように統合されているかによって決まります。これはWakandaがリモートアプリケーションへと接続する際にWakanda内にて定義されます(アクティブなモデルとの併合か、専属のモデルの使用か を参照して下さい):
アクティブなモデルと統合した場合、Wakandaアプリケーションから参照されている 4D テーブルは、ローカルのdatastore classes と同様に、サーバー側のJavaScriptのコードの中でds オブジェクトのプロパティとして直接使用することができます。注: ds オブジェクトはWakandaのカレントのdatastoreを内包しています。 例えば、[Employees]テーブルのレコード内でクエリを実行しようとした場合、以下の様に記述します: var emp = ds.Employees.query("age > :1",30); // Employeesテーブルから、年齢が30 歳を超える // レコードのコレクションをemp変数に返します。また、クライアント側では、ウィジェット付随の、データストアクラスに基づいた datasources 自動メカニズムを使用することもできます。例えば、`employees`データソースを`Grid`型のウィジェットと関連付けするとemployeesのリストが自動的に表示されます: テーブルがdatasourceと関連付けられているとき、データソースを使用してテーブルのデータにアクセスることもできます。例えば、`employees` データソースのレコードのコレクションをソートしたい場合、以下の様に記述します: sources.employees.orderBy("age"); //employees のコレクションを年齢順にソートします。 datastore クラスの仕様については、Wakanda documentationを参照して下さい。 参照されている4Dテーブルは、リンクが作成された時点でのカタログのプロパティとして、サーバー側のJavaScriptコード内にて使用されます。このカタログの名前はWakanda Studio 接続ダイアログボックスでの接続引数としてRemote datastore name に渡したもの、またはJavaScriptメソッドでの localName に渡したものになります。 例えば、"my4Dstore" という名前のリンクを作成して、[Employees] テーブルのレコード内にてクエリを実行したい場合、以下の様に記述します: var emp2 = my4Dstore.Employees.query("age > :1", 30); // "my4Dstore"という名前のリンク内で // Employees テーブルのレコード内を検索 実装に関する注意: 現在の4D Mobileでは、専属のモデルを使用した場合、クライアント側ではリモートクラスへとアクセスすることはできません。 Wakanda 内で参照されている4Dメソッドは、datastore class, entity collection または entity オブジェクトのプロパティとしてJavaScriptのコードの中で直接使用することができます。どれのプロパティとして呼び出されるかは4D側で定義されたスコープによって決まります( プロジェクトメソッドのペアレントテーブルとスコープについて を参照して下さい)。Wakandaオブジェクトとプロジェクトメソッドの対応表は以下の様になります:
Note: 4Dメソッドはデータソースを使用することによってクライアント側で呼び出すことも可能です(以下を参照して下さい)。この場合は全てのメソッドが使用可能で、データソースが状況に応じてカレントコレクションかカレントエンティティに適用するかを自動的に判別します。 例えば、前章で使用したクエリメソッドを使用してクエリを実行した場合、Wakandaはエンティティコレクションを返します。このコレクションに対しては、スコープが「カレントセレクション」と宣言されている4Dプロジェクトメソッドであればどれでも使用可能です。 4DメソッドがJavaScriptから呼び出される方法は3通りあります:
標準的なメソッド同様、呼び出し中にメソッドに引数を渡す事ができます。これらの引数は$1、$2、、、という順番で引き受けられていきます。同じように、$0がメソッドからの返り値になります。 例題:給料が1500未満の従業員に対して5%の昇給を行いたい、という場合を考えます。
Wakanda リンクを通して4Dメソッドを呼び出す場合:
メソッドを4D Mobileを通して実行した後、4Dのコンテキストは以下の様にリセットされることに注意して下さい:
4Dメソッドのスコープは、それを呼び出すWakandaオブジェクトの方と対応し、合致している必要があります。そうでない場合には "TypeError: 'undefined' is not a function" というエラーがWakandaによって返されます。 例えば、以下のコードによって記述された"getcursel"という4Dメソッドについて考えてみましょう: $0:=Records in selection([Table_1]) Wakanda側に以下のメソッドが実行されていると仮定します。: var tt = ds.Table_1.query("Field_2 = 'a*'").getcursel(); query() メソッドはコレクションを返します。もし getcursel メソッドのスコープが「カレントレコード」に設定されていた場合、Wakandaは以下のエラーを返します: |
プロパティ
プロダクト: 4D ARTICLE USAGE
4D Mobile ( 4D v14 R3) Inherited from : 4Dテーブルとメソッドの呼び出し ( 4D v14 R2) |
||||||||