作成日:2024年10月14日
「FileMaker Data API を実行」の使い方(2)


どうも、にゃん太です
今回のメモは、「FileMaker Data API を実行」の使い方(1)の続きです
「create」「update」「delete」「dupulicate」の使用例を書いてきます
「FileMaker Data API を実行」の使用例
レコードの作成
データを作成するには、「action」キーに「create」を指定します
また、作成内容は「fieldData」にJSONArray形式で指定します
スクリプト
# ################################################## # FileMaker Data API を使用したレコードの作成 # ################################################## 変数を設定 [$param; 値: JSONSetElement ( $param; "action"; "create"; JsonString )] 変数を設定 [$param; 値: JSONSetElement ( $param; "version"; "vLatest"; JsonString )] 変数を設定 [$param; 値: JSONSetElement ( $param; "layouts"; "全校生徒名簿_一部表示"; JsonString )] # 作成内容の指定 変数を設定 [$fieldData; 値: JSONSetElement ( $fieldData; "生徒番号"; "999998"; JsonString )] 変数を設定 [$fieldData; 値: JSONSetElement ( $fieldData; "姓"; "山田"; JsonString )] 変数を設定 [$fieldData; 値: JSONSetElement ( $fieldData; "名"; "太郎"; JsonString )] 変数を設定 [$fieldData; 値: JSONSetElement ( $fieldData; "学年"; "中学1年"; JsonString )] 変数を設定 [$param; 値: JSONSetElement ( $param; "fieldData"; $fieldData; JsonObject )] FileMaker Data API を実行 [選択; ターゲット: $result; $param] フィールド設定 [result::result; JSONFormatElements ( $param )]
このスクリプトを実行した結果、指定したフィールドと自動入力の主キーにだけ値のある新規レコードが作成されました
戻り値では作成されたレコードの「recordId」が分かります
結果
{ "messages": [ { "code": "0", "message": "OK" } ], "response" : { "modId" : "0", "recordId" : "2258" } }
尚、この処理では、レイアウトにフィールドが表示されているかどうかは判定しない様です
実際に、学年フィールドは指定レイアウトに表示されていませんが、値の割り当ては行われています
レコードの作成(ポータル)
ポータルデータの作成も行えます
スクリプト
# ################################################## # FileMaker Data API を使用したレコードの作成 # ################################################## 変数を設定 [$param; 値: JSONSetElement ( $param; "action"; "create"; JsonString )] 変数を設定 [$param; 値: JSONSetElement ( $param; "version"; "vLatest"; JsonString )] 変数を設定 [$param; 値: JSONSetElement ( $param; "layouts"; "生徒別成績"; JsonString )] # 作成内容の指定 変数を設定 [$fieldData; 値: JSONSetElement ( $fieldData; "生徒番号"; "999999"; JsonString )] 変数を設定 [$fieldData; 値: JSONSetElement ( $fieldData; "姓"; "山田"; JsonString )] 変数を設定 [$fieldData; 値: JSONSetElement ( $fieldData; "名"; "花子"; JsonString )] 変数を設定 [$fieldData; 値: JSONSetElement ( $fieldData; "学年"; "中学1年"; JsonString )] 変数を設定 [$param; 値: JSONSetElement ( $param; "fieldData"; $fieldData; JsonObject )] # ポータルの作成内容の指定 変数を設定 [$portalData; 値: JSONSetElement ( $portalData; "成績[0].試験成績::試験名"; "転入試験"; JsonString )] 変数を設定 [$portalData; 値: JSONSetElement ( $portalData; "成績[0].試験成績::国語"; 79; JsonNumber )] 変数を設定 [$portalData; 値: JSONSetElement ( $portalData; "成績[0].試験成績::社会"; 100; JsonNumber )] 変数を設定 [$portalData; 値: JSONSetElement ( $portalData; "成績[0].試験成績::数学"; 82; JsonNumber )] 変数を設定 [$portalData; 値: JSONSetElement ( $portalData; "成績[0].試験成績::理科"; 91; JsonNumber )] 変数を設定 [$portalData; 値: JSONSetElement ( $portalData; "成績[0].試験成績::外国語"; 68; JsonNumber )] 変数を設定 [$param; 値: JSONSetElement ( $param; "portalData"; $portalData; JsonObject )] FileMaker Data API を実行 [選択; ターゲット: $result; $param] フィールド設定 [result::result; JSONFormatElements ( $param )]
この処理は、ポータルが表示されたレイアウトで行います
また、「このリレーションシップを使用して、このテーブルでのレコードの作成を許可」にチェックを入れておく必要があります
リレーションのキーとなるフィールドには値を割り当てない点に注意してください
レコードの更新
データの更新を行うには、更新フィールドと内容、更新対象の指定が必要となります
スクリプト
# ################################################## # FileMaker Data API を使用したレコードの更新 # ################################################## 変数を設定 [$param; 値: JSONSetElement ( $param; "action"; "read"; JsonString )] 変数を設定 [$param; 値: JSONSetElement ( $param; "version"; "vLatest"; JsonString )] 変数を設定 [$param; 値: JSONSetElement ( $param; "layouts"; "全校生徒名簿_一部表示"; JsonString )] # 条件の指定 変数を設定 [$query; 値: JSONSetElement ( $query; "[0].姓"; "山田"; JsonString )] 変数を設定 [$query; 値: JSONSetElement ( $query; "[0].名"; "花子"; JsonString )] 変数を設定 [$param; 値: JSONSetElement ( $param; "query"; $query; JsonArray )] FileMaker Data API を実行 [選択; ターゲット: $result; $param] # レコードIDの取得 変数を設定 [$id; 値: JSONGetElement ( $result; "response.data[0].recordId" )] 変数を設定 [$param; 値: JSONSetElement ( $param; "action"; "update"; JsonString )] 変数を設定 [$param; 値: JSONSetElement ( $param; "version"; "vLatest"; JsonString )] 変数を設定 [$param; 値: JSONSetElement ( $param; "layouts"; "全校生徒名簿_一部表示"; JsonString )] # 更新対象の指定 変数を設定 [$param; 値: JSONSetElement ( $param; "recordId"; $id; JsonNumber )] # 更新内容の指定 変数を設定 [$fieldData; 値: JSONSetElement ( $fieldData; "生徒番号"; "240359"; JsonString )] 変数を設定 [$param; 値: JSONSetElement ( $param; "fieldData"; $fieldData; JsonObject )] FileMaker Data API を実行 [選択; ターゲット: $result; $param] フィールド設定 [result::result; JSONFormatElements ( $param )]
「recordId」で指定したデータ更新はこの様に行う事ができます
「query」で対象を指定できればもっと簡単なのですが、それは出来ない様です
レコードの更新(ポータル)
ポータルデータの更新を行うには、対象となるポータルデータの「recordId」が必要となります
スクリプト
# ################################################## # FileMaker Data API を使用したレコードの更新(ポータル) # ################################################## 変数を設定 [$param; 値: JSONSetElement ( $param; "action"; "read"; JsonString )] 変数を設定 [$param; 値: JSONSetElement ( $param; "version"; "vLatest"; JsonString )] 変数を設定 [$param; 値: JSONSetElement ( $param; "layouts"; "全校生徒名簿_一部表示"; JsonString )] # 条件の指定 変数を設定 [$query; 値: JSONSetElement ( $query; "[0].姓"; "山田"; JsonString )] 変数を設定 [$query; 値: JSONSetElement ( $query; "[0].名"; "花子"; JsonString )] 変数を設定 [$param; 値: JSONSetElement ( $param; "query"; $query; JsonArray )] FileMaker Data API を実行 [選択; ターゲット: $result; $param] # レコードIDの取得 変数を設定 [$id; 値: JSONGetElement ( $result; "response.data[0].recordId" )] # ポータルのレコードIDの取得 変数を設定 [$portalId; 値: JSONGetElement ( $result; "response.data[0].portalData.成績[0].recordId" )] 変数を設定 [$param; 値: ""] 変数を設定 [$param; 値: JSONSetElement ( $param; "action"; "update"; JsonString )] 変数を設定 [$param; 値: JSONSetElement ( $param; "version"; "vLatest"; JsonString )] 変数を設定 [$param; 値: JSONSetElement ( $param; "layouts"; "生徒別成績"; JsonString )] # 更新レコードの指定 変数を設定 [$param; 値: JSONSetElement ( $param; "recordId"; $id; JsonString )] # 更新内容の指定 変数を設定 [$portalData; 値: JSONSetElement ( $portalData; "成績[0].recordId"; $portalId"; $portalId; JsonNumber )] 変数を設定 [$portalData; 値: JSONSetElement ( $portalData; "国語"; 75; JsonNumber )] 変数を設定 [$param; 値: JSONSetElement ( $param; "portalData"; $fieldData; JsonObject )] FileMaker Data API を実行 [選択; ターゲット: $result; $param] フィールド設定 [result::result; JSONFormatElements ( $param )]
親レコードの「recordId」とポータルの「recordId」の両方を指定する必要があります
また、ポータルのキーとなるフィールドは更新できません
尚、ポータルの「recordId」を指定しない場合は新規ポータルが追加されます
レコードの削除
データの削除を行うには、削除対象の指定が必要となります
スクリプト
# ################################################## # FileMaker Data API を使用したレコードの削除 # ################################################## 変数を設定 [$param; 値: JSONSetElement ( $param; "action"; "read"; JsonString )] 変数を設定 [$param; 値: JSONSetElement ( $param; "version"; "vLatest"; JsonString )] 変数を設定 [$param; 値: JSONSetElement ( $param; "layouts"; "全校生徒名簿"; JsonString )] # 条件の指定 変数を設定 [$query; 値: JSONSetElement ( $query; "[0].姓"; "山田"; JsonString )] 変数を設定 [$query; 値: JSONSetElement ( $query; "[0].名"; "花子"; JsonString )] 変数を設定 [$param; 値: JSONSetElement ( $param; "query"; $query; JsonArray )] FileMaker Data API を実行 [選択; ターゲット: $result; $param] # レコードIDの取得 変数を設定 [$id; 値: JSONGetElement ( $result; "response.data[0].recordId" )] 変数を設定 [$param; 値: ""] 変数を設定 [$param; 値: JSONSetElement ( $param; "action"; "delete"; JsonString )] 変数を設定 [$param; 値: JSONSetElement ( $param; "version"; "vLatest"; JsonString )] 変数を設定 [$param; 値: JSONSetElement ( $param; "layouts"; "全校生徒名簿"; JsonString )] # 削除レコードの指定 変数を設定 [$param; 値: JSONSetElement ( $param; "recordId"; $id; JsonString )] FileMaker Data API を実行 [選択; ターゲット: $result; $param] フィールド設定 [result::result; JSONFormatElements ( $param )]
これにより、レコードを削除する事ができます
尚、「delete」ではポータル行の削除を指定する事は出来ません
但し、「他のテーブルでレコードが削除された時、このテーブルの関連レコードを削除」にチェックが入っている場合の全削除は行われます
レコードの複製
レコードの複製を行うには、削除対象の指定が必要となります
スクリプト
# ################################################## # FileMaker Data API を使用したレコードの複製 # ################################################## 変数を設定 [$param; 値: JSONSetElement ( $param; "action"; "read"; JsonString )] 変数を設定 [$param; 値: JSONSetElement ( $param; "version"; "vLatest"; JsonString )] 変数を設定 [$param; 値: JSONSetElement ( $param; "layouts"; "全校生徒名簿"; JsonString )] # 条件の指定 変数を設定 [$query; 値: JSONSetElement ( $query; "[0].姓"; "山田"; JsonString )] 変数を設定 [$query; 値: JSONSetElement ( $query; "[0].名"; "花子"; JsonString )] 変数を設定 [$param; 値: JSONSetElement ( $param; "query"; $query; JsonArray )] FileMaker Data API を実行 [選択; ターゲット: $result; $param] # レコードIDの取得 変数を設定 [$id; 値: JSONGetElement ( $result; "response.data[0].recordId" )] 変数を設定 [$param; 値: ""] 変数を設定 [$param; 値: JSONSetElement ( $param; "action"; "dupulicate"; JsonString )] 変数を設定 [$param; 値: JSONSetElement ( $param; "version"; "vLatest"; JsonString )] 変数を設定 [$param; 値: JSONSetElement ( $param; "layouts"; "全校生徒名簿"; JsonString )] # 複製レコードの指定 変数を設定 [$param; 値: JSONSetElement ( $param; "recordId"; $id; JsonString )] FileMaker Data API を実行 [選択; ターゲット: $result; $param] フィールド設定 [result::result; JSONFormatElements ( $param )]
これにより、レコードを複製する事ができます
複製と同時に編集したりする事は出来ませんので、戻り値の「recordId」を使用して別途「update」の処理が必要となります

以上で今日のメモ書きは終了です
内容はいかがでしたか?
もしご意見やご要望、誤りの指摘などありましたら、下記フォームよりお気軽にご連絡ください