FileMaker公式テキスト中級編!!!
中級編では、
中級開発者として複数の利用者を想定してシンプルなカスタムAppを作成する
といった内容になります。
全16章です。
前回は、6章『データとフィールド』について学びました。
👉FileMaker 中級編(6章)
今回は、7章『データと索引・格納』についての知識を学びます。
データと索引・格納
フィールド入力後のデータの保存のされ方について取り扱います。
フィールドオプションの設定、「データの格納」タブを使って設定していきます。
- 索引
- グローバル格納
- バイナリーデータの格納(オブジェクトタイプフィールド)
索引
フィールドに保存されているデータには、「索引」を作成できます。
索引は本の最後についている「索引」と同じようなものです。
文言を基準に従って並べて、文言ごとに表示されている場所を整理しておくものです。
※索引が作成されているフィールドを対象に検索を実行すると、索引が作成されていないフィールド を検索するよりも時間が短くなります。
↓↓↓索引は以下で使用されています。
<索引の使用>
- 検索
- 関連(リレーションシップ)
- フィールドのデータを使用した値一覧
- 既存のデータを使用してオートコンプリート
- 入力値の制限におけるユニークなデータ、既存値
索引の内容
3種類あります。
・なし
[ 必要時に索引を自動設定]
・最小限
・すべて
デフォルトでは
[なし] にチェック
[必要時に索引を自動設定] にチェックになっています。
⇨索引に関わる操作が行われた場合、自動で索引を作成してくれます。
⇨その後、設定が [最小化]にチェック へと変更されます。
<索引とファイルサイズ>
索引を行うと、索引のためのデータを作ることになります。
その為、容量が多くなります。データが増えるとより容量が増えていきます。
<索引と更新 >
変更(入力、更新、消去)が起きると索引が作成、更新されます。
もしも、大量レコードのデータ更新をしたとき、カスタムApp の応答速度が遅くなる可能性があります。
同時に索引の処理を行う為です。
インポートでも索引の作成、更新が起きますし、レコード削除も不要になった索引の削除が行われるので影響が出る可能性があります。
フィールドタイプと索引
フィールドタイプによって、作成される索引の内容が異なります。
●テキストタイプフィールド
テキスト、または計算タイプフィールドの計算結果がテキストの設定であるフィールド。
↓↓↓
索引設定で「なし」「最小限」「すべて」の3つから選択できます。
2種類の索引を作成できます。
「値の索引」「単語の索引」
「値の索引」 >>> フィールドに格納されたデータの最初の100 文字までを使用して作成されます。
「単語の索引」 >>> フィールドに格納されたデータからユニークな単語を切り出すものです。検索実行に使用されます。
※[索引設定]で「すべて」を選択すると、値と単語の両方の索引が作成されます。
「最小限」の場合、 値か単語のどちらかの索引が作成されます。(先に使用した方の索引が使われていく)
●数字、日付、時刻、タイムスタンプタイプ
数字、日付、時刻、タイムスタンプのフィールドタイプと、これらの結果タイプが設定されて いる計算タイプフィールド。
↓↓↓
索引設定で「なし」「すべて」の2つから選択できます。
1種類の索引のみ作成できます。
「値の索引」
索引が作れないもの
オブジェクトタイプや、非保存の計算、集計タイプには索引は作成されません。グローバル格納の フィールドにも索引は作成できません。
●非保存の計算タイプフィールド
計算タイプのフィールドは計算式の中で次のものが参照されていると自動的に非保存になります。
・ 関連先のフィールド
・ 集計タイプフィールド
・ 非保存の計算タイプフィールド
・ グローバル格納フィールド
●非保存と検索
索引は持てませんが検索できないわけではありません。検索が実行された時点の計算結果に対して索引を作成し、検索が実行されます(そのために結果が表示されるまで少し時間がかかることがあ ります)。
●索引を作らない設定
[索引設定]を「なし」に選択して[必要時に索引を自動設定]のチェックを オフ にすると、索引が作成されなくなります。
この設定は注意が必要です。例えば、照合フィールドであれば関連が正しく機能しなくなる場合があります。
データの格納
索引の次は、データの格納を解説します。独特の格納設定が用意されています。
グローバル格納
「グローバル」はフィールドのタイプではありません。
特徴のある格納方法です。この特徴をよくわかっていると、様々な活用が可能です。
・データーでは無い。実体が無い。
・リレーションによる関連の無いところにも表示できる。
・検索できない(データでは無い為)
上記では、グローバル格納フィールドのデータが関連が定義されていなくても、どのコンテキストでも表示されることが分かりました。
これはローカル上(自分のパソコン上)のファイルの話でした。
共有とグローバル格納
FileMaker Cloud やFileMaker Server で共有されているファイルの場合、
・あるユーザが、グローバル格納フィールドのデータを書き換えても他のユーザに表示される 内容には反映されない 。
※セッション固有の値である為、共有されない。
グローバル格納フィールドでは、クライアントが接続中に保持されている「セッション」ごとに、 別のデータを扱うことができます。接続(セッション)が終了すると、グローバル格納フィールド のデータは破棄されます。
●グローバル格納フィールドへのデータの保存
グローバル格納フィールドにデータを保存するには、ファイルをローカル上で開いてデータを入力する必要があります。
※毎回ローカルに切り替えるのでは手間がかかる為、スクリプトなどを利用して手軽におこなう設定を考えることが必要になるでしょう。
●どこにつくるか
グローバル格納 フィールドは、どのテーブルにあっても動作は変わりません(一部例外があります。)
専用のテーブルにあると機能の作成作業などで便利です。『あのグローバル格納フィールド、どこにつくったかな……』ということがありません。テーブル名は「ユーティリティ」などわかりやすい名前で作るといいでしょう。
関連とグローバル格納
関連の定義では、下記の場合にグローバル格納フィールドを照合フィールドとして指定できます。
・ 参照元テーブルの照合フィールド
※照合フィールドとして使用する場合、そのテーブルにグローバル格納フィールドが作成されていなければなりません。

※リレーションの線の表示が他と違う。
・ 右側の TOから左側の TO は関連が成立しない
・ 左側の TOから右側の TOの関連は成立する
という意味。
料理TOをコンテキストに、レイアウト場で食材の説明を表示したいと思います。
(にんじん、玉ねぎ、アスパラなどそれぞれの写真や説明)
1、食材をソーステーブルにした「料理_食材|説明」TOを作る。
2、コンテキストである料理TOに「g_食材説明用照合キー」を作成し、リレーションを組む。
3、レイアウト上に「料理_食材|説明」のポータルを作成「写真」「特徴」フィールドを設定。
4、「g_食材説明用照合キー」をレイアウトに表示。
「g_食材説明用照合キー」に食材の主キーに存在するIDを入れると、そのIDの食材の写真、説明が表示される。
これは、保存されるデータではなく、一時的に食材の内容を確認したい場合の参照として利用している。
オブジェクトタイプフィールド
フィールドに、文字列ではなくPDF や画像、Microsoft Excel などのファイルを保存したい場合に使用します。
文字列ではない形式のデータのことを一般的に「バイナリ」データと呼びます。
オブジェクトタイプフィールドは、このバイナリデータを格納するためのものです。
格納できるもの
オブジェクトタイプフィールドに格納可能なファイル形式は大きく分けて次のようになります。
1 フィールドに、1 つのファイル(4GB まで)を保存できます。
・ 画像(ピクチャ)
・ 映像(ビデオ)
・ 音(オーディオ)
・ PDF
・ その他のファイル形式
1、オブジェクトタイプを指定しているフィールドのオプション設定で
2、[フィールドオプション]ダイアログの「データの格納」タブを表示してください。
これまでの「索引」部分が「オブジェクト」に変わっています。
ここで設定していきます。

オブジェクトの保存種類
オブジェクトタイプフィールドのデータ保存は大きく分けて3種類です。
- 参照 (※今後廃止予定の機能なので学習しません)
- 埋め込み
- 外部格納
埋め込み
バイナリーデータをファイル内に保存する方法です。
[フィールドオプション]ダイアログの「データの格納」タブ
[オブジェクト]欄にチェックが何も入ってない状態の場合、埋め込みで保存される。
埋め込み
<メリット>
・考え方がシンプル
・設計が容易
<デメリット>
・カスタムAppのファイルの肥大化
・読み込み遅延の可能性
外部格納
バイナリデータをファイルの外、FileMaker アプリケーションが管理する専用フォルダに保存することです。
外部格納には2種類あります。
- オープン格納
FileMaker アプリケーションの管理フォルダに保存する際に暗号化しません。 - セキュア格納
FileMaker アプリケーションの管理フォルダに保存する際に暗号化します。
外部格納を選択すると、セキュア格納が初期値で選択されています。
オープン格納
<メリット>
・一見すると埋め込みと変わらない
・ファイルの容量増加無し(外部のファイルに保存しているため)
・サムネイル(縮小画像の表示)による分かりやすさ
・インタラクティブコンテンツ ※後の章で学習
<デメリット>
・設計に知識が必要
・FileMaker Go のみでの使用不可 ※回避方法もある
セキュア格納
<メリット>
・オープン格納同様の利点
・暗号化によるセキュリティの安全
<デメリット>
・オープン格納同様の利点
・ファイル名の暗号化によって、どのバイナリーデータ分からなくなる。
外部格納のパス (保存先の設定)
オープン格納

ピンクの下線を引いた部分が、バイナリーデータの保存先までのパスになります。
[データベースの場所] / 7_見積作成管理オープン / 商品情報 /商品画像
[データベースの場所] ・・・データベースが存在しているディレクトリ
7_見積作成管理オープン・・・カスタムAppが存在するディレクトリ
商品情報・・・テーブル名のフォルダ
商品画像・・・フィールド名のフォルダ

このように自動でディレクトリを作成。
フォルダ名も作成してくれる。
セキュア格納

青の下線を引いた部分が、バイナリーデータの保存先までのパスになります。
[データベースの場所] / 7_見積作成管理セキュア /
実際は 7_見積作成管理セキュア の下に Secure フォルダーが作成され、それ以下は暗号化されたフォルダにバイナリーデータが保存されています。
オープン格納のパス
オープン格納のパスのみ変更が可能です。
独自で設定することでバイナリーデータの管理がスムーズになることもあるでしょう。
●基本ディレクトリの設定
1、メニューバー[ファイル][管理][オブジェクト…]
2、「オブジェクトの管理」ダイアログが表示されます。
3、上記左の「格納」タブをクリック
4、左下[作成]をクリック
ここで基本ディレクトリを変更できます。
[データベースの場所] / 7_見積作成管理セキュア /
青字の部分。
フォルダ名を入力[OK]でダイアログを閉じる。
フォルダ名の後ろには必ず / (フォルダを表す)をつけてください。
5、フィールドのオプション設定で、再び「データの格納」を開く
[保存先:]をクリックすると先ほど作成したフォルダが選択できるようになっています。
選択。[OK]
データベース管理を閉じる。
6、「オブジェクトデータの転送」ダイアログが表示
新しいフォルダへのデータ転送を確認される[転送]で実行。
<サムネール>
1、メニューバー[ファイル][管理][オブジェクト…]
2、「オブジェクトの管理」ダイアログが表示されます。
3、上記左の「サムネール」タブをクリック
4、[イメージのサムネイルを生成して保存]には2種類の選択があります。
「永続的な格納」
サムネイルがそのまま保存される
ファイルの増大。サムネイルを開く速さが早くなる。
「一時的な格納」
必要時に作成。データベースを閉じるとサムネイルが削除される。
ファイルの増大無し。サムネイルを開くには多少時間がかかることも。。。
●さらに細かく管理する
現在
[データベースの場所] / 7_見積作成管理オープン / 商品情報 /商品画像
商品画像の中に、ずらーっと画像が並んでいます。
商品番号ごとに保存されるとより分かりやすくなります。
1、フィールドのオプション設定で、再び「データの格納」を開く
[オープン格納]右の[指定..]をクリック
2、計算指定のダイアログが表示
“商品情報/商品画像/” & 商品番号
[OK]で閉じる
すると、商品画像下に「商品番号」で管理されたフォルダが作成され、そこにデータが保存されるようになります。

オブジェクトタイプフィールドのデータ書式
レイアウト上に配置されているオブジェクトタイプフィールドは、レイアウトモードの右パネルのインスペクタで、 表示について2種類から選択できます。
- 静的なコンテンツ(画像など)
- インタラクティブコンテンツ(映像、音、PDF)
※右クリックで表示されるショートカットメニューの内容も変わります。
1、⌘L レイヤーモード
2、フィールドを指定
3、右パネル データタブ 一番下
[データの書式設定]
「次の用途に最適化」
[イメージ(JPEG,PNG,BMPなど)]
[インタラクティブコンテンツ(PDF,MP3など)]
どちらかを選択。
オブジェクトのデータ情報の見方
データそのものを対象にして検索やソートをすることはできません。
別のフィールドを用意してメタデータを格納して検索やソート行う方法があります。
そのために必要な、メタ情報の取得関数を学びます。
GetContainerAttribute( ソースフィールド ; 属性名 )関数
●グループ属性
属性に「General」を指定した際、使用できるものとその結果
属性名 | 返される値 | 戻り値のタイプ |
filename | オブジェクトフィールドに挿入されたファイルの名前 | テキスト |
storageType | オブジェクトフィールドのデータの保存方法 Embedded: 埋め込みExternal (Secure): 外部保存 ( セキュア格納 ) External (Open): 外部保存 ( オープン格納 ) File Reference: ファイル参照Text: テキスト |
テキスト |
MD5 | ファイルに暗号化ハッシュ関数 MD5 を適用した結果 | テキスト |
filesize | オブジェクトフィールドに挿入されたファイルのサイズ ( バイト単位) | 数字 |
internalSize | オブジェクトフィールドが占めるファイル内のサイズ ( バイト単位) | 数字 |
externalSize | 外部に保存されるファイルサイズ ( バイト単位) ファイル参照を使用するファイルのサイズまたはオブジェ クトフィールド内 のすべてのファイルのサイズ合計 ( オープンまたはセキュア格納) |
数字 |
externalFile | オブジェクトフィールドに関連付けられた外部ファイルの 一覧 ( オープンまたはセキュア格納、またはファイル参照を使用するファイル) | テキスト |
グループ属性は、他にも
・ Image(画像)
・ Photo(写真)
・ Audio(音)
・ Bar Codes(バーコード)
・ Signatures(署名)
・ All(各カテゴリの属性名がすべて)
があります。詳しくはヘルプを参照してください。
<データのメタ情報の確認方法>
1、[ツール][データビューア]メニューを選択して「データビューア」を表示します。
2、「監視」タブをクリックします。
3、右下の「+」アイコンをクリックすると[式の編集]ダイアログが表示されます。
次の計算式を入力します(「自動的に評価する」は オン にしてください)
GetContainerAttribute ( 商品情報::商品画像 ; “General” )
4、ダイアログの下に結果が表示されます。
Filename: マッシュルーム.png
Storage Type: Embedded
MD5: D513E9B8ECC0628ABBC6095058215155
File Size: 178249
Internal Size: 178301
External Size: 0
External Files: 0
5、[監視]をクリックします。
「データビューア」に計算式が登録されました。
※属性名にall、filenameなど入れると同じバイナリデータの違うデータを表示できます。
使用例
新規フィールドで「画像名」と作り「計算タイプ」に設定し、
GetContainerAttribute ( 商品情報::商品画像 ; “filename” ) とすれば、バイナリーデータのファイル名をレイアウトに表示することができ、索引も行うことができる。
インポートとエクスポート
オブジェクトタイプフィールドもデータをインポートとエクスポートができます。
インポート
FileMaker のファイル同士であれば、オブジェクトタイプフィールドを含むテーブルからのインポートが可能です。
エクスポート
FileMaker のファイル形式を指定した場合のみ、オブジェクトタイプフィールドをエクスポート対象に指定することが可能です。
※埋め込みや外部格納されているファイルそのものを開くには、内容をエクスポートしてから開く必要があります。
<ショートカットメニューからのエクスポート>
1、「オブジェクト表示」レイアウトの左右どちらかの「商品画像」フィールドをクリックします。
2、右クリックします。
3、「フィールド内容のエクスポート…」を選択します。
4、デスクトップなど、わかりやすい場所を選択して保存します。
※エクスポートしても入力されているデータが消えたわけではありません。コピーがエクスポートされ ます。
その他
文字列以外のデータを取り扱うには、いくつか考えることがあります。
・ 格納方法(外部格納なら、保存先、セキュアかオープンか)
・ レイアウト上のデータ書式設定(表示方法)
・ 入力方法
※オブジェクトタイプフィールドが必要になったら、これらをどのように設定するかについて検討をおこなってください 。
※表示速度
レイアウト上にオブジェクトタイプフィールドをたくさん配置すると、表示速度が遅くなります。
前述したサムネールを設定したり、リスト表示でどの程度オブジェクトタイプフィールドを表示する必要があるか、などを考えます。
以上で7章は終わりです。
次回は8章「画面を設計しよう」について、レイアウトについて学習していきます😆
コメント