はじめに

定義ファイルに記述するIM_Entry関数の引数に、データベースに関する情報を与えておきます。4つの引数があり、うち3つは配列を指定します。配列の内容を記載します。以下の表で、次元の列にキーワードがあれば、「'キーワード' => '値' 」で該当する値を与えます。次元が「(なし)」というのは、その次元では、単に要素が並ぶということを意味します。サンプルファイルの例などを見ながら解読してください。

第1引数、テーブルとそれに関連した属性

テーブルと、テーブル間を関連づけるフィールドを指定します。この引数の第2次元にまとめられた1つの配列の設定を「コンテキスト定義」と呼ぶことにします。つまり、name、keyなどのキーを持った連想配列の1つ1つがコンテキスト定義です。もちろん、コンテキスト定義は複数を定義することが可能です。ここでのnameが、ターゲット指定のテーブル名で使用します。テーブル間の結合における相手のテーブル名がないと思われるかもしれませんが、相手のテーブル名は、ページファイル側の記述で自動的に決まってきます。

[第1引数, コンテキスト定義]
コンテキスト名とエンティティ情報

キー
'name' テーブル名[必須]。'view'がなければすべての処理を適用する「テーブル名」、'view'があれば書き込みや更新処理のときの「テーブル名」
'table' 指定すると更新時の「テーブル名」に使用される。指定しないと、nameで指定した名前のテーブルに書き込む
'view' 指定すると読み込みのときの「テーブル名」に使用される。指定しないと、nameで指定した名前のテーブルから読み込む
'source' 1ページに複数のコンテキストが展開されている時、あるコンテキストでのレコード作成や削除結果を、同一のテーブルから構成された別のコンテキストにも反映させるための設定。この名前が同じコンテキスト群では、レコードの作成や削除結果が同期される。指定がなければ、table、view、nameの順にさかのぼって設定を得る。ビューをviewキーで指定したときにその主要テーブルを指定するような場合に使用する。
'key' レコードを特定するためのキーフィールドの名前を指定する。表示のみの場合には不要だが、更新処理にはこのフィールドは必要。単一のフィールドの指定しかできない。FileMaker Serverでは「-recid」と指定することで、システムが管理するレコード識別のための値を利用できる。
'sequence' PostgreSQLにおいて、レコード追加を行うためには、シーケンスを利用してキーフィールドに連番を設定する必要がある。そのシーケンス名をここで指定をする。

[第1引数, コンテキスト定義]
レコード繰り返しとページング

キー
'records' 1ページに何レコード分表示するか。最初のテーブルの設定のみ有効。未指定の場合は100000000、つまり十分に大きな値
'maxrecords' 1ページ内の最大表示レコード数。INTERMediator.pagedSizeの値を調整することで1ページ内の表示レコード数を変更できるが、その際にこのキーで指定した値を超えて表示することはできない。未指定の場合は100000000、つまり十分に大きな値
'paging' recordsで指定したレコード数ずつ表示するとき、前後のページに移動するナビゲーションを表示する場合、trueを指定する。既定値はfalse
'cache' trueを指定するとキャッシュが機能する(Ver.3.0より順次組み込みのため、機能制限に注意)
'soft-delete' コンテキストに対する削除において、論理削除を行う。検索時には、論理的に削除されたレコードは検索対象外とする。値をtrueにすると、レコード削除時に、deleteフィールドに1を代入する。deleteフィールドのタイプは数値を想定している。delete以外のフィールドを利用したい場合には、値をフィールド名にする。

[第1引数, コンテキスト定義]
リレーションシップ、検索条件、並べ替え、初期値

配列指定
キー インデックス 下位のキー
'relation' (なし) 'foreign-key' リレーションの外部キーフィールド名(この設定は事実上データ取り出し時のみ有効)
'join-field' 外部キーフィールドに対応するテーブル側の関連フィールド
'operator' 外部キーフィールドと対応するフィールドの比較演算子
'portal' FileMaker Serverを利用しているときに、このコンテキストのデータを、親コンテキストのレイアウト上にあるポータルから取得する場合にtrueを値に指定する
'query' (なし) 'field' 検索条件のフィールド名(この設定はデータ取り出し時のみ有効)
'value' 検索値
'operator' 検索値の解釈
'sort' (なし) 'field' ソート条件のフィールド名(この設定はデータ取り出し時のみ有効)
'direction' 昇順か降順か
'default-values' (なし) 'field' 新規レコード作成時の初期値指定のフィールド名
'value' 初期値

[第1引数, コンテキスト定義]
計算プロパティ

配列指定
キー インデックス 下位のキー
'calculation' (なし) 'field' 計算結果を表示するリンクノードのターゲット指定。コンテキスト名は現在のコンテキスト名を使うため指定しない。属性やスタイル等の指定は可能
'expression' 計算式。同一コンテキストのフィールド参照はフィールド名のみ記述する。他のコンテキストのフィールド参照は「コンテキスト名@フィールド名」の形式で記述する。

[第1引数, コンテキスト定義]
Post Onlyモードの動作定義

キー
'post-reconstruct' trueなら、入力型フォームにおいて、登録ボタンを押した後にページの再合成を行う。post-dismiss-messageが指定されていれば、4秒後待って再合成する。falseあるいは指定なしなら何もしない
'post-dismiss-message' 入力型フォームにおいて、登録ボタンを押した後に、ボタンを消してここに記述したメッセージの文字列を表示する。文字列はSPANタグでclass属性が「IM_POSTMESSAGE」となる。
'post-move-url' 入力型フォームにおいて、登録ボタンを押した後に、ここで指定したURLにページを移動させる。指定しない場合にはページ移動はない。post-dismiss-messageが指定されていれば、4秒後に移動する

[第1引数, コンテキスト定義]
ユーザーインタフェース生成

配列指定
キー 下位のキー
'repeat-control' 繰り返し表示する部分に、レコードの追加や削除の機能を追加する。値には以下の文字列を与える。confirmがあれば確認ダイアログが表示される。複数を指定する場合はそれぞれの文字列を空白で区切って書き並べる。
使用できるキーワード動作説明
insertレコード追加ボタンレコード追加ボタンを、レコードリストの直下、あるいは1レコード単位の場合はページネーションバーに表示する
insert-topレコード追加ボタン同上だが、レコードリストの直上にボタンが表示される
confirm-insertレコード追加ボタンボタンを押すと、本当にレコード作成して良いかをダイアログボックスでたずねる
confirm-insert-topレコード追加ボタン同上、かつボタンはリストの場合その直上に配置
deleteレコード削除ボタンレコード削除ボタンをリピータの最後の要素に追加する
confirm-deleteレコード削除ボタンボタンを押すと、本当にレコード削除して良いかをダイアログボックスでたずねる
copyレコード複製ボタンレコード複製ボタンをリピータの最後の要素に追加する
confirm-copyレコード複製ボタンボタンを押すと、本当にレコード複製して良いかをダイアログボックスでたずねる
copy-xxxxレコード複製ボタンxxxxには関連レコードのコンテキストを指定する。これにより、関連レコード群も外部キーを考慮して複製される
confirm-copy-xxxxレコード複製ボタンボタンを押すと、本当にレコード複製して良いかをダイアログボックスでたずねる
'button-names' 'insert' repeat-controlに「insert」を指定したときに追加されるボタンのボタン名
'delete' repeat-controlに「delete」を指定したときに追加されるボタンのボタン名
'copy' repeat-controlに「copy」を指定したときに追加されるボタンのボタン名
'navi-detail' navi-controlに「master」を指定したときに追加されるボタンのボタン名。マスター側に追加されるディテール側へ移動するボタンの名前
'navi-back' navi-controlに「detail」を指定したときに追加されるボタンのボタン名。ディテール側に追加されるマスター側へ移動するボタンの名前

[第1引数, コンテキスト定義]
バリデーション

配列指定
キー インデックス 下位のキー
'validation' (なし) 'field' データ確認を行うフィールド名(バリデーションはVer.2.1以降で実装)
'rule' 確認処理。JavaScriptの式を記述する。コンポーネントの値は変数value、ノードへの参照は変数targetに入っているものとして、式を組み立てることができる。式の結果がtrueならそのまま処理を進めるが、falseならmessageの文字列をダイアログボックスで表示して、コンポーネントの値を元に戻す
'message' 正しくない場合に表示するメッセージ(ruleがfalseのときに表示される)
'notify' 'inline'なら直後、'end-of-sibling'なら兄弟ノードの最後にメッセージのテキストを追加する。このとき、ノードのクラス名は'_im_alertmessage'となる。これ以外の表記あるいは、notifyを省略すると、ダイアログボックスで表示される。

[第1引数, コンテキスト定義]
合成処理やデータベース処理の拡張

キー
'post-repeater' ページ合成時に1つのリピータの処理が終わった後に呼び出される関数名を記述する。その関数自体は、INTERMediatorOnPageオブジェクトのメソッドとして定義する。
'post-enclosure' ページ合成時に1つのエンクロージャーの処理が終わった後に呼び出される関数名を記述する。その関数自体は、INTERMediatorOnPageオブジェクトのメソッドとして定義する。
'extending-class' データアクセス時にサーバー側で処理プログラムを追加するクラスのクラス名を指定する

[第1引数, コンテキスト定義]
スクリプト実行

配列指定
キー インデックス 下位のキー
'script' (なし) 'db-operation' データベース処理の前後に行う処理の指定。スクリプトを実行する場面で、値は'read', 'update', 'create', 'delete'のいずれか
'situation' スクリプトの実行を行うタイミングで、'pre', 'presort', 'post'のいずれかの値を取る('presort'はFileMaker Serverのみサポート)
'definition' MySQLは指定したSQLコマンドを実行、FileMaker Serverはスクリプト名を指定。(FileMaker Serverでforeign-keyの指定されたテーブルの読み込み時の設定はすべて無視される)
'parameter' FileMaker Serverを利用しているときにスクリプト引数を指定する。バージョン5.4以降で利用可能。

[第1引数, コンテキスト定義]
FileMakerでのグローバル変数設定

配列指定
キー インデックス 下位のキー
'global' (なし) 'db-operation' 設定する場面で、値は 'read', 'update', 'create', 'delete'のいずれか(グローバルの設定はFileMaker Serverのみ)
'field' グローバルフィールド名
'value' グローバルフィールドに与える値

[第1引数, コンテキスト定義]
認証・認可とセキュリティ

配列指定
キー インデックス 下位のキー
'authentication' 'media-handling' メディアアクセス時の認証を通すためのクッキー情報を、このコンテキストの読み出し時にクライアントに送り込む。必要なときに値にtrueを指定する
'all' 'user' すべての操作について、このコンテキストを利用可能なユーザを配列で指定。この記述がなければすべての認証ユーザにアクセス権
'group' すべての操作について、このコンテキストを利用可能なグループを配列で指定。この記述がなければすべてのグループにアクセス権
'target' 省略あるいは'table'なら、テーブル全体に対する権限の設定、'field-user'あるいは'field-group'ならレコードごとに権限を指定できる
'field' 'target'に'field-user'あるいは'field-group'に指定した場合、ユーザ名やグループ名を指定するフィールドのフィールド名
'read' (allと同様) クエリーの操作について、このコンテキストに関する設定を行う
'update' (allと同様) 更新の操作について、このコンテキストに関する設定を行う
'create' (allと同様) 新規レコード作成の操作について、このコンテキストに関する設定を行う
'delete' (allと同様) レコード削除の操作について、このコンテキストに関する設定を行う。ただし、targetとfieldは無視してテーブルに対する設定のみを利用
'protect-writing' この配列に指定したフィールド名に対する更新処理を禁止する
'protect-reading' この配列に指定したフィールド名から読み出したデータをクライアントに送る事を禁止する

[第1引数, コンテキスト定義]
ファイルアップロード

配列指定
キー インデックス 下位のキー
'file-upload' (なし) 'field' コンテキスト内のここで指定したフィールドに対してファイルアップロードのコンポーネントが設定されている場合
'context' この指定があると、指定したコンテキストのpathフィールドにファイルパスを値として指定する新規レコードを作成する。こちらのコンテキストとのリレーションが設定されていれば正しく外部キーが設定される
'container' この指定があると、オブジェクトフィールドにファイルを格納する(FileMaker Serverのみ)。INTER-Mediator 5.1以降で利用可能であり、FileMaker Serverのバージョン13以降が必要、かつデータベースのフィールドオプションにおいて[入力値の自動化]オプションをあらかじめ設定しておく必要があります。 詳細はファイルのアップロードコンポーネント の「FileMakerのオブジェクトフィールドにファイルをアップロードする」を参照

[第1引数, コンテキスト定義]
データベース接続設定

キー
'db-class' このコンテキストで使うデータアクセスクラスの名前(例:PDO、FileMaker_FX、FileMaker_DataAPI)この指定がなければ、IM_Entry関数の第3引数あるいはparams.phpの値が使われます。以下、'datatype'まで同様
'dsn' [PDO]このコンテキストで使う接続時に指定するDSN
'option' [PDO]このコンテキストで使うオプション指定。array型で指定
'database' [FileMaker_FX][FileMaker_DataAPI]このコンテキストで使うデータベース名
'user' [PDO][FileMaker_FX][FileMaker_DataAPI]このコンテキストで使うユーザ名
'password' [PDO][FileMaker_FX][FileMaker_DataAPI]このコンテキストで使うパスワード
'server' [FileMaker_FX][FileMaker_DataAPI]このコンテキストで使うサーバーアドレス(例:127.0.0.1)
'port' [FileMaker_FX][FileMaker_DataAPI]このコンテキストで使うサーバーポート(例:80)
'protocol' [FileMaker_FX][FileMaker_DataAPI]このコンテキストで使うサーバーへの接続プロトコル(例:HTTP)
'datatype' [FileMaker_FX]このコンテキストで使うサーバーがサポートするデータ形式(例:FMPro12)

[第1引数, コンテキスト定義]
メール送信

配列指定
キー インデックス 下位のキー
'send-mail' 'read' コンテキストに対してレコードの取り出しを行った後にメールを送信する。
'from' 送信者名や送信者アドレスが含まれるフィールド名
'to' 送信先が含まれるフィールド名
'cc' Cc先が含まれるフィールド名
'bcc' Bcc先が含まれるフィールド名
'subject' 件名が含まれるフィールド名
'body' メール本文が含まれるフィールド名
'from-constant' 送信者やアドレスを文字列で指定
'to-constant' 送信先を文字列で指定
'cc-constant' Cc先を文字列で指定
'bcc-constant' Bcc先を文字列で指定
'subject-constant' 件名を文字列で指定
'body-constant' 本文を文字列で指定
'body-template' 本文のテンプレートとなるファイルのファイル名
'body-fields' テンプレートに差し込むフィールドの順序をカンマで区切る
'f-option' UNIXでSMTPサーバを経由しない場合にtrueを指定すると、fromの指定が有効
'body-wrap' 右端の折り返しのバイト数
'update' コンテキストに対してレコードの更新処理を行った後にメールを送信する。第3次元については、readと同様。
'create' コンテキストに対して新たなレコードを作るアクションを起こした後にメールを送信する。第3次元については、readと同様。

[第1引数, コンテキスト定義]
複雑なSQL文によるビュー生成

キー
'aggregation-select' PDOのデータベースクラスのみで利用できる。これらの3つの設定と、sort、queryの設定を加えて、集計処理などのSQLを構成する。このコンテキストは読み出しのみとなる。
'aggregation-from'
'aggregation-group-by'

認証についは別項目「ユーザ認証とアクセス権の動作について」も参照してください。

'relation'、'query'、'sort'、'script'については、配列の配列を指定します。サンプルのソース等で具体例を見てください。

それぞれのパラメータの解釈は、データベースドライバによって異なる場合があります。

第2引数、オプション設定

こちらは、「定義ファイルのオプション設定」と呼ぶことにします。該当する設定がparams.phpでも設定できる場合はその変数名も記載しています。その変数名でparams.phpを検索すれば、コメント等で記述例があるはずです。

[第2引数, オプション設定]
各種動作設定

キー
'separator' テーブル名とフィールド名を区切る文字(既定値は「@」)
'transaction' 編集可能コンポーネントの変更時の書き戻しについて、'none'なら行わない、'automatic'ならchangeイベントが発生するたびに書き戻す。省略するとautomaticが指定されたものとみなす
'media-root-dir' メディアアクセスに対して定義ファイルにリダイレクトの設定をWebサーバーで行う。そうすれば、この設定に指定したディレクトリにある画像などのメディアファイルを読み出す。
'credit-including' INTER-Mediatorのクレジットをページ末尾に表示するのが通常の動作であるが、このキーにHTMLのid属性値を指定すると、そのタグ要素の内部の末尾にクレジットを付加する。他に末尾に付与する仕組みを使うような場合の回避策

[第2引数, オプション設定]
アプリケーションのロカール

キー params.phpで変数名
'app-locale' アプリケーション全体の言語およびカントリーコード(例えば、en、ja_JP)。これがあれば、ブラウザーのカントリーコードよりも優先される $appLocale
'app-currency' 通貨に関する国コード(例えば、US、JP)。指定なしの場合、app-localeの指定を利用 $appCurrency

[第2引数, オプション設定]
テーマ

キー params.phpで変数名
'theme' 使用するテーマ名。省略するとdefaultを使用。INTER-Mediatorに付属するテーマセットは他に最小限のleast、以前のバージョンの初期設定に近いthosedaysがある $themeName

[第2引数, オプション設定]
ローカルコンテキストの初期値

配列指定 params.phpで変数名
第1次元 第2次元 第3次元
'local-context' (なし) 'key' ローカルコンテキストのキー(_@以降のキーワード) $valuesForLocalContext
'value' コンテキストの初期値

[第2引数, オプション設定]
エイリアス

配列指定
第1次元 第2次元 第3次元
'aliases' エイリアス名 置き換える定義 エイリアスに対応する値。この値は正しい1つのターゲット指定である必要がある。この指定があれば、ターゲット指定の代わりに、エイリアス名をリンクノードに指定できる。

[第2引数, オプション設定]
フォーマッター(サーバーサイドでの値変換)

配列指定
第1次元 第2次元 第3次元
'formatter' (なし) 'field' データコンバータを適用するフィールド名
'converter-class' データコンバータクラス名
'parameter' コンバータクラスに与えるパラメータ

[第2引数, オプション設定]
ブラウザの判定

配列指定 params.phpで変数名
第1次元 第2次元 第3次元
'browser-compatibility' (なし) 文字列 キーにブラウザを示す文字列(safari, msieなど)を指定し、値にはバージョン番号を指定する。バージョン番号の後に+や-をつけて、以上あるいは以下をのバージョンを示すことができる $browserCompatibility
配列 要素にはキーにOSを指定し、その要素に前の行に説明のあるバージョン番号とプラス/マイナス記号を指定する。

[第2引数, オプション設定]
認証・認可

配列指定 params.phpで変数名
第1次元 第2次元
'authentication' 'user' 利用可能なユーザを配列で指定。この記述がなければすべてのユーザにアクセス権。データベースのネイティブユーザで認証する場合には、値を「array('database_native')」と指定する。
'group' 利用可能なグループを配列で指定。この記述がなければすべてのグループにアクセス権
'user-table' ユーザ情報が保存されているテーブル名。省略すると'authuser'
'group-table' ユーザ情報が保存されているテーブル名。省略すると'authgroup'
'corresponding-table' ユーザとグループが対応づけられている情報が保存されているテーブル名。省略すると'authcor'
'challenge-table' チャレンジが保存されているテーブル名。省略すると'issuedhash'
'authexpired' 認証が自動的に継続される時間を秒数で指定する。省略すると'3600'(1時間)。バージョン4.4以降では、0を指定すると有効期限はWebブラウザー終了時まで
'storing' 認証情報のクライアントへの保存を指定。'cookie'ならPathを指定しないでクッキーに保存(既定値)、'cookie-domainwide'ならドメイン全体で共有できるようにクッキーに保存、'session-storage'ならブラウザのセッションストレージに保存、'none'ならクッキーに保存しない
'realm' 認証領域名。ログインパネルの上部に表示される。また、認証情報を記憶するクッキーの名称の末尾に付与される。
'email-as-username' trueを指定すると、authuserテーブルのusernameと同時にemailフィールドも検索する。つまり、電子メールアドレスでの認証が可能になる。既定値はfalse $emailAsAliasOfUserName
'issuedhash-dsn' issuedhashテーブルに対するDSNを指定する。たとえば、FileMakerデータベースで、issuedhashテーブルをSQLiteで運用する場合に使える $issuedHashDSN
'password-policy' パスワード変更時に適用されるパスワードポリシー。useAlphabet useNumber useUpper useLower usePunctuation length(10) notUserNameの各単語をスペースで区切って指定する。useAlphabetはアルファベットを使用していないといけなくする。その他、同様に単語から意味が分かるはずである。length(10)はパスワードは10文字以上にする必要があるという意味で、( ) 内には任意の数値を記述できる。 $passwordPolicy
'media-context' メディアアクセスに認証を設定するとき、ここで指定したコンテキストにアクセスしたときにメディアの認証用のトークンをクライアントに届ける。このトークンをクライアントが持つ事で、メディアプロキシが認証される

[第2引数, オプション設定]
Pusherの設定

配列指定 params.phpで変数名
第1次元 第2次元
'pusher' 'app_id' Pusherで定義したAppのapp_id $pusherParameters
'key' Pusherで定義したAppのkey
'secret' Pusherで定義したAppのsecret

[第2引数, オプション設定]
メール送信サーバー

配列指定 params.phpで変数名
第1次元 第2次元
'smtp' 'server' メール送信時に使用するサーバのホスト $sendMailSMTP
'port' メール送信時に使用するサーバのポート
'username' メール送信時に認証で使用するユーザー名
'password' メール送信時に認証で使用するパスワード

認証についは別項目「ユーザ認証とアクセス権の動作について」も参照してください。

browser-compatibilityは、params.phpファイルでも指定できますが、ここに指定をした方が有効になります。この指定に含まれているブラウザで通常処理を行い、含まれていないブラウザでは処理を行わないようにします。

以前「trigger」というキーワードを書いていましたが、この設定は不要で、普通にノードに対してJavaScriptの記述をすればいいので、設定としては組み込まないこととします。

第3引数、データベースへの接続情報

データベースヘの接続情報を設定します。この設定を「定義ファイルのデータベース接続設定」と呼ぶことにします。なお、INTER-Mediator.phpと同じフォルダに入れておく「params.php」でも、データベース接続に関する指定が可能です。ページごとに接続情報が違うなら、この引数に指定してもいいのですが、たくさんのファイルで同じ設定ならparams.phpで指定をしてもいいでしょう。さらに、IM_Entry関数の第一パラーメータで指定する配列のコンテキストに対しても設定できます。params.php内で指定できる変数についてもまとめておきます。なお、必要な情報は、データベースクラスごとに異なります。以下の表には、値を必要とするクラスも記述してあります。

インデックス params.phpで変数名
'db-class' データアクセスクラスの名前(例:PDO、FileMaker_FX、FileMaker_DataAPI) $dbClass
'dsn' [PDO]接続時に指定するDSN $dbDSN
'option' [PDO]オプション指定。array型で指定 $dbOption
'database' [FileMaker_FX][FileMaker_DataAPI]データベース名 $dbDatabase
'user' [PDO][FileMaker_FX][FileMaker_DataAPI]ユーザ名 $dbUser
'password' [PDO][FileMaker_FX][FileMaker_DataAPI]パスワード $dbPassword
'server' [FileMaker_FX][FileMaker_DataAPI]サーバーアドレス(例:127.0.0.1) $dbServer
'port' [FileMaker_FX]サーバーポート(例:80) $dbPort
'protocol' [FileMaker_FX]サーバーへの接続プロトコル(例:HTTP) $dbProtocol
'datatype' [FileMaker_FX]サーバーがサポートするデータ形式(例:FMPro12) $dbDataType

第4引数、デバッグ情報の表示

数値かfalseかを指定します。false以外だと、デバッグ情報をページの最初に表示します。1ないしは2を指定でき、2の方が多くの情報を出します。