4D v14.34Dテーブルとメソッドの呼び出し |
||||||||||
|
4D v14.3
4Dテーブルとメソッドの呼び出し
|
4D スコープ | Wakanda オブジェクト |
テーブル | datastore class |
カレントセレクション | entity collection |
カレントレコード | entity |
Note: 4Dメソッドはデータソースを使用することによってクライアント側で呼び出すことも可能です(以下を参照して下さい)。この場合は全てのメソッドが使用可能で、データソースが状況に応じてカレントコレクションかカレントエンティティに適用するかを自動的に判別します。
例えば、前章で使用したクエリメソッドを使用してクエリを実行した場合、Wakandaはエンティティコレクションを返します。このコレクションに対しては、スコープが「カレントセレクション」と宣言されている4Dプロジェクトメソッドであればどれでも使用可能です。
4DメソッドがJavaScriptから呼び出される方法は3通りあります:
var vTot = ds.Emp.raiseSalary(param)) // raiseSalary はdatastore class のプロパティ //カタログはアクティブなモデルと統合 var vTot2 = my4DStore.Company.first().capital(param)) // first() はentityを返すので、capital はentity propertyとなる // my4DStore という専属のモデルを使用
sources.employee.raiseSalary(param, {onSuccess: function(event) { ... //メソッド終了時に実行されるべきコード} }))
ds.Employee.raiseSalary(param, // シンタックスはSSJSの呼び出しに {onSuccess: function(event) // ていますが、これはクライアント側の // コードなので非同期呼び出しのコールバック関数を管理する必要があります。 { ... //メソッド終了時に実行されるべきコード} }))
呼び出す場所(サーバーかクライアント)と、使用すべきAPIはアプリケーションによって異なり、その詳細はWakanda ドキュメントに説明があります。
標準的なメソッド同様、呼び出し中にメソッドに引数を渡す事ができます。これらの引数は$1、$2、、、という順番で引き受けられていきます。同じように、$0がメソッドからの返り値になります。
例題:給料が1500未満の従業員に対して5%の昇給を行いたい、という場合を考えます。
C_REAL($1)
READ WRITE([Employees])
FIRST RECORD([Employees])
While(Not(End selection([Employees])))
[Employees]salary:=[Employees]salary*$1
SAVE RECORD([Employees])
NEXT RECORD([Employees])
End while
UNLOAD RECORD([Employees])
var emp = ds.Employees.query("salary < :1",1500); // emp にはsalaryが1500未満の従業員のコレクションが入ります。 emp.IncreaseSalary(1.05); //コレクションに対してIncreaseSalary を実行します。 //以下の様に記述することもできます: //"ds.Employees.query("salary < :1",1500).IncreaseSalary(1.05);
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は以下のエラーを返します:
TypeError: 'undefined' is not a function (evaluating 'ds.Table_1.query("Field_2 = 'a*'").getcursel()')".
プロダクト: 4D
テーマ: 4Dテーブルとメソッドの呼び出し
4D Mobile ( 4D v14 R3)
4D Mobile ( 4D v14.3)
4D Mobile ( 4D v14 R4)
Inherited from : 4Dテーブルとメソッドの呼び出し ( 4D v14 R2)