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 が FileMaker ホストの Web サービスを利用するために必要な URL、ヘッダー、およびリクエストのボディの組み合わせではなく、シンプルな JSON オブジェクトです。[ターゲット] に返される結果は、FileMaker Data API を使用してホストでリクエストする場合と同じ JSON 形式です。

リクエストの形式

このスクリプトステップでは、[リクエスト] オプションで指定される JSON オブジェクトで以下のキー値ペアがサポートされます。リクエストで以下のキーが指定されていない場合は、デフォルト値が使用されます。

キー デフォルト値 説明

action

"read"

サポートされている値は readmetaData だけです。テーブルとレイアウトに関する情報を取得するには、metaData を使用します。

version

"v1"

サポートされている値は v1v2、および vLatest です。動作と生成される結果は、API のバージョンに応じて異なります。FileMaker Data API ガイドを参照してください。

layouts

 

レイアウト名。"action" が read およびレイアウトに対する metaData である場合に必須です。

tables

 

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

query

すべてのレコード

1 つのフィールドと検索条件を指定する JSON オブジェクトからなる配列。FileMaker Data API ガイドの「検索の実行」を参照してください。

recordId

 

レコードの固有の ID 番号。query キーと recordId キーの両方を指定することはできません。FileMaker Data API ガイドを参照してください。

sort

 

現在のレイアウトテーブル内のレコードのソート順を指定する JSON オブジェクト。FileMaker Data API ガイドの「レコードの範囲の取得」および「検索の実行」を参照してください。

offset

1

現在のレイアウトテーブル内のレコード範囲の 1 番目のレコードのレコード番号。FileMaker Data API ガイドの「単一のレコードの取得」、「レコードの範囲の取得」、および「検索の実行」を参照してください。

limit

100

現在のレイアウトテーブルから返されるレコードの最大数。FileMaker Data API ガイドの「単一のレコードの取得」、「レコードの範囲の取得」、および「検索の実行」を参照してください。

layout.response

layouts の値

異なるレイアウトのコンテキストでデータを取得するには、レイアウト名を指定します。FileMaker Data API ガイドを参照してください。

portal

すべてのポータル

ポータルを指定する JSON オブジェクト。FileMaker Data API ガイドの「単一のレコードの取得」、「レコードの範囲の取得」、および「検索の実行」を参照してください。

offset.portal-name

1

関連レコード範囲の 1 番目のポータルレコードのレコード番号。portal-name には、存在する場合はポータルのオブジェクト名を指定する必要があります。存在しない場合は関連テーブル名を指定します。FileMaker Data API ガイドの「単一のレコードの取得」、「レコードの範囲の取得」、および「検索の実行」を参照してください。

limit.portal-name

50

返される関連レコードの最大数。portal-name には、存在する場合はポータルのオブジェクト名を指定する必要があります。存在しない場合は関連テーブル名を指定します。FileMaker Data API ガイドの「単一のレコードの取得」、「レコードの範囲の取得」、および「検索の実行」を参照してください。

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

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

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

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

  • 作成操作と更新操作はサポートされていないので、fieldDataportalData、および modId は無視されます。

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

エラー処理

他のスクリプトステップとは異なり、このスクリプトステップの実行後には、エラーが存在する場合でも Get (最終エラー) 関数が常に 0 (エラーなし) を返します。エラーを確認するには、代わりに [ターゲット] に返される JSON の結果を使用してください。

この結果には、少なくとも 1 つの messages キーと、message キーおよび code キーを含む 1 つのオブジェクトが含まれています。code の値は、FileMaker エラーコードで定義されている値です。messagecode のほとんどの値は、FileMaker ホストで Web サービスとして使用可能な FileMaker Data API から返される値と同じです。このスクリプトステップ特有の追加のエラーがいくつかあり、[リクエスト] オプションの解析時に問題を特定する際にそれが役立ちます。これらの追加エラーで使用される code の値は 3、1708、および 1710 ですが、message には、エラーの詳細を提供するさまざまな値が使用されます。

メモ 

  • このスクリプトステップが実行されるときには、リクエストで指定されたレイアウトを使って非表示ウインドウで実行されます。結果が返されるとウインドウは閉じられます。

  • このスクリプトステップの実行中はスクリプトトリガーとエラーレポートのダイアログボックスが無効になります。

  • ファイルが 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
        }
    }
}