FileMakerクラスの使い方として「listDatabases()」「listLayouts()」「listScripts()」を紹介してきた。今回はFileMakerクラスの残りの機能としてAPI for PHPバージョン情報を取得するといった、とりわけデバッグ用途に特化したものを中心に取りあげよう。

FileMaker API for PHPライブラリのバージョンを取得 - getAPIVersion

getAPIVersion()ではAPI for PHPライブラリのバージョンを取得する。このメソッドには引数がないので、そのままコールするだけだ。

fmapi_getapiversion.php

<?php

include_once('../FileMaker.php');

$data = new FileMaker();

$result = $data->getAPIVersion();

if (FileMaker::isError($result))
{
    // エラー処理..
    echo 'FileMaker Error Code: ' . $result->getCode();
    echo '<p>'. $result->getMessage() . '</p>';
}
else
{
    // 正常処理..
    echo '<pre>';
    var_dump($result);
    echo '<pre>';
}
?>

FileMaker Serverには接続せずにライブラリのバージョンを取得するだけなので、FileMaker()の引数は省略している。これをWebブラウザで表示する。

getAPIVersion()でAPI for PHPライブラリのバージョンを取得した。本コラムで使用しているライブラリはFileMaker Server 10インストール時にデプロイされた、バージョン1.1

getAPIVersion()で使用しているAPI for PHPライブラリのバージョンを取得した。なお、同ライブラリは通常FileMaker Serverをインストール時に特定のディレクトリに用意されている。Mac OS XにFileMaker Server 10をインストールした場合は、/Library/FileMaker Server/Web Publishing/FM_API_for_PHP_Standalone.zipや/Library/FileMaker Server/Web Publishing/publishing-engine/php/lib/php/FileMakerといった具合だ。

API for PHPが動作するFileMaker Web Publishing Engineの最小バージョンを取得 - getMinServerVersion

getMinServerVersion()では使用しているAPI for PHPが動作するFileMaker Web Publishing Engineの最小(一番古い)バージョンを取得する。ここでのFileMaker Web Publishing Engineのバージョンとは、FileMaker Serverのバージョンとは別物なので注意されたい。FileMaker Web Publishing Engineのバージョンは、http://localhost/fmi/xml/fmresultset.xmlやhttp://localhost/fmi/xml/FMPXMLRESULT.xmlへアクセスして返ってくるXMLのPRODUCT NAME="FileMaker Web Publishing Engine"値で確認可能だ。このメソッドもgetAPIVersion()同様引数がないので、そのままコールするだけとなる。

fmapi_getminserverversion.php

<?php

include_once('../FileMaker.php');

$data = new FileMaker();

$result = $data->getMinServerVersion();

if (FileMaker::isError($result))
{
    // エラー処理..
    echo 'FileMaker Error Code: ' . $result->getCode();
    echo '<p>'. $result->getMessage() . '</p>';
}
else
{
    // 正常処理..
    echo '<pre>';
    var_dump($result);
    echo '<pre>';
}
?>

このメソッドもFileMaker Serverには接続しないので、FileMaker()の引数は省略した。Webブラウザで確認してみよう。

getMinServerVersion()でAPI for PHPライブラリが動作するFileMaker Web Publishing Engineの最小バージョンを取得した。XMLにふくまれるFileMaker Web Publishing Engineのバージョンがこのバージョンより古い場合、ライブラリは動作しない

古いAPI for PHPライブラリをあたらしいFileMaker Serverで動作させようとすると「This API requires at least version <FileMaker API for PHPが動作するFileMaker Serverの最小バージョン> of FileMaker Server to run (detected <FileMaker Web Publishing Engineのバージョン>)」というエラーメッセージが返る。一方の環境で動作して一方の環境で動作しないといったトラブルに見舞われた場合、各種サービスが起動しているかの確認ほか、getAPIVersion()・getMinServerVersion()で取得できるバージョンをもとに動作環境を満たしているかをチェックしよう。

現在設定されているプロパティ情報を一括取得 - getProperties

getProperties()では現在設定されているプロパティ情報を配列として取得する。FileMakerへ接続するためのデータベース情報やキャラクタセット・ロケール情報などを一括で取得してくれる便利なメソッドだ。

getPropertiesメソッド (FileMaker.php 164-171行目より)

    /**
     * Get an associative array of property name => property value for
     * all current properties and the values currently in effect. This
     * allows introspection and debugging when necessary.
     *
     * @return array All current properties.
     */
    function getProperties()

このメソッドに引数は存在しない。なお、ここで返る配列はコール時にプロパティが設定されているもののみだ。プロパティ値すべてを取得する動作ではないので注意されたい。

fmapi_getproperties.php

<?php

include_once('../FileMaker.php');

$data = new FileMaker('fmapi_test', 'http://localhost:80', 'admin', 'admin');

$result = $data->getProperties();

if (FileMaker::isError($result))
{
    // エラー処理..
    echo 'FileMaker Error Code: ' . $result->getCode();
    echo '<p>'. $result->getMessage() . '</p>';
}
else
{
    // 正常処理..
    echo '<pre>';
    var_dump($result);
    echo '<pre>';
}
?>

前述のとおりgetProperties()には引数がないので、サンプルコード中でもコールしているだけだ。これをWebブラウザで表示する。

getProperties()での取得結果。FileMakerへ接続するためのデータベース名やユーザIDのほか、キャラクタセット、ロケール情報を取得している

参考: FileMaker()引数を省略した場合のgetProperties()実行結果

文字コード絡みでおかしな動作をしているときや、ホスト情報が正しいかを確認したいときはこのメソッドを使うのが簡単で便利だ。あらかじめコード中に組んでおけば、デバッグ作業時に活躍してくれることだろう。

レイアウト情報を取得 - getLayout

getLayout()では指定したレイアウトの情報を、FileMaker_Layoutオブジェクトとして取得する。

getLayoutメソッド (FileMaker.php 354-361行目より)

    /**
     * Get a Layout object describing $layout.
     *
     * @param string $layout The name of the layout to describe.
     *
     * @return FileMaker_Layout|FileMaker_Error The layout description object or an error.
     */
    function &getLayout($layout)
  • string $layout: 情報を取得したいレイアウト名を指定

わずかな構文でレイアウトオブジェクトを取得できるので、いろいろな応用を効かせることができる。まずは実際に使ってみよう。

fmapi_getlayout.php

<?php

include_once('../FileMaker.php');

$data = new FileMaker('fmapi_test', 'http://localhost:80', 'admin', 'admin');

$result = $data->getLayout('fmapi_list');

if (FileMaker::isError($result))
{
    // エラー処理..
    echo 'FileMaker Error Code: ' . $result->getCode();
    echo '<p>'. $result->getMessage() . '</p>';
}
else
{
    // 正常処理..
    echo '<pre>';
    var_dump($result);
    echo '<pre>';
}
?>

ここではFileMakerの「fmapi_list」レイアウト情報を取得するように記述した。実際にWebブラウザで表示してみよう。

getLayout()で取得したFileMaker_Layoutオブジェクトをvar_dumpした結果。このままではなかなか目的の情報まで辿りつけないので、FileMaker_Layoutクラスに用意されている機能を使って情報を絞り込んでいくことになる

現在$resultにはFileMaker_Layoutオブジェクトが格納されているため、ご覧のとおりそのままvar_dumpするだけでは冗長なデータが表示されるだけで目的の情報まで辿りつくのは一苦労だ。FileMaker_Layoutオブジェクトを扱うにはFileMaker_Layoutクラスに用意されている機能を使うのが一番。ためしに19行目のvar_dump($result);をvar_dump($result->listFields());に置きかえて再度Webブラウザで表示してみよう。

FileMaker_LayoutクラスのlistFields()を使用して、レイアウトに配置されているフィールドのみを抽出

listFields()はFileMaker_Layoutクラスに用意されている機能のひとつで、レイアウトに配置されているフィールドを配列で取得する。オブジェクトをそのままvar_dump()するだけでは見づらかった情報も、もう一段階フィルタリングをおこなうだけで格段に見やすくなる。「102: フィールドが見つかりません」エラーで苦労している場合に役立つ使い方だ。FileMaker_Layoutクラスの使い方については追って紹介していこう。

3回に渡ってFileMakerクラスの機能を、今回はおもにデバッグ時に活躍するメソッドを中心に取りあげた。どれも開発中以外にも、突発的なトラブルに応用が効かせられるものばかりだ。ぜひ使いこなせるようにしておこう。