フィールド情報の取得に特化した「FileMaker_Field」クラスについての概要を紹介した。まずは手はじめにget○○といった取りあつかう情報がすくなく、使い方が簡単なところから順に取りあげていこう。

レイアウト名・フィールドに関する設定情報の取得

まずは手はじめに、取りあつかう情報がすくなく簡単に使えるメソッドから紹介していこう。今回取りあげるのは次の8メソッドだ。

取得できる情報 メソッド名
レイアウト情報 getLayout()
フィールド名 getName()
繰り返し数 getRepetitionCount()
フィールドタイプ getResult(), getType()
フィールドコントロールスタイル/表示形式 getStyleType()
入力値の自動化が設定されているか否か isAutoEntered()
グローバルフィールドか否か isGlobal()

どれも引数が不要で、さくっと使えるものばかり。それでは順番にレイアウト情報の取得・フィールド名を取得するところからはじめてみよう。

getLayoutメソッド (FileMaker/Field.php 58-66行目より)

/**
 * Return the FileMaker_Layout object that contains this field.
 *
 * @return FileMaker_Layout Layout object.
 */
function &getLayout()
{
    return $layout =& $this->_impl->getLayout();
}

getNameメソッド (FileMaker/Field.php 48-56行目より)

/**
 * Return the name of this field.
 *
 * @return string Field name.
 */
function getName()
{
    return $this->_impl->getName();
}

結果はそれぞれgetLayout()ではFileMaker_Layoutオブジェクト、getName()では文字列型で返る。なおFileMaker_Fieldオブジェクトはコンストラクタをのぞくと、FileMaker_LayoutクラスのgetField()/getFields()か、FileMaker_RelatedSetクラスのgetField()/getFields()からしか取得できない。このためgetLayout()は、FileMaker_FieldオブジェクトをFileMaker_RelatedSetオブジェクト経由で取得した場合に使用することになるだろう。

続けて、フィールドに関する設定情報の取得するgetRepetitionCount(), getResult(), getType(), getStyleType()についてだ。

getRepetitionCountメソッド (FileMaker/Field.php 89-97行目より)

/**
 * Return the maximum number of repetitions for this field.
 *
 * @return integer Maximum repetitions of this field.
 */
function getRepetitionCount()
{
    return $this->_impl->getRepetitionCount();
}

getRepetitionCount()ではデータベースの管理>フィールドオプションで設定した「最大繰り返し数」・または計算フィールドの繰り返し数を取得し、数値型として返す。FileMakerのレイアウト上で設定する「表示する繰り返し」とは別物なので注意したい。

getResultメソッド (FileMaker/Field.php 209-218行目より)

/**
 * Get the result type of this field - for example, 'text' or
 * 'number'.
 *
 * @return string Result type.
 */
function getResult()
{
    return $this->_impl->getResult();
}

getResultではフィールドのタイプ(計算フィールドの計算結果)を取得し、文字列型として返す。取得できるのは「テキスト(text)」「数字(number)」「日付(date)」「時刻(time)」「タイムスタンプ(timestamp)」「オブジェクト(container)」の6種類。

getTypeメソッド (FileMaker/Field.php 220-229行目より)

/**
 * Returns the type of this field. Examples: 'normal',
 * 'calculation'.
 *
 * @return string Type.
 */
function getType()
{
    return $this->_impl->getType();
}

getType()ではフィールドのタイプが「計算(calculation)」「集計(summary)」「それ以外(normal)」かを取得し、文字列型として返す。

getStyleTypeメソッド (FileMaker/Field.php 245-254行目より)

/**
 * Loads FMPXMLLAYOUT data. Returns the type of this field - for
 * example, 'EDITTEXT'.
 *
 * @return string Style type.
 */
function getStyleType()
{
    return $this->_impl->getStyleType();
}

getStyleType()ではFileMakerのレイアウト上で設定したコントロールスタイル>表示形式を取得し、文字列型として返す。取得できるのは「編集ボックス(EDITTEXT)」「ドロップダウンリスト(POPUPLIST)」「ポップアップメニュー(POPUPMENU)」「チェックボックスセット(CHECKBOX)」「ラジオボタンセット(RADIOBUTTONS)」「ドロップダウンカレンダー(CALENDAR)」の6種類。

getResult()ではセパレータで区切られた上側のフィールドタイプ・計算フィールドの計算結果を、getType()では下側のフィールドタイプを取得する

getStyleType()ではフィールド/コントロールの設定のコントロールスタイル>表示形式の値を取得する

最後に、指定したフィールドに「入力値の自動化が設定されているか」「グローバルフィールドか」を判定するisAutoEntered(), isGlobal()についてだ。

isAutoEnteredメソッド (FileMaker/Field.php 68-77行目より)

/**
 * Return TRUE if this field is auto-entered and FALSE if it is
 * set manually.
 *
 * @return boolean Auto-entered status of this field.
 */
function isAutoEntered()
{
    return $this->_impl->isAutoEntered();
}

isGlobalメソッド (FileMaker/Field.php 79-87行目より)

/**
 * Return TRUE if this field is global and FALSE if it is not.
 *
 * @return boolean Global status of this field.
 */
function isGlobal()
{
    return $this->_impl->isGlobal();
}

結果は2つともブール型として返る。それぞれ自動入力が設定/グローバルフィールドならばtrueが返り、設定されていない/グローバルではなければfalseが返る。「isAutoEntered()の結果がtrueならば、編集処理の対象から外す」といった処理を作成することが可能だ。

それでは紹介したメソッドのうち、getLayout()以外の実行結果を確認してみよう。さまざまなタイプのフィールド・コントロールスタイルを設定したFileMakerレイアウト「fmapi_field_test」を用意し、これらを使用したコードを書いてみる。

FileMakerレイアウト「fmapi_field_test」。さまざまなタイプのフィールドを配置し、コントロールスタイルを設定している

fmapi_field.php

<?php

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

$data = new FileMaker('fmapi_test', 'http://localhost:80', 'admin', 'admin');
// レイアウトオブジェクトを取得
$layoutObj = $data->getLayout('fmapi_field_test');
// レイアウトオブジェクトエラー判定
if (FileMaker::isError($layoutObj))
{
    // エラー処理..
    echo 'FileMaker Error Code: ' . $layoutObj->getCode();
    echo '<p>'. $layoutObj->getMessage() . '</p>';
}
else
{
    // 正常処理
    ?>
    <table border="1">
        <tr>
            <th>getName</th>
            <th>getRepetitionCount</th>
            <th>getResult</th>
            <th>getType</th>
            <th>getStyleType</th>
            <th>isAutoEntered</th>
            <th>isGlobal</th>
        </tr>
        <?php
        foreach ( $layoutObj->getFields() as $fieldObj )
        {
        ?>
        <tr>
            <td valign="top"><pre><?php var_dump($fieldObj->getName()); ?></pre></td>
            <td valign="top"><pre><?php var_dump($fieldObj->getRepetitionCount()); ?></pre></td>
            <td valign="top"><pre><?php var_dump($fieldObj->getResult()); ?></pre></td>
            <td valign="top"><pre><?php var_dump($fieldObj->getType()); ?></pre></td>
            <td valign="top"><pre><?php var_dump($fieldObj->getStyleType()); ?></pre></td>
            <td valign="top"><pre><?php var_dump($fieldObj->isAutoEntered()); ?></pre></td>
            <td valign="top"><pre><?php var_dump($fieldObj->isGlobal()); ?></pre></td>
        </tr>
        <?php
        }
        ?>
    </table>
    <?php
}

?>

このスクリプトでは「fmapi_field_test」レイアウトにアクセスし、配置されているフィールドすべての情報を取得後、テーブルとして表示する。実際にWebブラウザで確認してみよう。

fmapi_field.phpの実行結果。レイアウトに配置したフィールドの名前から各種設定情報まで、簡単に取得できていることがわかる

フィールド情報を配列として取得しループ処理で加工すれば、レコード登録画面や編集画面も簡単に自動化が可能となる。簡単なデバッグ用途から画面作成の自動化まで、デベロッパの応用次第で幅広く活躍してくれそうだ。