Table of Contents | ||||
---|---|---|---|---|
|
15. FR Toolbox リファレンス
...
これらの Reactor タグ間のすべてが Reactor によって解釈されます。これは次のようになります。:
FileMaker calculation
Reactor タグ内で任意の FileMaker 計算を実行できます
...
出力例: next_week_date_var = '22/06/2019';
Get parameter
...
value パラメータ値を取得
任意の BlackBox パラメータの値にローカル変数としてアクセスできます。:
text_field_var = '<?reactor $text_field reactor?>';
Example output: 出力例:text_field_var = 'mytext';
Get value of field name
...
parameter フィールド名パラメータの値を取得
field_name_var = '<?reactor bbdev_Field( $field_name ) reactor?>';
Example output:出力例:field_name_var = 'Description'
Get table occurrence name of field name
...
parameter フィールド名パラメータのテーブルオカレンス名を取得
field_name_TO_var = '<?reactor bbdev_TO( $field_name ) Reactor?>';
Example output: 出力例:field_name_TO_var = 'Task';
Get ‘where’ clause based on relationship from current context to table occurrence: 現在のコンテキストからテーブルオカレンスまでのリレーションシップに基づいて「where」句を取得します。:
(This is generally used when querying dataこれは通常、データをクエリするときに使用されます)
where_clause_var = '<?reactor bbdev_Relationship( bbdev_TO($field_name) ) reactor?>';
Example output: 出力例: Task.status = 'active' and Task.type = 'booked'
Get list of initial creation values based on relationship from current context to table
...
occurrence 現在のコンテキストからテーブル オカレンスまでのリレーションシップに基づいて、初期作成値のリストを取得する
(通常、FRTB.create()
メソッドと組み合わせて、新しいレコードを作成するときに使用されます)
creation_values_var = '<?reactor bbdev_relationshipKeyBuilder ( bbdev_TO($field_name) ) reactor?>';
Example output: 出力例:
Names="status,type" Values="active","booked"
Get container field images from container field parameter
...
value オブジェクトフィールドパラメータ値からオブジェクトフィールド画像を取得
<?reactor bbdev_LoadImages( $container_field ; $field_name ; $com.reactorize.env.loadedfilepath ) reactor?>
Example output:出力例:
<img src="task_01.png" />
...
<img src="task_03.png" />
(The $field_name
values determine the filename they’re given. の値によって、指定されたファイル名が決まります。)
FRToolbox
...
リクエスト
The following JavaScript methods can be used to perform requests on your FileMaker database and process the response.
These requests can be chained together, and in many cases they must be. For example, all the following methods must invoke the send();
method to actually submit the request.
...
次の JavaScript メソッドを使用して、FileMaker データベースで要求を実行し、応答を処理できます。
これらのリクエストは連鎖させることができ、多くの場合、そうしなければなりません。たとえば、次のすべてのメソッドは send();
を呼び出す必要があります。実際にリクエストを送信するメソッド。
Find records レコードを検索
FRTB.find(field1, field2, field3, etc)
Returns a found set of records, the values returned depends on the fields specified in the request.
For example:
QueryData =
見つかったレコードのセットを返します。返される値は、リクエストで指定されたフィールドによって異なります。
例:
Code Block |
---|
QueryData = FRTB.find( |
...
"Task::name", |
...
"Task::description" |
...
); |
Will create a request to retrieve the name
and description
field values from all records from the table that the Task
table occurrence is based on.
If you have used the タスク テーブルのオカレンスが基になっているテーブルのすべてのレコードからname
とdescription
フィールドの値を取得する要求を作成します。
bbdev_Field() and およびbbdev_TO() functions to store the field name(s) and table occurrence(s) into variables, you can can use those:
QueryData = FRTB.find(
関数を使用してフィールド名とテーブルの出現を変数に格納した場合は、それらを使用できます。:
Code Block |
---|
QueryData = FRTB.find( TO_name_var + "::" + name_field_var, |
...
TO_name_var + "::" + description_field_var |
...
); |
...
Constrain
...
records レコードの制約
.where(whereclause)
Constrains a find request based on an SQL WHERE
clause.For example: 句に基づいて検索条件を制限します。
例:
Code Block |
---|
QueryData = FRTB.find( |
...
"Task::name", |
...
"Task::description" |
...
).where(Task.status = 'active'); |
Will create a request to retrieve the name
and description
field values from all records from the table that the Task
table occurrence is based on, that have a value of active
in the Task テーブルのオカレンスの基になっているテーブルから、Task::status
field.If you have used the フィールドの値が active
であるすべてのレコードからname
とdescription
フィールドの値を取得するリクエストを作成します。
bbdev_Relationship() function to form a ‘where clause’ you can use the 関数 を使用して「where 句」を作成した場合は、代わりに .filter()
method instead, which allows you to use FM-style syntax rather than SQL-style syntax (eg, メソッドを使用できます。これにより、SQL スタイルの構文ではなく FM スタイルの構文を使用できます (例えば、Task::name
rather than Task.name
よりTask::name
)
.filter(where_clause_var);
Send
...
This is used to actually submit a request to Reactor. You can first form the request and then send:
QueryData = FRTB.find(
...
Request リクエストを送信
これは実際に Reactor にリクエストを送信するために使用されます。最初にリクエストを作成してから送信できます:
Code Block |
---|
QueryData = FRTB.find( "Task::name", |
...
"Task::description" |
...
).where(Task.status = 'active'); |
...
QueryData.send(); |
Or send it as you generate the request:または、リクエストを生成するときに送信します。:
Code Block |
---|
QueryData = FRTB.find( |
...
"Task::name", |
...
"Task::description" |
...
).where("Task.status = 'active'").send(); |
This will submit your request to Reactor. However, to take a look at what comes back you’ll want to use a callback function. You can either define a function and call that:
function これにより、リクエストが Reactor に送信されます。ただし、戻ってくるものを見るには、コールバック関数を使用する必要があります。関数を定義して呼び出すことができます。:
Code Block |
---|
function CheckResponse(response) { |
...
alert ( "Response received!") ; |
...
} |
...
QueryData = FRTB.find( |
...
"Task::name", |
...
"Task::description" |
...
).where("Task.status = 'active'").send(CheckResponse); |
Or you can define an anonymous function inside the request:または、リクエスト内で無名関数を定義できます。:
Code Block |
---|
QueryData = FRTB.find( |
...
"Task::name", |
...
"Task::description" |
...
).where("Task.status = 'active'").send(function(response) { |
...
alert ( "Response received!") ; |
...
}); |
When you set a callback function with send()
, it will include a parameter containing the response of the request. When using with a find()
request, this response will include data retrieved.
The response of a find()
request is returned as an object. This object contains a property called data
. This data
property is an array of objects. The key of each element of the array is the full field name (including table occurrence name).
...
So in your callback function, to access the values of each record in the response, you’d loop through them:
for ( var i=0; i < response.data.length; i++) {
taskname = response.data[i]["Task::name"];
taskdescription = response.data[i]["Task::description"];
alert (taskname + ": " + taskdescription );
}
Poll Request
This is used for polling for changes after the find()
request is submitted.
Polling utilises a Timestamp auto-enter with a fixed name of zModID
:
...
If you invoke this request, it will poll for changes after the data is queried; it can poll for new records, for changed records, or for deleted records.
QueryData = FRTB.find(
TO_name_var + "::" + name_field_var,
TO_name_var + "::" + description_field_var
).filter(where_clause_var).poll(PollChanges).send(function(response) {
alert ( "Response received!") ;
});
This will call the PollChanges()
function whenever the data is polled. By default it polls every 5000ms (5 seconds), or you can set your own interval if you wish:send()
でコールバック関数を設定すると、リクエストの応答を含むパラメーターが含まれます。 find()
リクエストで使用する場合、このレスポンスには取得したデータが含まれます。
find()
リクエストのレスポンスはオブジェクトとして返されます。このオブジェクトには、data
というプロパティが含まれています。このデータ プロパティは、オブジェクトの配列です。配列の各要素のキーは、完全なフィールド名 (テーブルのオカレンス名を含む) です。
...
したがって、コールバック関数で、応答の各レコードの値にアクセスするには、それらをループします。:
Code Block |
---|
for ( var i=0; i < response.data.length; i++) {
taskname = response.data[i]["Task::name"];
taskdescription = response.data[i]["Task::description"];
alert (taskname + ": " + taskdescription );
} |
Poll Request プルリクエスト
これは、find()
リクエストが送信された後の変更のポーリングに使用されます。
ポーリングは、固定名 zModID
を持つタイムスタンプ自動入力を利用します。:
...
このリクエストを呼び出すと、データがクエリされた後に変更をポーリングします。新しいレコード、変更されたレコード、または削除されたレコードをポーリングできます。
Code Block |
---|
QueryData = FRTB.find(
TO_name_var + "::" + name_field_var,
TO_name_var + "::" + description_field_var
).filter(where_clause_var).poll(PollChanges).send(function(response) {
alert ( "Response received!") ;
}); |
これにより、データがポーリングされるたびに PollChanges()
関数が呼び出されます。デフォルトでは、5000 ミリ秒 (5 秒) ごとにポーリングしますが、必要に応じて独自の間隔を設定することもできます。:
.poll(PollChanges,2000)
This will set the polling to occur every 2 seconds.
When the PollChanges() function is called, it returns an object containing the poller results. The object contains three properties, each of which is an array of rowid
values that point at records which have changed. The rowid
is an internal FileMaker ID for each record.
...
So your polling function will look something like this:
function PollTasks(results) {
for( var i=0; これにより、ポーリングが 2 秒ごとに発生するように設定されます。
PollChanges() 関数が呼び出されると、ポーラーの結果を含むオブジェクトが返されます。オブジェクトには 3 つのプロパティが含まれており、それぞれが変更されたレコードを指すrowid
値の配列です。rowid
は、各レコードの内部 FileMaker ID です。
...
したがって、ポーリング関数は次のようになります。:
Code Block |
---|
function PollTasks(results) { for( var i=0; i<results.remove.length; i++ ){ |
...
rowid = results.remove[i]; |
...
// Do something with the deleted records rowid |
...
}
...
} for( var i=0; i<results.update.length; i++ ){ |
...
rowid = results.update[i]; |
...
// Do something with the updated records rowid |
...
}
...
} for( var i=0; i<results.create.length; i++ ){ |
...
rowid = results.remove[i]; |
...
// Do something with the new records rowid |
...
}
}
In reality, you’ll want to actually do something useful with these rowid
's. For example:
For deleted records, remove them from your BlackBox interface
For new records, query each record, and add them to your BlackBox interface
For updated records, query each record, and update them in your BlackBox interface
Create Records
This is used for adding new records.
The create()
method allows you to set an object as a parameter. Each field you want to set a value for will be a property of that object.
You can either create the object and then pass that through as your parameter:
NewTask = new Object();
}
} |
実際には、これらの rowid
を使用して実際に何か便利なことをしたいと思うでしょう。例えば:
削除されたレコード:BlackBox インターフェイスから削除します
新しいレコード:各レコードをクエリして、BlackBox インターフェイスに追加します
更新されたレコード:各レコードをクエリし、BlackBox インターフェイスで更新します
Create Records レコードの作成
これは、新しいレコードを追加するために使用されます。
create()
メソッドを使用すると、オブジェクトをパラメータとして設定できます。値を設定する各フィールドは、そのオブジェクトのプロパティになります。
オブジェクトを作成してから、それをパラメーターとして渡すことができます。:
Code Block |
---|
NewTask = new Object(); NewTask["Task::name"] = "New task name"; |
...
NewTask["Task::description"] = "New task description"; |
...
FRTB.create(NewTask).send({'onSuccess': function(){ |
...
alert ("Record added"); |
...
}}); |
...
または、渡すときにオブジェクトを定義できます。:
Code Block |
---|
FRTB.create( |
...
["Task::name","New task name"], |
...
["Task::description","New Task Description"] |
...
).send({'onSuccess': function(){ |
...
alert ("Record added"); |
...
}}); |
Or if you’ve used the または、 bbdev_Field() and およびbbdev_TO() functions to store the field name(s) and table occurrence(s) into variables, you can can use those:関数を使用してフィールド名とテーブルオカレンスを変数に格納した場合は、それらを使用できます。:
Code Block |
---|
FRTB.create( |
...
[TO_name_var + "::" + name_field_var,"New task name"], |
...
[TO_name_var + "::" + description_field_var,"New Task Description"] |
...
).send({'onSuccess': function(){ |
...
alert ("Record added"); |
...
}}); |
If you have used the bbdev_relationshipKeyBuilder() function you can also set initial values based on the relationship to a table occurrence from your current context.
For example, if your BlackBox queries a found set of tasks via a relationship, and those tasks records have a type
field, and the relationship includes a predicate that the type
field must have a value of "booked"
, then this is an implied field value when creating new records.
Otherwise, unless you explicitly set the Type
as "booked"
, the next time you query Task
records your new record won’t be included in the found set.
To set these implied values, use the bbdev_relationshipKeyBuilder() function to create a variable you can use to generate a list of initial creation values, and include this when invoking the .send()
method for a .create()
request. For example:関数 を使用した場合は、現在のコンテキストからのテーブルオカレンスとのリレーションに基づいて初期値を設定することもできます。
例えば、BlackBox がリレーションシップを介して見つかった一連のタスクを照会し、それらのタスク レコードにtype
フィールドがあり、リレーションシップに type
フィールドの値が「"booked"
」である必要があるという述語が含まれている場合、新しいレコードを作成するときの暗黙のフィールド値となります。
そうしないと、Type
を明示的に「"booked"
」に設定しない限り、次にTask
レコードをクエリしたときに、新しいレコードが対象レコードに含まれません。
これらの暗黙の値を設定するには、 bbdev_relationshipKeyBuilder()関数を使用して、初期作成値のリストを生成するために使用できる変数を作成し、.create()
リクエスト の .send()
メソッドを呼び出すときにこれを含めます。例:
Code Block |
---|
creation_values_var = '<?reactor bbdev_relationshipKeyBuilder ( bbdev_TO($field_name) ) reactor?>'; |
...
FRTB.create( |
...
[TO_name_var + "::" + name_field_var,"New task name"], |
...
[TO_name_var + "::" + description_field_var,"New Task Description"] |
...
).send({'creationValues' : creation_values_var, 'onSuccess': function(){ |
...
alert ("Record added"); |
...
}}); |
Update
...
This is used for updating existing records.
The update()
method allows you to set a parameter, this is an object. Each field you want to set a value for will be a property of that object.
You need to use the .where()
or .filter()
method, in conjunction with an update()
request in order to define what records we want to update.
You can either create the object and then pass that through as your parameter:
ChangedTask = new Object();
ChangedTask["Task::description"] = "Updated task description";
Records レコードの更新
これは、既存のレコードを更新するために使用されます。
update()
メソッドを使用すると、パラメーターを設定できます。これはオブジェクトです。値を設定する各フィールドは、そのオブジェクトのプロパティになります。
更新するレコードを定義するには、 update()
リクエストと組み合わせて .where()
または .filter()
メソッドを使用する必要があります。
オブジェクトを作成してから、それをパラメーターとして渡すことができます。:
Code Block |
---|
ChangedTask = new Object(); ChangedTask["Task::description"] = "Updated task description"; FRTB.update(ChangedTask).filter("Task::name=New task name").send({'onSuccess': function(){ |
...
alert ("Record updated"); |
...
}}); |
...
Or you can define the object as you’re passing it through:
FRTB.update(
...
または、渡すときにオブジェクトを定義できます。:
Code Block |
---|
FRTB.update( ["Task::description","Updated Task Description"] |
...
).filter("Task::name=New task name").send({'onSuccess': function(){ |
...
alert ("Record Updated"); |
...
}}); |
If your .where()
or または .filter()
constraint refers to multiple records, all of those records will be updated. 制約が複数のレコードを参照する場合、それらのすべてのレコードが更新されます。
Delete
...
This is used for deleting existing records.
The remove()
method allows you to set a parameter, this is a table occurrence of the table you wish to delete a record from.
...
Records レコードの削除
これは、既存のレコードを削除するために使用されます。
remove()
メソッドを使用すると、パラメーターを設定できます。これは、レコードを削除するテーブルのテーブルオカレンスです。
削除するレコードを定義するには、remove()
リクエストと組み合わせて .where()
or または .filter()
method, in conjunction with a remove()
request in order to define what records we want to delete. メソッドを使用する必要があります。
Code Block |
---|
FRTB.remove("Task").where("Task.name='New task name'").send({'onSuccess': function(){ |
...
alert ("Record(s) deleted"); |
...
}}); |
If you have used the bbdev_Relationship() you can use this to refer to your table occurrence. If you have used the を使用したことがある場合は、これを使用してテーブルのオカレンスを参照できます。 bbdev_Field() function you can use this, as well as the 関数を使用したことがある場合は、これと .filter()
method to refer to your field: メソッドを使用してフィールドを参照できます。:
Code Block |
---|
field_name_TO_var = '<?reactor bbdev_TO( $field_name ) Reactor?>'; |
...
field_name_var = '<?reactor bbdev_Field( $field_name ) reactor?>'; |
...
FRTB.remove(field_name_TO_var).filter(field_name_TO_var + "::" + field_name_var + "=New task name").send({'onSuccess': function(){ |
...
alert ("Record(s) deleted"); |
...
}}); |
Calculation
...
This is used for evaluating a FileMaker calculation.
...
Request 計算リクエスト
これは、FileMaker の計算を評価するために使用されます。
calc()
メソッドを使用すると、パラメーターを設定できます。これは、実行したい計算です。
Code Block |
---|
FRTB.calc("Get(CurrentDate)").send(function(response) |
...
{ alert (response.result); |
...
}) |
When the result of the calculation is returned via the call back function, it is accessed via the result
property in the response object.計算の結果がコールバック関数を介して返される場合、応答オブジェクトの result
プロパティを介してアクセスされます。
Perform Script
...
This is used for performing a script in FileMaker Pro from your BlackBox.
...
Request スクリプト実行のリクエスト
これは、BlackBox から FileMaker Pro でスクリプトを実行するために使用されます。
script()
メソッドを使用すると、2 つのパラメーターを設定できます。1 つ目はスクリプトの名前で、2 つ目はスクリプト パラメーターです。スクリプトは Get(ScriptParameter)
でアクセスできます。この 2 番目のパラメーターはオプションです。
Code Block |
---|
FRTB.script("MyScript","MyParameter").send(function(response) |
...
{ alert("Script performed"); |
...
}) |
Request
...
Configurations リクエスト構成
When submitting any Reactor request you can include the following configurations with your send
method call:Reactor リクエストを送信するときは、send
メソッド呼び出しに次の構成を含めることができます。:
Code Block |
---|
FRTB.find('dd_planets_data::name').send({ |
...
'onsuccess' : CompletionFunction, |
...
'onerror' : ErrorFunction, |
...
'onrecordlock' : HandleRecordLock, |
...
'creationvalues' : creation_values_var, |
...
'distinct' : true, |
...
'databasename' : 'reactor', |
...
'layoutname' : 'reactor_layout' |
...
}) |
The
onsuccess
, 、onerror
andonrecordlock
settings can be either names of functions, or anonymous functionsThecreationvalues
value should be a variable generated using the 、およびonrecordlock
の設定は、関数の名前または無名関数のいずれかでcreationvalues
の値は、 bbdev_relationshipKeyBuilder function 関数を使用して生成された変数である必要がありますThe
distinct
setting will be set to eitherdistinct
設定は true/false , and will set whether or not thedistinct
keyword is used in your queries. To the SQL-uninitiated, the query response will not include any duplicate records in its responseYou only need to set thedatabasename
setting if your request is intended for the non-default database - usually only relevant to FRTBのいずれかに設定され、クエリでdistinct
のキーワードを使用するかどうかを設定します。 SQL に慣れていないユーザーにとって、クエリの応答には重複レコードが含まれません。リクエストがデフォルト以外のデータベースを対象とする場合にのみ、
databasename
設定を設定する必要があります。通常はFRTB.script()
requestsリクエストにのみ関連します。
Utility
...
Methods ユーティリティ メソッド
The following JavaScript methods can be used to perform less-common requests:次の JavaScript メソッドを使用して、あまり一般的でない要求を実行できます。:
Set Default
...
Database デフォルト データベースの設定
以下を使用して、デフォルトのデータベースを他の Reactor リクエストで使用するように設定できます。:
FRTB.setDefault("DatabaseName","reactor");
The above will explicitly make all Reactor requests apply to the ‘reactor’ database.
FRToolbox Version
You can use the following to return the version of FRToolbox being employed:上記は、すべての Reactor リクエストを明示的に「reactor」データベースに適用します。
FRToolbox Version FRToolbox バージョン
以下を使用して、使用されている FRToolbox のバージョンを返すことができます。:
frt_no_var = FRTB.getVersion();
The above will store the FRToolbox version number in a variable.上記は、FRToolbox のバージョン番号を変数に格納します。
Start
...
Debugging デバッグを開始
詳細なデバッグを JavaScript コンソールに出力します。
FRTB.startDebugging();
After
you run this line of code any Reactor communications will be output to the console.このコード行を実行すると、Reactor の通信がコンソールに出力されます。
Date/Time
...
Conversion 日付/時刻の変換
次のメソッドを使用して、JavaScript の日付/時刻を SQL の日付/時刻文字列に変換できます。
FRTB.getSQLDate(new Date());
FRTB.getSQLTime(new Date());
You can use the following method to convert a SQL date/time string into a Javascript date object.次のメソッドを使用して、SQL 日付/時刻文字列を Javascript 日付オブジェクトに変換できます。
FRTB.convertDateTime("2019-06-17 19:35:00");
Get Field and Table
...
Occurrence フィールドとテーブルオカレンスを取得
次のメソッドを使用して、完全修飾フィールドのテーブルオカレンスを返すことができます:
FRTB.getTOName("bb_data_schedules::id",false);
If you would like to escape character spaces so you can use it in a SQL query, set the second parameter to
文字スペースをエスケープして SQL クエリで使用できるようにする場合は、2 番目のパラメーターをtrue
:に設定します。:
FRTB.getTOName("bb_data_schedules::id",true);
You can use the following method to return the field name of a fully qualified field:次のメソッドを使用して、完全修飾フィールドのフィールド名を返すことができます。:
FRTB.getFieldName("bb_data_schedules::id",false);
If you would like to escape character spaces so you can use it in a SQL query, set the second parameter to true
:文字スペースをエスケープして SQL クエリで使用できるようにする場合は、2 番目のパラメーターを true
に設定します。:
FRTB.getFieldName("bb_data_schedules::id",true);
Reactor
...
Actions リアクター アクション
This bit is for the advanced BlackBoxers.
An action is a standardised method of giving the user a method of responding to a particular interaction.
For example, if we had a BlackBox, and we wanted to give the developer control of what happens after a FRTB.find()
- but without having to delve into the JavaScript. We may want to give them the ability to specify any one of the following:
Run a script
Set a field
Set global field
Run JavaScript function
To do this, we use the FRTB.getAction
method to define the action. We may want to pass through the result of our find
request. For example:
var MyAction = FRTB.getAction(
このビットは、上級 BlackBoxer 向けです。
アクションは、特定の対話に応答する方法をユーザーに提供する標準化された方法です。
例えば、BlackBox があり、開発者が FRTB.find()
の後に何が起こるかを制御できるようにしたいとします。が、JavaScript を詳しく調べる必要はありません。次のいずれかを指定できるようにしたい場合があります。:
スクリプトを実行する
フィールドを設定する
グローバル フィールドの設定
JavaScript 関数を実行する
これを行うには、FRTB.getAction
メソッドを使用してアクションを定義します。find
リクエストの結果を渡したい場合があります。例:
Code Block |
---|
var MyAction = FRTB.getAction( 'SetField=MyLayoutTO::CurrentRecord|GetField=bb_planets_data::name', 'myAction' ); |
...
FRTB.find( |
...
'bb_planets_data::name', |
...
'bb_planets_data::description', |
...
MyAction
MyAction ).send(function(response) { |
...
FRTB.performAction( 'myAction', response.data[0]); |
...
}); |
The first line is the construction of the action. It creates an action that sets a field called CurrentRecord
on the MyLayoutTO
table occurrence.
The value we set it in that field is the name
value on the 最初の行はアクションの構築です。 MyLayoutTO
テーブル オカレンスに CurrentRecord
というフィールドを設定するアクションを作成します。
そのフィールドに設定した値は、bb_planets_data
table occurrence.
It doesn’t make sense yet? That’s because this value we’re setting is the result of a find
, we’re not setting the value yet, we’re defining the field that contains the value that we will be setting.
Then we have our Reactor find
request. As our parameter, we specify the fields we want returned per usual. Additionally we also include the variable name of our new action.
In our success function, we perform our action. For the first parameter we pass through the name of our action. The second parameter is the first record from our find
response.
Our action knows that when we set our field we’re setting the value of bb_planets_data::name
from our find
response. So Reactor checks our first find
response for a bb_planets_data::name
value, and that’s what value is set onto MyLayoutTO::CurrentRecord
.
Let’s say we don’t want to set a stored field, you want to set a global field, run a FileMaker script, or run a JavaScript function using this value (bb_planets_data::name
). You simply change the parameter you set when constructing the action.
// Run FileMaker Script, passing through the field value as parameter
var MyAction = FRTB.getAction( 'Script=MyScriptName|Parameter= テーブル オカレンスのname
の値です。
それはまだ意味がありませんか? これは、設定しているこの値が find
の結果であるためです。まだ値を設定しておらず、設定する値を含むフィールドを定義しています。
次に、Reactor find
リクエストがあります。パラメーター として、通常どおり返されるフィールドを指定します。さらに、新しいアクションの変数名も含めます。
成功関数では、アクションを実行します。最初のパラメーターとして、アクションの名前を渡します。 2 番目のパラメーターは、find
の応答の最初のレコードです。
私たちのアクションは、フィールドを設定するときに、find
の応答から bb_planets_data::name
の値を設定していることを認識しています。そのため、Reactor は bb_planets_data::name', 'myAction' );
// Set Global Field, passing through the field value as our global field's value
var MyAction = FRTB.getAction( 'SetGlobal=$$MyGlobal|Parameter= の値の最初の find
の応答をチェックし、その値が MyLayoutTO::CurrentRecord
に設定されます。
保存されたフィールドを設定したくない場合、グローバルフィールドを設定したり、FileMaker スクリプトを実行したり、この値 (bb_planets_data::name', 'myAction' );
// Run JavaScript function, passing through the field value as parameter
var MyAction = ) を使用して JavaScript 関数を実行したりしたいとします。アクションの作成時に設定したパラメーターを変更するだけです。
Code Block |
---|
// FileMaker スクリプトを実行し、フィールド値をパラメータとして引き渡す var MyAction = FRTB.getAction( |
'Script=MyScriptName|Parameter=bb_planets_data::name', 'myAction' |
Why would we bother to do this? As you can see in the above alternatives, you could simply ask the developer to provide the actual action as a BlackBox parameter. So when a button is clicked, and you conduct the find
, the developer can set the parameter to do any of the following for example:
Set a data/global field identifying what planet was selected
Run a FileMaker script that knows what planet was selected
Run a JavaScript function that knows what planet was selected
Obviously you could do any of these individually by altering the BlackBox code, but defining an action as a BlackBox parameter gives the user the ability to change the behaviour of your BlackBox from outside of your BlackBox.
Or you can simply deem this is as needlessly complicated and forget it forever
); |
Code Block |
---|
// グローバルフィールドを設定し、フィールド値をグローバルフィールドの値として引き渡す
var MyAction = FRTB.getAction( 'SetGlobal=$$MyGlobal|Parameter=bb_planets_data::name', 'myAction' ); |
Code Block |
---|
// JavaScript 関数を実行し、フィールド値をパラメータとして引き渡す
var MyAction = FRTB.getAction( 'Function=checkRecord();|Parameter=bb_planets_data::name', 'myAction' ); |
なぜわざわざこれを行うのでしょうか?上記の代替案からわかるように、実際のアクションを BlackBox パラメータとして提供するよう開発者に依頼するだけです。したがって、ボタンがクリックされてfind
検索を実行すると、開発者はパラメーターを設定して、たとえば次のいずれかを実行できます。:
どの惑星が選択されたかを識別するデータ/グローバル フィールドを設定します
どの惑星が選択されたかを知る FileMaker スクリプトを実行する
どの惑星が選択されたかを知る JavaScript 関数を実行する
明らかに、BlackBox コードを変更することでこれらのいずれかを個別に実行できますが、アクションを BlackBox パラメーターとして定義すると、BlackBox の外部から BlackBox の動作を変更する機能がユーザに与えられます。
もしくは、これは不必要に複雑であると考えて、永遠に忘れることもできます :)