前回よりFileMakerレコード情報の取扱いに特化したクラス「FileMaker_Record」について紹介している。今回は前回の続き、おもにレコード情報を取得する残り6つのメソッドについて紹介しよう。

今回紹介する機能

取得できる情報 メソッド名 返り値の型
レコード情報にふくまれている全フィールド名 getFields() array
レイアウト情報 getLayout() object FileMaker_Layout
修正ID getModificationId() string (マニュアル・ソースコードではintegerと表記)
親レコード情報 getParent() object FileMaker_Record
レコードID getRecordId() string (マニュアル・ソースコードではintegerと表記)
関連レコード情報 getRelatedSet() array, object FileMaker_Record

getFieldsメソッド (FileMaker/Record.php 63-75行目より)

/**
 * Return a list of the names of all fields in the record. Just
 * the names are returned; if additional information is required
 * then the Layout object provided by the parent
 * FileMaker_Result object's getLayout() method must be
 * consulted.
 *
 * @return array Field names
 */
function getFields()
{
    return $this->_impl->getFields();
}

レイアウトに配置されているフィールド名すべてを配列で取得する。フィールド名以外の情報を取得したい場合は、FileMaker_ResultオブジェクトからのgetLayout()か後述のFileMaker_RecordからのgetLayout()でFileMaker_Layoutオブジェクトを取得し、同オブジェクトからgetField()またはgetFields()でFileMaker_Fieldオブジェクトを取得。FileMaker_Fieldクラスの機能を使用して各種情報を取得する手順となる。

getLayoutメソッド (FileMaker/Record.php 53-61行目より)

/**
 * Return the layout this record is part of.
 *
 * @return FileMaker_Layout This record's layout.
 */
function &getLayout()
{
    return $this->_impl->getLayout();
}

FileMaker_Layoutオブジェクトを取得する。使い方はFileMaker_ResultクラスやFileMaker_FieldクラスのgetLayout()とまったく同じだ。

getModificationIdメソッド (FileMaker/Record.php 164-172行目より)

/**
 * Get the modification id of this object.
 *
 * @return integer The modification id.
 */
function getModificationId()
{
    return $this->_impl->getModificationId();
}

レコードの修正ID(FileMakerの「Get ( レコード編集回数 )」で取得できる値)を取得する。マニュアルやソースコードのコメント中にはinteger型が返ると書いてあるが、実際にはstring型が返るようだ。

getParentメソッド (FileMaker/Record.php 198-206行目より)

/**
 * If this is a child record, return its parent.
 *
 * @return FileMaker_Record The parent record.
 */
function &getParent()
{
    return $this->_impl->getParent();
}

該当レコードが子(ポータル)レコードの場合に、親レコード情報をFileMaker_Recordオブジェクトで返す。子レコードでない場合はnullが返る。

getRecordIdメソッド (FileMaker/Record.php 154-162行目より)

/**
 * Get the record id of this object.
 *
 * @return string The record id.
 */
function getRecordId()
{
    return $this->_impl->getRecordId();
}

レコードID(FileMakerの「Get ( レコード ID )」で取得できる値)を取得する。これもgetModificationId()同様、マニュアルやソースコードのコメント中にはinteger型が返ると書いてあるが、実際にはstring型が返る。レコードIDと修正IDは排他処理をはじめとし、重要な処理を実装する際に必要となる値だ。使用する場合はキャストしておいた方が無難だろう。

getRelatedSetメソッド (FileMaker/Record.php 174-184行目より)

/**
 * Get any objects in the related set (portal) $relatedSet.
 *
 * @param string $relatedSet The name of the related set (portal) to return records for.
 *
 * @return array An array of FileMaker_Record objects from $relatedSet.
 */
function &getRelatedSet($relatedSet)
{
    return $this->_impl->getRelatedSet($relatedSet);
}
  • string $relatedSet: ポータル名を指定

ポータル内のレコード情報をFileMaker_Recordオブジェクトとして取得する。このメソッドで取得したFileMaker_Recordオブジェクトには親レコードの情報が格納されているので、必要に応じてgetParent()で取り出すことが可能だ。

それでは実際に使ってみよう。getLayout()やgetRecordId()などはこれまでの機能紹介やサンプルにて頻出しているので省略させていただく。ここではややわかりづらいgetParent()とgetRelatedSet()を使用してみる。使用したFileMakerレイアウトは「getRelatedSet_2」。

「getRelatedSet_2」FileMakerレイアウト。このレイアウトをベースに画面を実装する。なお、ポータル内に配置されている赤背景のフィールドはあえて取得せずに、getParent()を使った方法で表示させてみる

fmapi_record_2.php

<?php

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

$data = new FileMaker('fmapi_test', 'http://localhost:80', 'admin', 'admin');
// 検索条件を作成
$findCommand = $data->newFindCommand('getRelatedSet');
$findCommand->setRecordId(1);
$result = $findCommand->execute();

// FileMaker_Resultオブジェクトエラー判定
if (FileMaker::isError($result))
{
    // エラー処理..
    echo 'FileMaker Error Code: ' . $result->getCode();
    echo '<p>'. $result->getMessage() . '</p>';
}
else
{
    // 正常処理
    // FileMaker_Recordオブジェクト取得
    $record = $result->getRecords();
    ?>
    <table border="1">
        <tr>
            <th>ta_serial</th>
            <td><?php echo $record[0]->getField('ta_serial'); ?></td>
        </tr>
        <tr>
            <th>ta_registTimeStamp</th>
            <td><?php echo date('Y/m/d H:i:s', $record[0]->getFieldAsTimestamp('ta_registTimeStamp')); ?></td>
        </tr>
        <tr>
            <th>ta_updateTimeStamp</th>
            <td><?php echo date('Y/m/d H:i:s', $record[0]->getFieldAsTimestamp('ta_updateTimeStamp')); ?></td>
        </tr>
        <tr>
            <th>
                $record-&gt;getParent()
            </th>
            <td><?php var_dump($record[0]->getParent()); ?></td>
        </tr>
    </table>
    <table border="1">
        <tr>
            <th>tb_serial</th>
            <th>tb_registTimeStamp</th>
            <th>tb_updateTimeStamp</th>
            <th>ta_serial<br>(fromParentRecord)</th>
        </tr>
        <?php
        foreach( $record[0]->getRelatedSet('table_a_x_table_b') as $portalRecords )
        {
        ?>
        <tr>
            <td><?php echo $portalRecords->getField('table_a_x_table_b::tb_serial'); ?></td>
            <td><?php echo date('Y/m/d H:i:s', $portalRecords->getFieldAsTimestamp('table_a_x_table_b::tb_registTimeStamp')); ?></td>
            <td><?php echo date('Y/m/d H:i:s', $portalRecords->getFieldAsTimestamp('table_a_x_table_b::tb_updateTimeStamp')); ?></td>
            <td>
                <?php
                // getParent()で親レコード情報を取得
                $parentRecord = $portalRecords->getParent();
                echo $parentRecord->getField('ta_serial');
                unset($parentRecord);
                ?>
            </td>
        </tr>
        <?php
        }
        ?>
    </table>
    <?php
}
?>

このファイルでおこなっていることは次のとおり。

  1. 親レコードにアクセス
  2. ポータル内のレコード情報をgetRelatedSet()で取得
  3. ポータル内レコードでgetParent()を使用し、親レコード情報を取得。親レコードのta_serialを明細行に表示

実際にWebブラウザでアクセスしてみよう。

Webブラウザでfmapi_record_2.phpにアクセス。親レコードでgetParent()をしてもnullが返るが、getRelatedSet()で取得した子レコードでgetParent()をするとしっかり親レコード情報が返っていることがわかる

次回ではFileMaker_Recordクラスのうち、編集結果を保存するタイプの機能について紹介していこう。