Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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:このビットは、上級 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
).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 テーブル オカレンスのnameの値です。

それはまだ意味がありませんか? これは、設定しているこの値が find の結果であるためです。まだ値を設定しておらず、設定する値を含むフィールドを定義しています

次に、Reactor findリクエストがあります。パラメーター として、通常どおり返されるフィールドを指定します。さらに、新しいアクションの変数名も含めます。

成功関数では、アクションを実行します。最初のパラメーターとして、アクションの名前を渡します。 2 番目のパラメーターは、find の応答の最初のレコードです。

私たちのアクションは、フィールドを設定するときに、find の応答から bb_planets_data::name from our find response. So Reactor checks our first find response for a ::name の値を設定していることを認識しています。そのため、Reactor は bb_planets_data::name value, and that’s what value is set onto の値の最初の find の応答をチェックし、その値が 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 に設定されます。

保存されたフィールドを設定したくない場合、グローバルフィールドを設定したり、FileMaker スクリプトを実行したり、この値 (bb_planets_data::name). You simply change the parameter you set when constructing the action.::name) を使用して JavaScript 関数を実行したりしたいとします。アクションの作成時に設定したパラメーターを変更するだけです。

Code Block
//

...

 FileMaker 

...

スクリプトを実行し、フィールド値をパラメータとして引き渡す
var MyAction = FRTB.getAction( 'Script=MyScriptName|Parameter=bb_planets_data::name', 'myAction

...

Code Block
// Set Global Field, passing through the field value as our global field's value' );

Code Block
// グローバルフィールドを設定し、フィールド値をグローバルフィールドの値として引き渡す
var MyAction = FRTB.getAction( 'SetGlobal=$$MyGlobal|Parameter=bb_planets_data::name', 'myAction' );

Code Block
// Run JavaScript function, passing through the field value as parameter
関数を実行し、フィールド値をパラメータとして引き渡す
var MyAction = FRTB.getAction( 'Function=checkRecord();|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

 'myAction' );

なぜわざわざこれを行うのでしょうか?上記の代替案からわかるように、実際のアクションを BlackBox パラメータとして提供するよう開発者に依頼するだけです。したがって、ボタンがクリックされてfind 検索を実行すると、開発者はパラメーターを設定して、たとえば次のいずれかを実行できます。:

  • どの惑星が選択されたかを識別するデータ/グローバル フィールドを設定します

  • どの惑星が選択されたかを知る FileMaker スクリプトを実行する

  • どの惑星が選択されたかを知る JavaScript 関数を実行する

明らかに、BlackBox コードを変更することでこれらのいずれかを個別に実行できますが、アクションを BlackBox パラメーターとして定義すると、BlackBox の外部から BlackBox の動作を変更する機能がユーザに与えられます。

もしくは、これは不必要に複雑であると考えて、永遠に忘れることもできます :)

<— Reactor Home J