【コラム】
まずはFileMakerのデータにレコードを追加するところからはじめてみよう。ここでの動作環境は次のとおり。
FileMaker上で単一テーブルの簡単なデータベースを作成しておく。ここでは次の情報でファイルを作成した。
そのほかのフィールドは、レコードの登録日時や更新日時・ユニークなシリアルナンバを格納するためのフィールドだ。Webアプリケーション化するしないに関わらず、これらの情報は障害対応時、機能追加といったさまざまな場面で必要になるケースが多い。かならず作成するようにしておこう。
FX.phpではFileMaker Serverの「XMLによるWeb公開」機能を利用してFileMakerとの通信を実現している。あらかじめWebアプリケーションとして利用したいファイルには、アカウントとアクセス権の管理より「fmxml」拡張アクセス権を付与しておく必要がある。
ファイル作成、拡張アクセス権の設定をおこなったあとにFileMaker Serverで該当のファイルを公開する。また、FileMaker Server側の設定で「XMLによるWeb公開」が有効になっているかを確認しておこう。
これでデータベース側の準備は終了だ。では実際にFX.phpを利用してさきほど作成・公開したFileMakerファイルのテーブルにレコードを作成してみよう。サンプルコードは次のとおり。
<?php
include_once('./fx/FX.php');
$data = new FX('(サーバのIPアドレスまたはドメイン名)', 80, 'FMPro9', 'http');
$data->SetDBData('fxphp_test','testLayout');
$data->SetDBUserPass('admin','admin');
$data->AddDBParam('t_testText',$_SERVER['HTTP_USER_AGENT']);
$dataSet = $data->FMNew();
var_dump($dataSet);
?>
このサンプルコードでは、次の順に処理をおこなっている。
このPHPファイルをターミナル上で実行するか、WebサーバのドキュメントパスにデプロイしてWebブラウザから表示してみよう。
array(9) {
["data"]=>
array(1) {
["11.0"]=>
array(4) {
["t_testText"]=>
array(1) {
[0]=>
string(0) ""
}
["t_serialNo"]=>
array(1) {
[0]=>
string(2) "11"
}
["t_registTimeStamp"]=>
array(1) {
[0]=>
string(19) "02/24/2009 11:39:20"
}
["t_updateTimeStamp"]=>
array(1) {
[0]=>
string(19) "02/24/2009 11:39:20"
}
}
}
["linkNext"]=>
string(0) ""
["linkPrevious"]=>
string(0) ""
["foundCount"]=>
int(1)
["fields"]=>
array(4) {
[0]=>
array(5) {
["emptyok"]=>
string(3) "YES"
["maxrepeat"]=>
string(1) "1"
["name"]=>
string(10) "t_testText"
["type"]=>
string(4) "TEXT"
["extra"]=>
string(0) ""
}
[1]=>
array(5) {
["emptyok"]=>
string(3) "YES"
["maxrepeat"]=>
string(1) "1"
["name"]=>
string(10) "t_serialNo"
["type"]=>
string(6) "NUMBER"
["extra"]=>
string(0) ""
}
[2]=>
array(5) {
["emptyok"]=>
string(3) "YES"
["maxrepeat"]=>
string(1) "1"
["name"]=>
string(17) "t_registTimeStamp"
["type"]=>
string(9) "TIMESTAMP"
["extra"]=>
string(0) ""
}
[3]=>
array(5) {
["emptyok"]=>
string(3) "YES"
["maxrepeat"]=>
string(1) "1"
["name"]=>
string(17) "t_updateTimeStamp"
["type"]=>
string(9) "TIMESTAMP"
["extra"]=>
string(0) ""
}
}
["URL"]=>
string(120) "http://admin:admin@(サーバのIPアドレスまたはドメイン名)/fmi/xml/FMPXMLRESULT.xml?-db=fxphp_test&-lay=testLayout&-max=50&t_testText=&-new"
["query"]=>
string(0) ""
["errorCode"]=>
string(1) "0"
["valueLists"]=>
array(0) {
}
}
PHPが実行されたと同時に、FileMakerのファイルにレコードが登録される。実行結果はXMLとして取得され、FX.phpによって配列として格納される。配列に格納される情報は次のとおり(マニュアル「/Documentation/FXDataFormat.pdf」より抜粋)。
URLを見ていただければわかるとおり、このコードでFX.phpがおこなっている内容はFileMakerの「XMLによるWeb公開」の仕様に沿ってHTTPリクエストを生成し、発行、その結果を配列に格納しているだけだ。FileMakerを使用したWebアプリケーションの実装中に行き詰まった場合は、おかしな引数が混じっていないかどうか、まずは実際に発行されているHTTPリクエストを見るようにしよう。また配列に格納されたエラーコードをもとにすればエラー処理を実装することが可能だ。FX.phpの主要な関数・メソッドは次のとおり(マニュアル「/Documentation/FXFunctions.pdf」より抜粋)。
- First Function to Call -
FX - FXオブジェクトを作成する。作成時にFileMakerサーバへ接続するための情報(IPアドレスまたはドメイン, ポート番号, データタイプ, スキーマ)を指定する
- Next Functions to Call -
SetDBData - 使用するデータベース情報(データベースファイル名, レイアウト名, 一度に取得するレコード数, レスポンスレイアウト)を指定する
SetDBPassword / SetDBUserPass - データベースファイルを開くために使用するユーザ名・パスワードを指定する
SetCharacterEncoding / SetDataParamsEncoding - UTF-8以外の文字コードを使用する場合は、ここでデータのやり取りに使用する文字コードを指定する。使用するにはPHP側でmbstringモジュールが有効になっている必要がある
AddDBParam / AddDBParamArray - フィールドに格納したい内容を指定する
SetRecordID / SetModID - それぞれレコードID(-recid)、修正ID(-modid)を指定する。AddDBParam('-recid', レコードID)でも代用可
PerformFMScript / PerformFMScriptPrefind / PerformFMScriptPresort - 処理完了時、検索時、ソート時のいずれかのタイミングで実行したいスクリプトを指定。スクリプトはあらかじめWeb公開との互換をもった構成で作成しておく必要がある。AddDBParam('-script', スクリプト名)でも代用可
AddSortParam - ソートに使用するフィールド、ソート順、ソート優先順位を指定する
FMSkipRecords - 対象レコードが複数の場合、先頭から数えて除外したいレコード数(-skip)を指定する。AddDBParam('-skip', 除外したいレコード数)でも代用可
- Last Functions to Call -
FMNew - レコードの登録(-new)を実行する
FMEdit - レコードの編集(-edit)を実行する。編集にはレコードID(-recid)を指定する必要がある
FMFind - レコードの検索(-find)を実行する
FMFindAll - レコードの全件表示(-findall)を実行する
FMFindAny - レコードをランダムに1件抽出する(-findany)
FMView - レイアウト情報を取得する(FMPXMLLAYOUT.xmlを使用)
FMDup - レコードの複製(-dup)を実行する。複製にはレコードID(-recid)を指定する必要がある
FMDelete - レコードの削除(-delete)を実行する。削除にはレコードID(-recid)を指定する必要がある
DoFXAction - あらかじめカスタマイズしたクエリを発行する
このほかFileMaker Server側で用意されている機能は、FileMaker Serverに同梱されているドキュメント「FMS9_CWP_PHP_ja.pdf」などを参照されたい。
今回は一部の関数・メソッドを省略して紹介したが、それでもご覧になったとおりのボリュームだ。一度に覚えるのはなかなかむずかしいので、何回も数をこなして次第に覚えていこう。慣れないうちは他人の書いたコードを改変しながら使い方を覚えていくのが近道だ。さいわいFX.phpにはチュートリアル(/Tutorials/)が用意されているので、これらも参考にしてほしい。次回はFX.phpによるCRUD(作成・読出・更新・削除)の実装方法をひととおり紹介する。
| 【コラム】FileMaker×PHPで作る、簡単・便利なWebアプリ 第1回 まずは2大ライブラリを比較 [2009/2/18] |
| ファイルメーカーの新社長に粟倉豊氏が就任 [2009/2/2] |
| インタフェースを一新した「FileMaker Pro 10」が発売 [2009/1/6] |
| ビールの"のど越し"感にはホップの香りが重要 - サッポロビールが発見 [09:00 5/18] |
| Linux Mint 15登場迫る [08:00 5/18] |
| 米Google、量子コンピュータ施設を開設 - 機械学習の研究に活用 [05:50 5/18] |
| 産総研など、夏季と冬季で太陽光を自動調節する省エネ調光シートを開発 [19:37 5/17] |
| 4連続の大規模な太陽フレア発生 [19:08 5/17] |
|
abee、フロント面にメッシュパネルを採用したMini-ITXケース「acubic G20」 [21:04 5/18] パソコン |
|
『宇宙戦艦ヤマト2199』プレゼント企画開始! 森雪フィギュアや声優サインなど [21:00 5/18] ホビー |
|
【レポート】文房具カフェのスタッフが厳選! 2013年春夏のオススメ文具Best5 [21:00 5/18] クリエイティブ |
|
[ゲーム1週間]「信長の野望」が4年ぶり新作 いきものがかり・吉岡がポケモン声優に [20:30 5/18] ホビー |
|
バキ外伝“ヤング独歩”がREDで連載へ、荒ぶる武神を描く [20:13 5/18] ホビー |