FX.phpを使ったFileMaker Webアプリケーションで頻繁に使うことになるFMFind()とFMView()。これら2つの関数では処理内容やリクエスト先、取得する結果のデータフォーマットが異なっており、PHPで実装すべき処理の用途が変わってくる。FMFind()とFMView()の処理の違いを把握し、実装要件に合わせて使い分けよう。

FMFind()+αとFMView()の処理の違いとは

Last Functions to Callとして挙げられている、FMFind()をはじめとした検索、登録、編集、削除の関数と、FMView()。まずこれら関数の用途について簡単におさらいしておこう。

FMFind()

  • 検索用途、おもにレコード情報の取得に使用
  • /fmi/xml/FMPXMLRESULT.xmlにアクセス
  • $ReturnedData['foundCount']にはレコード総数が格納される
  • フィールド情報が$ReturnedData['fields'][0]に格納されるが、この中に値一覧情報はふくまれない

FMView()

  • 指定したFileMakerレイアウト情報の取得に使用
  • /fmi/xml/FMPXMLLAYOUT.xmlにアクセス
  • $ReturnedData['foundCount']には-1が格納される
  • 値一覧の情報(valuelist)が取得できるのはFMView()のみ。($ReturnedData['fields'][0]['valuelist']および$ReturnedData['valueLists'])
  • キーとしては存在するが、値のない配列がある。(linkNext, linkPrevious, dataなど)

FX.php/FMFind()で取得する配列の構造図 - DatasetDiagram.pdfより抜粋

FX.php/FMView()で取得する配列を赤枠で囲むとこのようになる

注意しておきたいのは、太字で示した箇所。この2つの関数ではFileMaker Web公開エンジンへのリクエスト先が異なり、またキーとして存在するが値のない配列がいくつかある。

さらに注目しておきたい点は、$ReturnedData['fields']と$ReturnedData['valueLists']に格納される情報について。$ReturnedData['fields']にはフィールドの情報が、$ReturnedData['valueLists']には値一覧の情報が格納されることは本コラムの初期に紹介したとおり。それではこの2配列において、FMFind()とFMView()で取得するデータの違いを確認してみよう。

配列 格納される内容 FMFind()で取得可能 FMView()で取得可能
$ReturnedData['fields'][0]['emptyok'] 空欄の可/不可を格納。可: YES, 不可: NO  
$ReturnedData['fields'][0]['maxrepeat'] 最大繰り返し数を格納。デフォルトは1  
$ReturnedData['fields'][0]['name'] フィールド名を格納
$ReturnedData['fields'][0]['extra'] カラムの制限値など。SQL系データベース接続時にのみ使用される
$ReturnedData['fields'][0]['type'] FMFind()ではフィールドのタイプを、FMView()では指定したレイアウト上での、フィールドの表示形式を格納
$ReturnedData['fields'][0]['valuelist'] フィールドに設定されている値一覧名を格納  
$ReturnedData['valueLists'] 値一覧名をキーとし、配列に値一覧情報を格納  

このようにFMFind()とFMView()とで、$ReturnedData['fields'], $ReturnedData['valueLists'], $ReturnedData['foundCount']と配列に格納される値が若干異なってくる。FMView()だけでは、データベースの管理画面で定義するような、入力値の制限の値(空欄不可/最大繰り返し数)を取得することができない。逆にFMFind()では、値一覧情報を取得できない。

  • レコードの検索画面、表示画面を作成したい場合: FMFind()
  • 簡易的なフィールドの定義を作成したい場合: FMFind()
  • 値一覧を取得したい場合: FMView()
  • 値一覧を使用し、プルダウンやチェックボックスを使った編集画面を作成したい場合: FMView()とFMFind()

要件に応じて、これら関数の使い分けが重要になってくる。また、これら取得する情報はXMLが大元となっている。このデータ構造はFX.phpのドキュメントのほか、fmpa11_ddr_xml_grammar.pdfに詳しくまとめられている。FX.phpのソースコードや、これらリファレンスを参考にいろいろ試してみよう。