FileMaker

FileMaker Data API チュートリアル4・新規追加・編集・削除

  • このエントリーをはてなブックマークに追加

こんにちは。
ライジングサン・システムコンサルティングの岩佐です。

この記事では、FileMaker Data API におけるレコードの作成・編集、そして削除の方法について解説していきます。この記事で学習を進めるには、このFileMaker Data API シリーズの1・2・3の内容を理解している必要があります。もしまだそちらの記事をご覧いただいていない方は、こちら、認証処理の記事から学習をスタートされると、スムーズに進められると思います。

また、今回の学習でもPostmanを利用します。これまでの記事で、Postmanに token 環境変数の自動更新を設定していますので、そちらも確実にできるようにしておいてください。Postman の環境変数自動設定に関しては、2つめの記事でご紹介しています。

そして、前の記事でご案内しているサンプルソリューションも、この先実際に手を動かして学習を進めていく上で必要となります。ぜひダウンロードし、ご自身の管理下にある FileMaker Server にホストしておいてください。(この記事の最後にもサンプルソリューションのダウンロードURLリクエストフォームをご用意しています。)

1.Create Record メソッド

Create Record メソッドは、リクエストURLで指定したデータベース・テーブルに、新規レコードを作成するメソッドです。

リクエストURLは以下のとおりです。また、リクエストタイプはPOSTになります。

https://{{serverAddress}}/fmi/data/v1/databases/{{databaseName}}//layouts/{{layoutName}}/records

1-1. Create Record メソッドのパラメータ

Create Record メソッドのパラメータは以下のとおりです。

fieldData
インサートするレコードの値を、JSONのKey&Value方式で設定します。Keyにはフィールド名を、Valueにはインサートする値を設定します。また、JSONオブジェクト1つに対して1レコードの追加となります。

portalData
インサートするレコードの関連レコードにも同時にレコードを追加したい場合に設定します。こちらは関連レコードとなるので、フィールド名は完全修飾フィールド名で記述します。正確なキーの値を知るには、該当のレイアウトをターゲットにGet Record(s)メソッドを実行してみてください。返されたJSONのportalDataオブジェクト内を確認することで、正確なキーを得ることができます。

script / script.param
レコードの新規追加が終わった直後に実行したいスクリプトとその引数を記述します。

script.prerequest / script.prerequest.param
レコードの新規追加を実行する前に実行したいスクリプトとその引数を記述します。

1-2. Postmanを使ったレコードの新規追加

それでは実際にPostmanを使ってレコードを新規追加しましょう。今回は、メーカーテーブルに対して新しいメーカーさんを1件追加してみたいと思います。

リクエストボディに設定するパラメータは以下の通りです。

{
   "fieldData":{
      "makerCode":20001,
      "name":"ひゃっほーブルーイング"
   }
}

このリクエストが成功すると、メーカーテーブルにレコードが1件追加されます。

レコードの追加が成功したら、次のようなレスポンスが返ってきます。

{
    "response": {
        "recordId": "760",
        "modId": "0"
    },
    "messages": [
        {
            "code": "0",
            "message": "OK"
        }
    ]
}

レスポンスの中に追加したレコードのレコードIDが含まれているので、このレコードIDを使って、追加したレコードの情報を、Get Recordメソッドを使って取得してみましょう。

取得した結果はこちらになります。

{
    "response": {
        "data": [
            {
                "fieldData": {
                    "makerCode": 20001,
                    "name": "ひゃっほーブルーイング",
                    "cal_count_productItem": 0,
                    "__id": "72CFDE0C-DF65-C442-BBD6-E155CA63A58E"
                },
                "portalData": {
                    "T02_maker_PRODUCTITEM": []
                },
                "recordId": "761",
                "modId": "0"
            }
        ]
    },
    "messages": [
        {
            "code": "0",
            "message": "OK"
        }
    ]
}

これで、追加したメーカーマスタのプライマリキーである __id の値が取得できました。

次に、このメーカーの下にプロダクトを追加しましょう。

Postmanの環境変数の layoutNameT01_PRODUCTITEM に変更してください。そして、プロダクトアイテムテーブルにレコードを追加します。

このプロダクトアイテムテーブルには、Not Null の外部キーとして、メーカーテーブルのプライマリキーが設定されています。ですので、先程のGetメソッドで取得したJSONから メーカーレコードの __id の値を採取して、新しい商品を追加するリクエストボディを設定してみましょう。

以下が、プロダクトアイテムテーブルに新規追加するリクエストのJSONです。

_fk_maker_id に設定している値が、先程追加したメーカーレコードのプライマリキーの値になります。

{
   "fieldData":{
      "jan_code":"4990000000001",
      "name":"おひさまエール 350ml",
      "unit_price":250,
      "launch_date":"12/10/2018",
      "comment":"",
      "_fk_maker_id":"72CFDE0C-DF65-C442-BBD6-E155CA63A58E"
   }
}

1-3. スクリプトの実行

次に、レコードの新規作成と同時にスクリプトも実行してみましょう。今回は、レコードを追加する前と後の双方でリクエストを実行します。同じく、プロダクトアイテムテーブルに対して、新規レコードを1件追加すると同時に、その前後でレコード総数を返すスクリプトを実行します。

設定するリクエストボディは以下の通りです。

{
   "fieldData":{
      "jan_code":"4990000000002",
      "name":"木曜日のいぬ 350ml",
      "unit_price":260,
      "launch_date":"12/10/2018",
      "comment":"",
      "_fk_maker_id":"72CFDE0C-DF65-C442-BBD6-E155CA63A58E"
   },
   "script.prerequest" : "sample_script_prerequest",
   "script" : "sample_script"
}

レコードの新規追加が実行される前に動くスクリプトが sample_script_prerequest.

新規レコードが追加された後に実行されるスクリプトが sample_script です。

このリクエストを実際にコールすると、以下のようなレスポンスが返ってきます。

{
    "response": {
        "scriptResult.prerequest": "リクエスト処理前のレコード件数は23467",
        "scriptError.prerequest": "0",
        "scriptResult": "リクエスト処理後のレコード件数は23468",
        "scriptError": "0",
        "recordId": "23476",
        "modId": "0"
    },
    "messages": [
        {
            "code": "0",
            "message": "OK"
        }
    ]
}

スクリプトからの戻り値は、それぞれ response.scriptResult.prerequestresponse.scriptResult に別々に設定されていることがわかると思います。

そして、response.scriptResult.prerequest の値が、”リクエスト処理前のレコード件数は23467″。response.scriptResult の値が、”リクエスト処理前のレコード件数は23468″と、レコード総数が1件増えているのがわかります。

スクリプトの戻り値は、FileMakerのスクリプトで現在のスクリプトを終了スクリプトステップのテキスト結果に設定した文字列がそのまま response.scriptresult に渡されます。このあたりも非常に簡単でありがたい仕様ですね。

1-4 . 実際の動きを動画で確認

ではこれまでの学習を動画でも合わせて説明します。

いかがでしょうか?
うまくレコードの追加はできましたでしょうか?

以上がレコード追加メソッドの説明です。

2. Edit Record メソッド

ここからは、レコードの編集メソッドについて学習していきます。先程追加したプロダクトアイテムのレコードのコメントフィールドを編集してみましょう。

まずリクエストURLは以下の通りで、リクエストタイプはPATCHになります。

https://{{serverAddress}}/fmi/data/v1/databases/{{databaseName}}//layouts/{{layoutName}}/records/23217

URLの一番最後に指定している番号は、FileMakerのレコードIDになります。

また、Edit Record メソッドに設定できるパラメータは、Create Record メソッドと同じなので、この項番での説明は割愛いたします。

2-1. Postmanを使ったレコードの編集

それでは実際にPostmanを使ってレコードを編集しましょう。今回は、先程追加した商品テーブルのレコードのコメントフィールドに、コメントを書いてみたいと思います。

このリクエストを実行するためのパラメータは以下の通りです。

{
 "fieldData": {
   "comment": "FileMaker Data APIからCommentを更新したよ。"
 }
}

URLで設定するレコードIDは、事前にGet Record(s) を実行するか、FileMaker の標準UIから事前に確認しておいてください。リクエストが成功すると、以下のようなレスポンスが返ってきます。

{
    "response": {
        "modId": "1"
    },
    "messages": [
        {
            "code": "0",
            "message": "OK"
        }
    ]
}

もちろん、FileMakerなので、クライアント側は特に更新処理を実行することなく、自動的に変更結果がFileMaker Server からブロードキャストされます。

2-2. 実際の動きを動画で確認

それでは、実際の動きを動画で確認しましょう。

3. Delete Record メソッド

最後に、レコードの削除メソッドについて学習していきます。この学習で追加したメーカーテーブルのレコードを削除することで、同時に該当メーカー配下のプロダクトアイテムも削除します。

メーカーテーブルとプロダクトアイテムテーブルの間には、リレーションシップで、関連レコードの削除が設定されています。

Record DeleteメソッドのリクエストURLは以下の通りです。リクエストタイプはDELETEです。

https://{{serverAddress}}/fmi/data/v1/databases/{{databaseName}}/layouts/{{layoutName}}/records/23470

Record Edit メソッドと同じく、最後の数値はFileMakerのレコードIDです。

また、Record Delete に設定できるパラメータは、Create Record / Edit Record メソッドから、fieldData、及びportalDataを除いたスクリプトの指定のみですので、この項番での説明は割愛させていただきます。

3-1. Postmanを使ったレコードの削除

それでは実際にPostmanを使ってレコードを削除して見ましょう。まずはPostmanの環境変数の
layoutNameT02_MAKER に変更してください。

次に削除対象のメーカーテーブルのレコードのレコードIDを確認して、リクエストURLに設定してください。

削除リクエストが成功すると、以下のようなレスポンスが返ってきます。

{
    "response": {},
    "messages": [
        {
            "code": "0",
            "message": "OK"
        }
    ]
}

3-2. 実際の動きを動画で確認

それでは、削除リクエストをPostmanから実行する方法を動画にて説明します。

4. まとめ

この記事では、FileMaker Data API を使ったレコードの新規追加・編集・削除メソッドについて解説をしてきました。また、リクエストの前後でスクリプトを実行する方法についても解説してきました。

これらのメソッドは、RESTfulな思想に忠実に設計されており、他の開発言語の開発者でも比較的スムーズに理解してもらうことができるでしょう。

それと同時に、これだけではなかなか対応が難しい機能をを実装したいことも出てくると思います。

例えばレコードの追加・編集・削除は、レコードIDを指定して1件1件処理をすることになるので、処理対象のレコード数が増えると、FileMakerServer と APIクライアント間のメッセージのやり取りがか非常に煩雑になります。できれば、1回のリクエストで複数のレコードを作成したり、更新したり、それと同時に他のテーブルも同時に更新したりといった複雑な処理を実行したい場合も出てくると思います。

そのときに便利なのが、やはりスクリプトになります。

これまで学習してきたとおり、スクリプトはレコードの新規追加・更新・削除、そして検索時に実行可能ですが、これらの処理を一切実行せずにスクリプトのみ実行したいこともあるはずです。

FileMaker Data API チュートリアルの最後の記事では、このあたりのテクニックについて解説していきたいと思います。

4-1. サンプルソリューションのダウンロード

サンプルソリューションはこちらからリクエストしてください。いただいたメールアドレスにダウンロードURLと、APIを実行するために必要なアカウント名とパスワードをお送りします。

※認証の記事にあるサンプルソリューションと同じものなので、すでにダウンロード済みの方は必要ありません。

※サンプルソリューションを動かすには、FileMakerのVer17以降が必要です。

サンプルソリューションはロックフリーになっています。

ダウンロードURLには、完全アクセス権のアカウント名とパスワードを記述しています。こちらでサンプルソリューションを開いていただければ、全ての中身を確認いただくことが可能です。

そして、サンプルソリューションで使われているカスタム関数やスクリプトは自由にあなたのソリューションにコピーして使っていただくことができます。

ただし、それに伴って発生したあらゆる障害に関しては責任を追いかねることをご了承ください。

ダウンロードURLのリクエスト

    会社名 (必須)

    お名前 (必須)

    メールアドレス (必須)

    • このエントリーをはてなブックマークに追加