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

"read"

サポートされている値は readmetaDatacreateupdatedelete、および duplicate です。テーブルとレイアウトに関する情報を取得するには、metaData を使用します。レコードデータで実行するには他の値を使用します。

version

"v1"

サポートされている値は v1v2、および vLatest です。動作と生成される結果は、API のバージョンに応じて異なります。

layouts

 

レイアウト名。

tables

 

テーブルオカレンス名。"action" がテーブルオカレンスに対する metaData である場合に必須です。layouts キーと同様に機能します。テーブルオカレンスが指定されている場合、そのテーブルのメタデータが返されます。名前が指定されていな場合、テーブルオカレンスの一覧が返されます。

query

すべてのレコード

1 つのフィールドと検索条件を指定する JSON オブジェクトからなる配列。

recordId

 

レコードの固有の ID 番号。query キーと recordId キーの両方を指定することはできません。

sort

 

現在のレイアウトテーブル内のレコードのソート順を指定する JSON オブジェクト。

offset

1

現在のレイアウトテーブル内のレコード範囲の 1 番目のレコードのレコード番号。

limit

100

現在のレイアウトテーブルから返されるレコードの最大数。

layout.response

layouts の値

異なるレイアウトのコンテキストでデータを取得するには、レイアウト名を指定します。

portal

すべてのポータル

ポータルを指定する JSON オブジェクト。

offset.portal-name

1

関連レコード範囲の 1 番目のポータルレコードのレコード番号。portal-name には、存在する場合はポータルのオブジェクト名を指定する必要があります。存在しない場合は関連テーブル名を指定します。

limit.portal-name

50

返される関連レコードの最大数。portal-name には、存在する場合はポータルのオブジェクト名を指定する必要があります。存在しない場合は関連テーブル名を指定します。

fieldData

 

作成または更新するレコードデータを指定する JSON オブジェクト。

portalData

 

作成または更新する関連レコードのデータを指定する JSON オブジェクト。

modId

 

(オプション) 更新処理の場合、更新するレコードの修正 ID。レコードの現在の modId と一致しない場合、レコードは変更されません。

options.entrymode

"user"

(オプション) データを書き込むとき、このスクリプトステップはフィールドの [データの入力時にユーザによる上書きを許可する] オプションが選択されているかどうかを無視して options.entrymode を使用します。このキーの値は次のとおりです:

  • script: フィールドの入力値の制限条件を無視する

  • user: フィールドの入力値の制限条件に従う

上記のキーの詳細については、FileMaker Data API ガイドの「レコードの操作」の各トピックや「メタデータの取得」および「検索の実行」を参照してください。

次のキーは無視されます:

  • データベースは、スクリプトが実行されているウインドウに常に属しているので、databases は無視されます。

  • 現在のスクリプトに完全アクセス権が付与されている場合、スクリプトのアクセス権は現在のユーザのアクセス権または完全アクセスのいずれかであるため、Authorization は無視されます。

  • リクエストは JSON 形式でなければならないので、Content-Type は無視されます。

  • script と、script. で始まるすべてのキーは無視されます。別のスクリプトを実行するには、代わりに [スクリプト実行] スクリプトステップを使用します。

エラー処理

ターゲットの JSON 結果には、少なくとも 1 つの messages キーと、message キーおよび code キーを含む 1 つのオブジェクトが含まれています。code の値は、FileMaker エラーコードで定義されている値です。messagecode のほとんどの値は、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 と同じ「レコードが見つかりません」を返します。