FileMaker Data API を実行
FileMaker Data API リクエストを実行します。
オプション
-
[内容全体を選択] オプションを選択すると、フィールドまたは変数の内容が置き換えられます。このオプションが選択されていない場合、次のようになります:
-
フィールドの場合、アクティブなフィールドで選択されている部分のみが置き換えられるか、または挿入ポイントにデータが挿入されます。選択されている部分がない場合は、挿入ポイントに結果が挿入されます。デフォルトの挿入ポイントはフィールド内のデータの末尾です。
-
オブジェクトデータがない変数の場合、変数の現在の値の末尾にデータが挿入されます。オブジェクトデータがある変数の場合、変数の内容が置き換えられます。
-
-
[ターゲット:] では、結果の挿入先のフィールドまたは設定する変数を指定します。変数が存在しない場合は、このスクリプトステップによって変数が作成されます (変数の使用を参照)。
-
[リクエスト:] は、リクエストをテキストとして指定する計算式です。テキストは、以下で説明する形式の JSON オブジェクトです。
互換性
製品 | サポート |
---|---|
FileMaker Pro |
はい |
FileMaker Go |
はい |
FileMaker WebDirect |
はい |
FileMaker Server |
はい |
FileMaker Cloud |
はい |
FileMaker Data API |
はい |
カスタム Web 公開 |
はい |
起点バージョン
19.0
説明
FileMaker Data API は、FileMaker Server および FileMaker Cloud 向けの Web サービスとして利用可能な REST API です。Web アプリケーションでこの API を使用すると、JSON 形式でリクエストを送信して共有 FileMaker Pro ファイルからデータを取得できます。
このスクリプトステップは、FileMaker ホストでの FileMaker Data API と同じ基本機能を使用して、FileMaker 製品により実行されるスクリプトが、共有されているかどうかにかかわらず、現在のファイルのデータをリクエストし、データを JSON 形式で受け取ることができるようにします。このスクリプトステップは FileMaker Data API を使用してホストに Web サービス呼び出しを行わず、ホストで API が有効になっているかどうかにも依存しません。このスクリプトステップと FileMaker Data API の類似点は返されるデータの JSON 形式が同じであることのみです。リクエストは、FileMaker Data API が FileMaker ホストの Web サービスを利用するために必要な URL、ヘッダ、およびリクエストのボディの組み合わせではなく、シンプルな JSON オブジェクトです。[ターゲット] に返される結果は、FileMaker Data API を使用してホストでリクエストする場合と同じ JSON 形式です。
リクエストの形式
このスクリプトステップでは、[リクエスト] オプションで指定される JSON オブジェクトで以下のキー値ペアがサポートされます。リクエストで以下のキーが指定されていない場合は、デフォルト値が使用されます。
キー | デフォルト値 | 説明 |
---|---|---|
|
|
サポートされている値は |
|
|
サポートされている値は |
|
|
レイアウト名。 |
|
|
テーブルオカレンス名。"action" がテーブルオカレンスに対する |
|
すべてのレコード |
1 つのフィールドと検索条件を指定する JSON オブジェクトからなる配列。 |
|
|
レコードの固有の ID 番号。 |
|
|
現在のレイアウトテーブル内のレコードのソート順を指定する JSON オブジェクト。 |
|
|
現在のレイアウトテーブル内のレコード範囲の 1 番目のレコードのレコード番号。 |
|
|
現在のレイアウトテーブルから返されるレコードの最大数。 |
|
|
異なるレイアウトのコンテキストでデータを取得するには、レイアウト名を指定します。 |
|
すべてのポータル |
ポータルを指定する JSON オブジェクト。 |
|
|
関連レコード範囲の 1 番目のポータルレコードのレコード番号。 |
|
50 |
返される関連レコードの最大数。 |
|
|
作成または更新するレコードデータを指定する JSON オブジェクト。 |
|
|
作成または更新する関連レコードのデータを指定する JSON オブジェクト。 |
|
|
(オプション) 更新処理の場合、更新するレコードの修正 ID。レコードの現在の modId と一致しない場合、レコードは変更されません。 |
|
|
(オプション) データを書き込むとき、このスクリプトステップはフィールドの [データの入力時にユーザによる上書きを許可する] オプションが選択されているかどうかを無視して
入力値の制限の設定を参照してください。 |
|
|
(オプション) データを書き込むとき、このスクリプトステップはフィールドの [データ入力時の値変更の禁止] オプションが選択されているかどうかを無視して
入力値の自動化の定義を参照してください。 |
上記のキーの詳細については、FileMaker Data API ガイドの「レコードの操作」の各トピックや「メタデータの取得」および「検索の実行」を参照してください。
次のキーは無視されます:
-
データベースは、スクリプトが実行されているウインドウに常に属しているので、
databases
は無視されます。 -
現在のスクリプトに完全アクセス権が付与されている場合、スクリプトのアクセス権は現在のユーザのアクセス権または完全アクセスのいずれかであるため、
Authorization
は無視されます。 -
リクエストは JSON 形式でなければならないので、
Content-Type
は無視されます。 -
script
と、script.
で始まるすべてのキーは無視されます。別のスクリプトを実行するには、代わりに [スクリプト実行] スクリプトステップを使用します。
エラー処理
ターゲットの JSON 結果には、少なくとも 1 つの messages
キーと、message
キーおよび code
キーを含む 1 つのオブジェクトが含まれています。code
の値は、FileMaker エラーコードで定義されている値です。message
と code
のほとんどの値は、FileMaker ホストで Web サービスとして使用可能な FileMaker Data API から返される値と同じです。このスクリプトステップ特有の追加のエラーがいくつかあり、[リクエスト] オプションの解析時に問題を特定する際にそれが役立ちます。これらの追加エラーで使用される code
の値は 3、1708、および 1710 ですが、message
には、エラーの詳細を提供するさまざまな値が使用されます。
Get (最終エラー) および Get (最終エラー詳細) 関数は、それぞれ code
および message
キーと同じ値を返します。Get (最終エラー位置) はスクリプト内のエラーが発生した場所を返します。
メモ
-
このスクリプトステップはいずれのウインドウのコンテキスト、またはこのスクリプトステップを実行するスクリプトを含む、実行中のスクリプトのコンテキストとは無関係な独自のセッションで実行されます。したがって、ネットワーク上でホストに FileMaker Data API 呼び出しを行う場合にこのスクリプトステップが使用されます。このため、このスクリプトステップの実行中はスクリプトトリガとエラーレポートのダイアログボックスがすべて無効になります。
-
ファイルが FileMaker Server または FileMaker Cloud で共有されている場合、オブジェクトフィールドの戻り値は URL であり、それを使用してフィールドの内容を取得できます。ファイルがローカルで開かれている場合、オブジェクトフィールドのファイルの名前だけが返されます。
例 1
tables
キーに値が指定されていないので、全テーブルオカレンスのメタデータが返されます。この例では、1 つのソース (ベース) テーブル (Products) と 2 つのテーブルオカレンス (Products と Products_InStock) があります。この例では JSONSetElement 関数を使用して、[リクエスト
] オプションの JSON オブジェクトが作成されます。
FileMaker Data API を実行 [ 選択 ; ターゲット: $$result ;
JSONSetElement ( "{}" ;
[ "action" ; "metaData" ; JSONString ] ;
[ "tables" ; "" ; JSONString ]
) ]
変数を設定 [$$result ; JSONFormatElements ( $$result )]
グローバル変数 $$result には、JSON データが次の形式で返されます。
{
"messages" :
[
{
"code" : "0",
"message" : "OK"
}
],
"response" :
{
"tables" :
[
{
"baseTable" : "Products",
"名前" : "Products"
},
{
"baseTable" : "Products",
"名前" : "Products_InStock"
}
]
}
}
例 2
「Products」レイアウトに基づいて、「Products」レイアウトに関連するテーブルの 1 番目のレコードが返されます。
FileMaker Data API を実行 [選択 ; ターゲット: $$result ;
JSONSetElement ( "{}" ;
[ "layouts" ; "Products" ; JSONString ] ;
[ "limit" ; 1 ; JSONNumber ]
) ]
変数を設定 [$$result ; JSONFormatElements ( $$result )]
グローバル変数 $$result には、JSON データが次の形式で返されます。
{
"messages" :
[
{
"code" : "0",
"message" : "OK"
}
],
"response" :
{
"data" :
[
{
"fieldData" :
{
"ID" : "FB1",
"名前" : "ドーナツ",
"在庫" : 43
},
"modId" : "6",
"portalData" : {},
"recordId" : "1"
}
],
"dataInfo" :
{
"database" : "Favorite Bakery",
"foundCount" : 3,
"layout" : "Products",
"returnedCount" : 1,
"table" : "Products",
"totalRecordCount" : 3
}
}
}
例 3
「Products」レイアウトに基づき、「在庫」フィールドが 40 未満であるレコードを検出し、「在庫」フィールドの降順でソートした対象レコードを返します。
FileMaker Data API を実行 [選択 ; ターゲット: $$result ;
JSONSetElement ("{}" ;
["layouts" ; "Products" ; JSONString] ;
["query" ; "[{\"在庫\":\"<40\"}]" ; JSONArray] ;
["sort" ; "[{\"fieldName\":\"在庫\" ,
\"sortOrder\":\"descend\"}]" ; JSONArray]
)]
変数を設定 [$$result ; JSONFormatElements ($$result)]
グローバル変数 $$result には、JSON データが次の形式で返されます。
{
"messages" :
[
{
"code" : "0",
"message" : "OK"
}
],
"response" :
{
"data" :
[
{
"fieldData" :
{
"ID" : "FB3",
"名前" : "バゲット",
"在庫" : 34
},
"modId" : "1",
"portalData" : {},
"recordId" : "7"
},
{
"fieldData" :
{
"ID" : "FB2",
"名前" : "チョコレートケーキ",
"在庫" : 23
},
"modId" : "1",
"portalData" : {},
"recordId" : "6"
}
],
"dataInfo" :
{
"database" : "Favorite Bakery",
"foundCount" : 2,
"layout" : "Products",
"returnedCount" : 2,
"table" : "Products",
"totalRecordCount" : 3
}
}
}
例 4
「Products」レイアウトに基づいて、「Products」レイアウトに関連付けられたテーブルの最初のレコードを返します。ポータル行がある場合は最初の 2 つのレコードをスキップした後に最初の 2 つのレコードを返します。
FileMaker Data API を実行 [選択 ; ターゲット: $$result ;
JSONSetElement ("{}" ;
["layouts" ; "Products" ; JSONString] ;
["limit" ; 1 ; JSONNumber] ;
["['limit.RelatedProducts']" ; 2; JSONNumber] ;
["['offset.RelatedProducts']" ; 2 ; JSONNumber]
)]
変数を設定 [$$result ; JSONFormatElements ($$result)]
グローバル変数 $$result には、JSON データが次の形式で返されます。
{
"messages" :
[
{
"code" : "0",
"message" : "OK"
}
],
"response" :
{
"data" :
[
{
"fieldData" :
{
"ID" : "FB1",
"名前" : "ドーナツ",
"在庫" : 43
},
"modId" : "6",
"portalData" : {
"RelatedProducts" :
[
{
"ID" : "FB4",
"名前" : "ドーナツホール",
"在庫" : 53
},
{
"ID" : "FB5",
"名前" : "ショートケーキ",
"在庫" : 15
}
]
},
"recordId" : "1"
}
],
"dataInfo" :
{
"database" : "Favorite Bakery",
"foundCount" : 3,
"layout" : "Products",
"returnedCount" : 1,
"table" : "Products",
"totalRecordCount" : 6
}
}
}
例 5
「Products」レイアウトに基づいて、recordId
で指定されたレコードを変更し、「在庫」フィールドと「名前」フィールドの値を更新します。
FileMaker Data API を実行 [選択 ; ターゲット: $$result ;
JSONSetElement ("{}" ;
["action" ; "update" ; JSONString] ;
["layouts" ; "Products" ; JSONString] ;
["recordId" ; "4" ; JSONString] ;
["fieldData" ; "{\"在庫\" : 14 ,
\"名前\" : \"バニラケーキ, 大\"}" ; JSONObject]
)]
変数を設定 [$$result ; JSONFormatElements ($$result)]
グローバル変数 $$result には、JSON データが次の形式で返されます。
{
"messages" :
[
{
"code" : "0",
"message" : "OK"
}
],
"response" :
{
"modId" : "6"
}
}
recordId
で指定されたレコードが存在しない場合、Get (最終エラー) は 101 を返し、Get (最終エラー詳細) は $$result の code
および message
と同じ「レコードが見つかりません」を返します。
例 6
「Products」レイアウトに基づいて、レコードを作成して「在庫」フィールド、「ID」フィールド、「名前」フィールドの値を設定します。「ID」フィールドはシリアル番号を自動入力するように設定されていて [データ入力時の値変更の禁止] オプションが有効になっているため、options
オブジェクトの prohibitmode
キーを script
に設定すると、入力値の自動化の条件が上書きされて「ID」フィールドが指定したとおりに設定されます。
FileMaker Data API を実行 [選択 ; ターゲット: $$result ;
JSONSetElement ("{}" ;
["action" ; "create" ; JSONString] ;
["layouts" ; "Products" ; JSONString] ;
["options" ; "{ \"prohibitmode\" : \"script\" }" ; JSONObject] ;
["fieldData" ; "{ \"在庫\" : 14 ,
\"ID\" : \"FB42\" ,
\"名前\" : \"クロワッサン\" }" ; JSONObject]
)]
変数を設定 [$$result ; JSONFormatElements ($$result)]
グローバル変数 $$result には、JSON データが次の形式で返されます。
{
"messages" :
[
{
"code" : "0",
"message" : "OK"
}
],
"response" :
{
"modId" : "0",
"recordId" : "7"
}
}
「ID」フィールドに固有の値を要求するように検証が設定されており、ID 値が「FB42」のレコードがすでに存在している場合、Get (最終エラー) は 504 を返し、Get (最終エラー詳細) は「フィールドの値が入力値の制限オプションで要求されているように固有の値になっていません」を返します。これは $$result の code
および message
と同じです。