クリック画像の実寸表示

段ボール箱を机にした猫 ファイルメーカー(filemaker)のちらしの裏のメモ書き

TOP  >  FileMaker Data API を使ってPHPからFileMakerを操作する(2)
作成日:2024年11月04日

FileMaker Data API を使ってPHPからFileMakerを操作する(2)

イメージイラスト
にゃん太

どうも、にゃん太です

FileMaker Data API を使ってPHPからFileMakerを操作する(1)の続きです

今回はようやくレコードの操作について書いていきます


レコードの取得

ではレコードデータを取得する所から始めます
レコードを全件取得するのであれば、下記の様に記載する事で取得できます

PHP

function FMS_getRecord($domain, $filename, $layout, $token){ $URL = $domain."/fmi/data/vLatest/databases/".$filename."/layouts/".$layout."/records"; $headers = array( 'Authorization: Bearer '.$token, 'cache-control: no-cache', 'Content-Type: application/json', 'Content-Length: '.strlen($fieldData) ); $context = array( 'http'=>array( 'method'=>'GET', 'header'=>implode("\r\n",$headers) ) ); $result = file_get_contents($URL, false, stream_context_create($context)); return $result; }

この様にレイアウトを指定してやると、レイアウトに割り当てたテーブルからデータを全件取得します
尚、表示してあるフィールドだけを取得しますので、大量にフィールドがあるテーブルでも必要な情報だけを取得できます

取得結果

尚、全件取得とは言いましたが、初期状態では取得件数は100件に制限されています
それ以上のレコードがある場合は、「limit」を指定して取得件数の上限を変更するか、「offset」で何件目から取得するかを指定してページ切替で順次表示されるなどの処理を行う必要があります
「offset」「limit」で範囲指定してデータを取得する場合は下記のような書き方になります

PHP

function FMS_getRecordRange($domain, $filename, $layout, $token, $offset, $limit){ $URL = $domain."/fmi/data/vLatest/databases/".$filename."/layouts/".$layout."/records?_offset=".$offset."&_limit=".$limit; $headers = array( 'Authorization: Bearer '.$token, 'cache-control: no-cache', 'Content-Type: application/json', 'Content-Length: '.strlen($fieldData) ); $context = array( 'http'=>array( 'method'=>'GET', 'header'=>implode("\r\n",$headers) ) ); $result = file_get_contents($URL, false, stream_context_create($context)); return $result; }

これまで複数レコードを取得する方法でしたが、レコードIDを指定して特定の1件だけを取得する事もできます

PHP

function FMS_getRecordRange($domain, $filename, $layout, $token, $recordID){ $URL = $domain."/fmi/data/vLatest/databases/".$filename."/layouts/".$layout."/records/".$recordID; $headers = array( 'Authorization: Bearer '.$token, 'cache-control: no-cache', 'Content-Type: application/json', 'Content-Length: '.strlen($fieldData) ); $context = array( 'http'=>array( 'method'=>'GET', 'header'=>implode("\r\n",$headers) ) ); $result = file_get_contents($URL, false, stream_context_create($context)); return $result; }

レコードの作成

次は、レコードを作成します
当然ですが、作成するレコードの情報を引数として渡す必要がありますので、レコード情報の作成例も併せて掲載します

PHP

function FMS_create($domain, $filename, $layout, $token, $fieldData){ $URL = $domain."/fmi/data/vLatest/databases/".$filename."/layouts/".$layout."/records"; $headers = array( 'Authorization: Bearer '.$token, 'cache-control: no-cache', 'Content-Type: application/json', 'Content-Length: '.strlen($fieldData) ); $context = array( 'http'=>array( 'method'=>'POST', 'header'=>implode("\r\n",$headers), 'content'=>$fieldData ) ); $result = file_get_contents($URL, false, stream_context_create($context)); return $result; } $dataArray = array( "fieldData"=>array( "生徒番号"=>"240999", "姓"=>"山田", "名"=>"太郎", "学年"=>"中学1年", "都道府県"=>"東京都", "市区町村"=>"新宿区", "町域"=>"西新宿", "番地"=>"2-8-1", "建物名"=>"", "電話番号"=>"03-0000-0000" ) ); $fieldData = json_encode($dataArray);

これでレコードが作成され、成否とレコードIDが返されます

取得結果

レコードの編集

レコードを編集する事もできます
レコードIDを指定して対象レコードを特定し、編集するフィールドとその内容を引数として渡します

PHP

function FMS_EDIT($domain, $filename, $layout, $token, $recordID, $fieldData){ $URL = $domain."/fmi/data/vLatest/databases/".$filename."/layouts/".$layout."/records/".$recordID; $headers = array( 'Authorization: Bearer '.$token, 'cache-control: no-cache', 'Content-Type: application/json', 'Content-Length: '.strlen($fieldData) ); $context = array( 'http'=>array( 'method'=>'PATCH', 'header'=>implode("\r\n",$headers), 'content'=>$fieldData ) ); $result = file_get_contents($URL, false, stream_context_create($context)); return $result; }

取得結果

尚、「modId」は修正IDで、編集する度に変更されます
この値は引数として渡す事も可能で、この値が一致しない場合は編集されません
この事を利用し、変更処理する間に別のアクセスで変更されている場合を検知して処理停止させる事ができます

レコードの削除

レコードの削除も可能です
レコードを1件だけ取得する場合とほぼ同じで、「method」が「DELETE」になる点だけが違います

PHP

function FMS_getRecordRange($domain, $filename, $layout, $token, $recordID){ $URL = $domain."/fmi/data/vLatest/databases/".$filename."/layouts/".$layout."/records/".$recordID; $headers = array( 'Authorization: Bearer '.$token, 'cache-control: no-cache', 'Content-Type: application/json', 'Content-Length: '.strlen($fieldData) ); $context = array( 'http'=>array( 'method'=>'DELETE', 'header'=>implode("\r\n",$headers) ) ); $result = file_get_contents($URL, false, stream_context_create($context)); return $result; }

レコードの検索

条件を指定してレコードを検索し、その結果を受け取る事も可能です
検索条件は複数指定可能で、「query」で指定します
「query」の作成例も併せて掲載します

PHP

function FMS_FIND($domain, $filename, $layout, $token, $query){ $URL = $domain."/fmi/data/vLatest/databases/".$filename."/layouts/".$layout."/_find"; $headers = array( 'Content-Type: application/json', 'Authorization: Bearer '.$token, 'Content-Length: '.strlen($query) ); $context = array( 'http'=>array( 'method'=>'POST', 'header'=>implode("\r\n",$headers), 'content'=>$query ) ); $result = file_get_contents($URL, false, stream_context_create($context)); return $result; } $param = "test"; $dataArray = array( "query"=>array( ["姓"=>"熊本"], ["姓"=>"宮尾"] ) ); $query = json_encode($dataArray);


取得結果

スクリプトの実行

自分で作成したスクリプトを実行させます
引数を渡したり、返り値を受け取る事もできますので、自由な設計が可能です

PHP

function FMS_SCRIPT($domain, $filename, $layout, $token, $script, $param){ $URL = $domain."/fmi/data/vLatest/databases/".$filename."/layouts/".$layout."/script/".$script."?script.param=".urlencode($param); $headers = array( 'Content-Type: application/json', 'Authorization: Bearer '.$token ); $context = array( 'http'=>array( 'method'=>'GET', 'header'=>implode("\r\n",$headers) ) ); $result = file_get_contents($URL, false, stream_context_create($context)); return $result; }

取得結果

TOKENの発行

最後に、TOKENを終了します
処理は実行されているし、接続は10分で自動的に切断されます
別にわざわざ終了しなくてもよいのでは?何て考える人もいるかもしれませんが、セキュリティ上のリスクとなりますし、何より処理の反映が遅れる場合があります
面倒がらずにちゃんと終了しましょう

PHP

function FMS_LOGOUT($domain, $filename, $token){ $URL = $domain."/fmi/data/vLatest/databases/".$filename."/sessions/".$token; $context = array( 'http'=>array( 'method'=>'DELETE', 'ignore_errors'=>true ) ); $json = file_get_contents($URL, false, stream_context_create($context)); $obj = json_decode($json); return $obj->messages[0]->message; }

以上で説明は終了です
今回は個別の関数を使用して説明しましたが、実際に使用する場合はClassを作成しておくと流用もできるので便利ですね!

メモ書き終了の案内イラスト

以上で今日のメモ書きは終了です

内容はいかがでしたか?

もしご意見やご要望、誤りの指摘などありましたら、下記フォームよりお気軽にご連絡ください

ご連絡フォーム