15. [J] FR Toolbox リファレンス

15. FR Toolbox Reference

15. FR Toolbox リファレンス

<— Reactor Home J

FileMaker データベースとの通信に使用できる FRToolbox 関数のスイートを次に示します。

最初のセクションでは、Reactor での BlackBox の管理について紹介します。

  1. Reactor Tag

  2. FileMaker calculation

  3. Get parameter Value

  4. Get value of field parameter

  5. Get table occurrence of field name parameter

  6. Get ‘where’ clause based on relationship

  7. Get list of initial creation values based on relationship

  8. Get container field images from container field name parameter

  9. FRToolbox Requests

    1. Find records

      1. Constrain records

      2. Send request

      3. Poll request

    2. Create record

    3. Update records

    4. Delete records

    5. Calculation request

    6. Perform script request

    7. Request configurations

  10. Utility methods

    1. Set default database

    2. FRToolbox version

    3. Debugging

    4. Date/time conversion

    5. Get field and table occurrence

  11. Reactor Actions

Reactor タグ

<?reactor reactor?>

これらの Reactor タグ間のすべてが Reactor によって解釈されます。これは次のようになります。:

FileMaker calculation

Reactor タグ内で任意の FileMaker 計算を実行できます

next_week_date_var = '<?reactor Get ( CurrentDate ) + 7 reactor?>';

出力例:  next_week_date_var = '22/06/2019';

Get parameter value パラメータ値を取得

任意の BlackBox パラメータの値にローカル変数としてアクセスできます。:

text_field_var = '<?reactor $text_field reactor?>';

出力例:text_field_var = 'mytext';

Get value of field name parameter フィールド名パラメータの値を取得

field_name_var = '<?reactor bbdev_Field( $field_name ) reactor?>';

出力例:field_name_var = 'Description'

Get table occurrence name of field name parameter フィールド名パラメータのテーブルオカレンス名を取得

field_name_TO_var = '<?reactor bbdev_TO( $field_name ) Reactor?>';

出力例:field_name_TO_var = 'Task';

Get ‘where’ clause based on relationship from current context to table occurrence: 現在のコンテキストからテーブルオカレンスまでのリレーションシップに基づいて「where」句を取得します。:

(これは通常、データをクエリするときに使用されます)

where_clause_var = '<?reactor bbdev_Relationship( bbdev_TO($field_name) ) reactor?>';

出力例: 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?>';

出力例:

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?>

出力例:

<img src="task_01.png" />

<img src="task_02.png" />

<img src="task_03.png" />

($field_name の値によって、指定されたファイル名が決まります。)

FRToolbox リクエスト

次の JavaScript メソッドを使用して、FileMaker データベースで要求を実行し、応答を処理できます。

これらのリクエストは連鎖させることができ、多くの場合、そうしなければなりません。たとえば、次のすべてのメソッドは send(); を呼び出す必要があります。実際にリクエストを送信するメソッド。

Find records レコードを検索

FRTB.find(field1, field2, field3, etc)

見つかったレコードのセットを返します。返される値は、リクエストで指定されたフィールドによって異なります。

例:

QueryData = FRTB.find( "Task::name", "Task::description" );

タスク テーブルのオカレンスが基になっているテーブルのすべてのレコードからnamedescriptionフィールドの値を取得する要求を作成します。

bbdev_Field()およびbbdev_TO()関数を使用してフィールド名とテーブルの出現を変数に格納した場合は、それらを使用できます。:

QueryData = FRTB.find( TO_name_var + "::" + name_field_var, TO_name_var + "::" + description_field_var );

Constrain records レコードの制約

.where(whereclause)

SQL WHERE 句に基づいて検索条件を制限します。

例:

QueryData = FRTB.find( "Task::name", "Task::description" ).where(Task.status = 'active');

 

Task テーブルのオカレンスの基になっているテーブルから、Task::status フィールドの値が active であるすべてのレコードからnamedescriptionフィールドの値を取得するリクエストを作成します。

bbdev_Relationship()関数 を使用して「where 句」を作成した場合は、代わりに .filter() メソッドを使用できます。これにより、SQL スタイルの構文ではなく FM スタイルの構文を使用できます (例えば、Task::name Task.name よりTask::name )

.filter(where_clause_var);

Send Request リクエストを送信

これは実際に Reactor にリクエストを送信するために使用されます。最初にリクエストを作成してから送信できます:

QueryData = FRTB.find( "Task::name", "Task::description" ).where(Task.status = 'active'); QueryData.send();

 

または、リクエストを生成するときに送信します。:

QueryData = FRTB.find( "Task::name", "Task::description" ).where("Task.status = 'active'").send();

 

これにより、リクエストが Reactor に送信されます。ただし、戻ってくるものを見るには、コールバック関数を使用する必要があります。関数を定義して呼び出すことができます。:

function CheckResponse(response) { alert ( "Response received!") ; } QueryData = FRTB.find( "Task::name", "Task::description" ).where("Task.status = 'active'").send(CheckResponse);

 

または、リクエスト内で無名関数を定義できます。:

QueryData = FRTB.find( "Task::name", "Task::description" ).where("Task.status = 'active'").send(function(response) { alert ( "Response received!") ; });

send() でコールバック関数を設定すると、リクエストの応答を含むパラメーターが含まれます。 find() リクエストで使用する場合、このレスポンスには取得したデータが含まれます。

find() リクエストのレスポンスはオブジェクトとして返されます。このオブジェクトには、data というプロパティが含まれています。このデータ プロパティは、オブジェクトの配列です。配列の各要素のキーは、完全なフィールド名 (テーブルのオカレンス名を含む) です。

したがって、コールバック関数で、応答の各レコードの値にアクセスするには、それらをループします。:

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 を持つタイムスタンプ自動入力を利用します。:

このリクエストを呼び出すと、データがクエリされた後に変更をポーリングします。新しいレコード、変更されたレコード、または削除されたレコードをポーリングできます。

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)

これにより、ポーリングが 2 秒ごとに発生するように設定されます。

PollChanges() 関数が呼び出されると、ポーラーの結果を含むオブジェクトが返されます。オブジェクトには 3 つのプロパティが含まれており、それぞれが変更されたレコードを指すrowid 値の配列です。rowid は、各レコードの内部 FileMaker ID です。

したがって、ポーリング関数は次のようになります。:

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 } }

 

実際には、これらの rowid を使用して実際に何か便利なことをしたいと思うでしょう。例えば:

  • 削除されたレコード:BlackBox インターフェイスから削除します

  • 新しいレコード:各レコードをクエリして、BlackBox インターフェイスに追加します

  • 更新されたレコード:各レコードをクエリし、BlackBox インターフェイスで更新します

Create Records レコードの作成

これは、新しいレコードを追加するために使用されます。

create() メソッドを使用すると、オブジェクトをパラメータとして設定できます。値を設定する各フィールドは、そのオブジェクトのプロパティになります。

オブジェクトを作成してから、それをパラメーターとして渡すことができます。:

NewTask = new Object(); NewTask["Task::name"] = "New task name"; NewTask["Task::description"] = "New task description"; FRTB.create(NewTask).send({'onSuccess': function(){ alert ("Record added"); }});

または、渡すときにオブジェクトを定義できます。:

FRTB.create( ["Task::name","New task name"], ["Task::description","New Task Description"] ).send({'onSuccess': function(){ alert ("Record added"); }});

または、 bbdev_Field()およびbbdev_TO()関数を使用してフィールド名とテーブルオカレンスを変数に格納した場合は、それらを使用できます。:

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"); }});

 

bbdev_relationshipKeyBuilder()関数 を使用した場合は、現在のコンテキストからのテーブルオカレンスとのリレーションに基づいて初期値を設定することもできます。

例えば、BlackBox がリレーションシップを介して見つかった一連のタスクを照会し、それらのタスク レコードにtype フィールドがあり、リレーションシップに type フィールドの値が「"booked"」である必要があるという述語が含まれている場合、新しいレコードを作成するときの暗黙のフィールド値となります。

そうしないと、Typeを明示的に「"booked"」に設定しない限り、次にTask レコードをクエリしたときに、新しいレコードが対象レコードに含まれません。

これらの暗黙の値を設定するには、 bbdev_relationshipKeyBuilder()関数を使用して、初期作成値のリストを生成するために使用できる変数を作成し、.create() リクエスト の .send() メソッドを呼び出すときにこれを含めます。例:

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 Records レコードの更新

これは、既存のレコードを更新するために使用されます。

update() メソッドを使用すると、パラメーターを設定できます。これはオブジェクトです。値を設定する各フィールドは、そのオブジェクトのプロパティになります。

更新するレコードを定義するには、 update() リクエストと組み合わせて .where() または .filter() メソッドを使用する必要があります。

オブジェクトを作成してから、それをパラメーターとして渡すことができます。:

ChangedTask = new Object(); ChangedTask["Task::description"] = "Updated task description"; FRTB.update(ChangedTask).filter("Task::name=New task name").send({'onSuccess': function(){ alert ("Record updated"); }});

 

または、渡すときにオブジェクトを定義できます。:

FRTB.update( ["Task::description","Updated Task Description"] ).filter("Task::name=New task name").send({'onSuccess': function(){ alert ("Record Updated"); }});

.where() または .filter() 制約が複数のレコードを参照する場合、それらのすべてのレコードが更新されます。

Delete Records レコードの削除

これは、既存のレコードを削除するために使用されます。

remove() メソッドを使用すると、パラメーターを設定できます。これは、レコードを削除するテーブルのテーブルオカレンスです。

削除するレコードを定義するには、remove() リクエストと組み合わせて .where() または .filter() メソッドを使用する必要があります。

FRTB.remove("Task").where("Task.name='New task name'").send({'onSuccess': function(){ alert ("Record(s) deleted"); }});

 

bbdev_Relationship()を使用したことがある場合は、これを使用してテーブルのオカレンスを参照できます。 bbdev_Field()関数を使用したことがある場合は、これと .filter() メソッドを使用してフィールドを参照できます。:

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 Request 計算リクエスト

これは、FileMaker の計算を評価するために使用されます。

calc() メソッドを使用すると、パラメーターを設定できます。これは、実行したい計算です。

FRTB.calc("Get(CurrentDate)").send(function(response) { alert (response.result); })

 

計算の結果がコールバック関数を介して返される場合、応答オブジェクトの resultプロパティを介してアクセスされます。

Perform Script Request スクリプト実行のリクエスト

これは、BlackBox から FileMaker Pro でスクリプトを実行するために使用されます。

script() メソッドを使用すると、2 つのパラメーターを設定できます。1 つ目はスクリプトの名前で、2 つ目はスクリプト パラメーターです。スクリプトは Get(ScriptParameter) でアクセスできます。この 2 番目のパラメーターはオプションです。

FRTB.script("MyScript","MyParameter").send(function(response) { alert("Script performed"); })

 

Request Configurations リクエスト構成

Reactor リクエストを送信するときは、send メソッド呼び出しに次の構成を含めることができます。:

FRTB.find('dd_planets_data::name').send({ 'onsuccess' : CompletionFunction, 'onerror' : ErrorFunction, 'onrecordlock' : HandleRecordLock, 'creationvalues' : creation_values_var, 'distinct' : true, 'databasename' : 'reactor', 'layoutname' : 'reactor_layout' })

 

  • onsuccessonerror、および onrecordlock の設定は、関数の名前または無名関数のいずれかで

  • creationvalues の値は、 bbdev_relationshipKeyBuilder 関数を使用して生成された変数である必要があります

  • distinct 設定は true/false のいずれかに設定され、クエリでdistinctのキーワードを使用するかどうかを設定します。 SQL に慣れていないユーザーにとって、クエリの応答には重複レコードが含まれません。

  • リクエストがデフォルト以外のデータベースを対象とする場合にのみ、databasename 設定を設定する必要があります。通常は FRTB.script()リクエストにのみ関連します。

Utility Methods ユーティリティ メソッド

次の JavaScript メソッドを使用して、あまり一般的でない要求を実行できます。:

Set Default Database デフォルト データベースの設定

以下を使用して、デフォルトのデータベースを他の Reactor リクエストで使用するように設定できます。:

FRTB.setDefault("DatabaseName","reactor");

上記は、すべての Reactor リクエストを明示的に「reactor」データベースに適用します。

FRToolbox Version FRToolbox バージョン

以下を使用して、使用されている FRToolbox のバージョンを返すことができます。:

frt_no_var = FRTB.getVersion();

上記は、FRToolbox のバージョン番号を変数に格納します。

Start Debugging デバッグを開始

詳細なデバッグを JavaScript コンソールに出力します。

FRTB.startDebugging();

このコード行を実行すると、Reactor の通信がコンソールに出力されます。

Date/Time Conversion 日付/時刻の変換

次のメソッドを使用して、JavaScript の日付/時刻を SQL の日付/時刻文字列に変換できます。

FRTB.getSQLDate(new Date());

FRTB.getSQLTime(new Date());

次のメソッドを使用して、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);

次のメソッドを使用して、完全修飾フィールドのフィールド名を返すことができます。:

FRTB.getFieldName("bb_data_schedules::id",false);

文字スペースをエスケープして SQL クエリで使用できるようにする場合は、2 番目のパラメーターを true に設定します。:

FRTB.getFieldName("bb_data_schedules::id",true);

Reactor Actions リアクター アクション

This bit is for the advanced BlackBoxers.

このビットは、上級 BlackBoxer 向けです。

アクションは、特定の対話に応答する方法をユーザーに提供する標準化された方法です。

例えば、BlackBox があり、開発者が FRTB.find() の後に何が起こるかを制御できるようにしたいとします。が、JavaScript を詳しく調べる必要はありません。次のいずれかを指定できるようにしたい場合があります。:

  • スクリプトを実行する

  • フィールドを設定する

  • グローバル フィールドの設定

  • JavaScript 関数を実行する

これを行うには、FRTB.getAction メソッドを使用してアクションを定義します。findリクエストの結果を渡したい場合があります。例:

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]); });

 

最初の行はアクションの構築です。 MyLayoutTO テーブル オカレンスに CurrentRecord というフィールドを設定するアクションを作成します。

そのフィールドに設定した値は、bb_planets_data テーブル オカレンスのnameの値です。

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

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

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

私たちのアクションは、フィールドを設定するときに、find の応答から bb_planets_data::name の値を設定していることを認識しています。そのため、Reactor は bb_planets_data::name の値の最初の find の応答をチェックし、その値が MyLayoutTO::CurrentRecord に設定されます。

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

 

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

 

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

 

// JavaScript 関数を実行し、フィールド値をパラメータとして引き渡す var MyAction = FRTB.getAction( 'Function=checkRecord();|Parameter=bb_planets_data::name', 'myAction' );

 

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

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

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

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

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

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

<— Reactor Home J