こんにちは。リナークのニシザワです。
今回は、「FileMaker Data APIを実行」スクリプトのmetaDataアクションについて解説します。FileMakerを使っていると、データベースのフィールドやレイアウト情報を確認したい場面に直面することがあります。特にデータベース構造を理解しておくことは、システム設計や外部との連携をスムーズに進めるために重要です。しかし、これらの情報を手作業で確認するのは手間がかかります。
そこで活躍するのがmetaDataアクションです。このアクションを活用すれば、データベースのフィールドやレイアウトの情報を簡単に取得し、データ構造を把握することができます。
今回も会員テーブルのデモデータを使用して、metaDataアクションの使い方を具体的に解説していきます。フィールドの種類やレイアウトの情報を取得するプロセスを見ていきましょう。
metaDataアクションとは?
metaDataアクションは、FileMakerのデータベース構造を確認するために非常に便利なツールです。特定のテーブルやレイアウトに含まれるフィールド情報を取得し、どのデータがどのように保存されているのかを可視化できます。特にフィールドの名前、型、レイアウトの構成などを素早く把握できるため、データベース設計や外部システムとの連携に役立ちます。
どんなときに使うか?
データベース構造を把握したいとき
データベースが複雑になればなるほど、どのフィールドがどのテーブルに存在するのかを把握するのは難しくなります。metaDataアクションを使えば、データベースの全体像を簡単に確認できます。
外部システムと連携する前にフィールドの確認が必要なとき
APIなどで外部システムとデータ連携を行う際、正確なフィールド名やデータ型を知る必要があります。metaDataアクションを使えば、こうした情報を簡単に取得できます。
開発者間でデータベースの共有が必要なとき
複数の開発者が同じプロジェクトに参加している場合、データベース構造の把握は重要です。metaDataアクションを使うことで、全員が同じデータ構造を正確に理解できます。
metaDataアクションの基本的な仕組み
metaDataアクションは、データベース内の特定のテーブルやレイアウトのフィールド情報を返します。これにより、各フィールドの名前や型、配置情報などを確認することができ、設計や運用に役立ちます。
今回は、会員テーブルのデモデータを使って、metaDataアクションの具体的な使い方を説明していきます。このテーブルには、IDや名前、住所、メールアドレスなどのフィールドが含まれており、これらの構造を確認するプロセスを見ていきましょう。
ステップ1:レイアウトに表示されているフィールド情報の取得
まずは、「FileMaker Data APIを実行」スクリプトのmetaDataアクションを使って、会員レイアウトに表示されているフィールド情報を取得してみましょう。この情報を取得することで、データがどのように表示され、どのフィールドが画面に配置されているのかを把握できます。
例:レイアウトに表示されているフィールド情報の取得クエリ
以下は、レイアウト::T001_会員.APIに表示されているフィールド情報を取得するためのクエリ例です。このクエリを実行すると、レイアウト::T001_会員.APIに表示されているフィールド情報が返されます。
{
"action" : "metaData",
"layouts" : "T001_会員.API"
}
このクエリでは、レイアウト::T001_会員.APIに表示されているフィールド情報をリクエストしています。データベースにどのフィールドが含まれているか、各フィールドがどのようなデータ型で定義されているかを確認できます。
結果
クエリを実行すると、次のようなフィールドリストが返されます。
{
"messages" :
[
{
"code" : "0",
"message" : "OK"
}
],
"response" :
{
"fieldMetaData" :
[
{
"autoEnter" : false,
"displayType" : "editText",
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "クレジットカード",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"displayType" : "editText",
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "マイナンバー",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"displayType" : "editText",
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "メールアドレス",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"displayType" : "editText",
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "会社名",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"displayType" : "editText",
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "郵便番号",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"displayType" : "editText",
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "住所",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"displayType" : "editText",
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "名",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"displayType" : "editText",
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "名_ひらがな",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"displayType" : "editText",
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "姓",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"displayType" : "editText",
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "姓_ひらがな",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"displayType" : "editText",
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "年齢",
"notEmpty" : false,
"numeric" : true,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "number",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"displayType" : "editText",
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "性別",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"displayType" : "editText",
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "血液型",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"displayType" : "editText",
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "携帯電話番号",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"displayType" : "editText",
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "有効期限",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"displayType" : "editText",
"fourDigitYear" : true,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "生年月日",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "date",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"displayType" : "editText",
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "電話番号",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
}
],
"portalMetaData" : {},
"table" : "T001_会員"
}
}
この結果から、レイアウト::T001_会員.APIに表示されているフィールドが確認できます。例えば、年齢フィールドはnumericがTrueで定義されており、生年月日フィールドはfourDigitYearがTrueとして定義されていることがわかります。
フィールド情報の実務への応用
データの整合性確認:フィールド情報を確認することで、レイアウトに表示されている項目を確認できます。これにより、該当するレイアウトに表示されているフィールドをリストで確認することで、レイアウトにおけるフィールド表示の過不足を確認することができます。
ステップ2:テーブルに設定しているフィールド情報の取得
metaDataアクションを使えば、テーブルに設定しているフィールド情報を取得することができます。テーブルに設定しているフィールド情報を確認することで、テーブルにどのようなフィールドが存在し、それぞれがどのようなデータ型で定義されているかを確認することができます。
例:テーブル情報の取得クエリ
以下は、T001_会員テーブルに関する情報を取得するためのクエリの例です。このクエリを実行することで、T001_会員のレイアウトに配置されているフィールドやその属性が返されます。
{
"action" : "metaData",
"tables" : "T001_会員"
}
このクエリでは、指定されたレイアウト「T001_会員」に関する情報を取得します。この情報を取得することで、テーブル内にどのようなフィールドが存在し、それぞれがどのようなデータ型で定義されているかを確認することができます。
結果
会員テーブルのフィールド情報を取得するためのクエリ例です。このクエリを実行すると、会員テーブルに含まれるすべてのフィールド情報が返されます。
{
"messages" :
[
{
"code" : "0",
"message" : "OK"
}
],
"response" :
{
"baseTable" : "会員",
"fieldMetaData" :
[
{
"autoEnter" : false,
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "姓",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "名",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "姓_ひらがな",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "名_ひらがな",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "年齢",
"notEmpty" : false,
"numeric" : true,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "number",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"fourDigitYear" : true,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "生年月日",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "date",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "性別",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "血液型",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "メールアドレス",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "電話番号",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "携帯電話番号",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "郵便番号",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "住所",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "会社名",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "クレジットカード",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "有効期限",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "マイナンバー",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : true,
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "__id",
"notEmpty" : true,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : false,
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "__z0__",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "number",
"timeOfDay" : false,
"type" : "calculation"
},
{
"autoEnter" : false,
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "__z1__",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "number",
"timeOfDay" : false,
"type" : "calculation"
},
{
"autoEnter" : true,
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "za_accountCreated",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : true,
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "za_accountModified",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "text",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : true,
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "za_timestampCreated",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "timeStamp",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : true,
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "za_timestampModified",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "timeStamp",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : true,
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "za_trigger_modified",
"notEmpty" : false,
"numeric" : false,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "time",
"timeOfDay" : false,
"type" : "normal"
},
{
"autoEnter" : true,
"fourDigitYear" : false,
"global" : false,
"maxCharacters" : 0,
"maxRepeat" : 1,
"name" : "__SEQ__",
"notEmpty" : true,
"numeric" : true,
"repetitionEnd" : 1,
"repetitionStart" : 1,
"result" : "number",
"timeOfDay" : false,
"type" : "normal"
}
],
"portalMetaData" : {}
}
}
この結果から、会員テーブルに含まれるフィールドの名前と型が確認できます。
まとめ:metaDataアクションでデータ構造を可視化しよう
今回は、「FileMaker Data APIを実行」スクリプトのmetaDataアクションについて、具体的な使用方法とその利便性を紹介しました。metaDataアクションを使えば、データベース内のフィールドやレイアウトの情報を取得し、システム設計やデータベースのメンテナンスを効率化することができます。さらに、フィールドのデータ型や属性を確認することで、外部システムとのデータ連携や運用管理をスムーズに行える点も大きなメリットです。
レイアウト情報の取得
レイアウトに表示されるフィールド情報を取得し、ユーザーがどのような画面でデータを確認・入力しているかを理解できるようになりました。これを活用して、画面デザインの最適化やUI改善に役立てることができます。
テーブル情報の取得
会員テーブルに含まれるフィールド名やデータ型を取得し、データベース構造を把握する方法を解説しました。これにより、システム内のデータがどのように管理されているかを可視化しやすくなります。
フィールドの型や属性の確認
各フィールドのデータ型や属性情報を取得し、データ入力時の制約やデータの一貫性を確認する方法を紹介しました。これにより、データベースの信頼性を高め、システム運用がさらに安定します。
metaDataアクションは、FileMakerデータベースの管理において欠かせないツールです。データ構造を把握し、システム設計や運用管理に役立てることで、より効率的にデータベースを活用できるようになります。この記事を参考に、実際のプロジェクトでmetaDataアクションを活用してみてください。
サンプルソリューション
今回の記事で使用したサンプルソリューションになります。
スクリプトや動作などをご確認いただければ幸いです。
※サンプルソリューションは、ZIP形式に圧縮しております。ダウンロード後に解凍してご利用ください。
※サンプルソリューションのご利用により生じた障害等に対する責任はいっさい負いかねますのであらかじめご了承ください。
※動作確認環境:macOS Sonoma 14.6.1 / Claris FileMaker 2024
ファイルをダウンロードしてFileMakerで開くと、カスタムダイアログボックスが表示されます。以下に記載のアカウント名とパスワードを使用してログインしてください。
アカウント名:Administrator
パスワード:UzIXmy5x2Ss50jHK
この記事にご興味を持たれた方は、こちらの記事もおすすめです。