FileMaker小ネタ集

1Reading Time

リレーションされている関連テーブルからフィールドの値を取得する方法

いくつか方法があります。

  • ルックアップ値で取得する方法
  • フィールドのタイプで「計算」(計算フィールド)に設定する方法
  • フィールドのオプション「入力値の自動化」で「計算値」で設定する方法
    「フィールドに既存値が存在する場合は置き換えない」にチェックが入っていると、自テーブルのフィールドの値を変更しても内容が変わらない。

ルックアップ値はあまり使われなくなってきています。

計算フィールドは、「非保存」となり、毎回計算が行われます。したがって、リレーション先のフィールドが変更された場合は自動的にこの計算フィールドの値も変更されます。また「非保存」のフィールドは索引が利用できないため、レコードが増えると処理時間も増えることになります。

あるデータの入力を開始したときに、他のオブジェクトを変更できないようにする方法

スクリプトでオブジェクトのプロパティを変更することはできないので、そのオブジェクトに計算式によって非表示にする方法を使う。

①入力制御できないようにしたいオブジェクトを選択し、インスペクタパネルの「動作」「次の場合にオブジェクトを隠す」に式を入れる。

グローバルリンク - FileMaker小ネタ集

②式は「isEnpty( フィールド ) = 0データが入っていない=偽)」とする。

グローバルリンク - FileMaker小ネタ集

 

③このままでは、そのオブジェクトが見えなくなってしまうので、背面に「フィールド入力」にチェックを外した同じオブジェクトを配置しておく。

グローバルリンク - FileMaker小ネタ集

ウインドウの種類

ファイルメーカーでは、複数の画面を表示することができますが、4つのウインドウスタイルがありそれぞれ特徴があります。

ドキュメントウインドウ

通常のウインドウスタイル。

フローティングウインドウ

アクティブでもアクティブでなくても常に他のウインドウの上に表示される。また、このウインドウに表示されているレコードだけが編集可能なわけではなく、他のウインドウも編集が可能。

ダイアログ(モーダル)

ウインドウはユーザーが閉じるまで唯一のアクティブなウインドウで、他のウインドウの操作ができない。アクティブな間は、ファイルメーカーを終了したり他のファイルを開いたりすることもできない。

カード

アクティブなウインドウ(親ウインドウ)の現在のレイアウトの一番手前に表示される。なお、他のウインドウを選択して作業することができるが、親ウインドウで作業するにはカードウィンドウを閉じる必要がある。

レイアウトパートの種類と特徴

上部ナビゲーション

画面の一番上に表示され、ナビゲーションに使用するボタンなどを配置。1つのレイアウトに1つのみ配置可能。

スクロールしても常に画面の上部に固定表示され、表示の拡大・縮小に影響されない。

印刷もされない。

タイトルヘッダ

上部ナビゲーションの下に表示され場所の変更は不可。リスト形式では表示されない

印刷時は先頭ページに1度だけ印刷される。「タイトルヘッダ」と「ヘッダ」の両方設定されているレイアウトを印刷すると最初のページは「タイトルヘッダ」が印刷され「ヘッダ」は印刷されない。2ページ目以降は「ヘッダのみ印刷される。

「タイトルヘッダ」に配置されているフィールドは、ブラウズモードではアクティブなレコードのデータが表示されるが、印刷時には対象レコードの最初のレコードのデータが印刷される。

ヘッダ

1つのレイアウトに1つのみ。画面名や表形式で項目名を配置するためのパートとして使用する。

「ヘッダ」に配置されているフィールドは、ブラウズモードではアクティブなレコードのデータが表示されるが、印刷時には各ページに印刷されるレコードの最初のレコードのデータが印刷される。

フッタ

「下部ナビゲーション」「タイトルフッタ」の上に表示。1つのレイアウトに1つのみ。

「フッタ」に配置されているフィールドは、ブラウズモードではアクティブなレコードのデータが表示されるが、印刷時には各ページに印刷される最後のレコードのデータが印刷される。

タイトルフッタ

「下部ナビゲーション」の上に表示。タイトルヘッダと特徴は同じ。

「タイトルフッタ」に配置されているフィールドは、ブラウズモードではアクティブなレコードのデータが表示されるが、印刷時には最初のページに印刷される最後のレコードのデータが印刷される。

下部ナビゲーション

画面の最下部に表示される。上部ナビゲーションと同じ特徴。

統計(前部又は後部)

このパートに集計タイプのフィールドを配置すると、すべての対象レコードの集計値が表示される。1つのレイアウトに、前部と後部の2つ配置可能。

前部統計は、ヘッダの下で小計とボディを下に配置可能。後部統計は、フッタの上で小計パートとボディを上に配置可能。

小計(前部又は後部)

このパートに集計タイプのフィールドを設置すると、パートの定義で設定されているフィールドでソートされたレコードの各グループの集計値(小計が表示される。

1つのレイアウトに複数の小計パートを設置できるが、パートの定義で設定できるのは1レイアウトごとに1フィールド、1回のみ。

複数の変数をJSONを使ってやり取りする

引数の指定


JSONSetElement ( "{}" ;
[ ”遷移先画面" ; "マスタ管理画面" ; JSONString ];
[ ”スタッフID" ; 5 ; JSONNumber ] )

データの方
JSONString:文字列
JSONNumber:数字
JSONBoolen:論理値 など

引数を変数へ入れる

引数をそれぞれ変数「$遷移先画面」と「$スタッフID」へ入れる


変数を設定 [ $遷移先画面; 値: JSONGetElement  ( Get ( スクリプト引数 ) ; "遷移先画面" ) ]
変数を設定 [ $スタッフID; 値: JSONGetElement  ( Get ( スクリプト引数 ) ; "スタッフID" ) ]

 

複数の変数をGetValueで受け取る

引数の指定

改行して複数の引数を記述する

 

"入力画面" & 改行コード &
"年齢" & 改行コード &
"25"

引数を変数へ入れる

 
$画面名 → GetValue ( Get( スクリプト引数 ) ; 1 ) → 結果は「入力画面」
$項目名 → GetValue ( Get( スクリプト引数 ) ; 2 ) → 結果は「年齢」
$値 → GetValue ( Get( スクリプト引数 ) ; 3 ) → 結果は「25」

Case関数

例)消費税の端数をどのように処理するかを選択して処理する関数


Case (
  端数処理 = 1 ; Round( 消費税額 ; 0 ) ;     //四捨五入
  端数処理 = 2 ; Truncate( 消費税額 ; 0 ) ;  //切り捨て
  端数処理 = 3 ; Ceiling( 消費税額 ) ;       //切り上げ
消費税額 ) //デフォルト値

様々な日付計算

前月の末日を計算 Date ( Month( Get( 日付 ) ) ; 0 ; Year( Get( 日付 ) ) )

前月の初日を計算 Date ( Month( Get( 日付 ) ) -1 ; 1 ; Year( Get( 日付 ) ) )

年度末を計算 Date ( Month ( $開始年月日 ) ; 1 ; Year ( $開始年月日 ) + 1 ) – 1

15分単位で切り捨てる計算

Case (
Minute ($残業時間)>= 0 and Minute ($残業時間) <= 14 ; Time (Hour ($残業時間); 0 ;0); Minute ($残業時間)>= 15 and Minute ($残業時間) <= 29 ; Time (Hour ($残業時間); 15 ;0); Minute ($残業時間)>= 30 and Minute ($残業時間) <= 44 ; Time (Hour ($残業時間); 30 ;0); Minute ($残業時間)>= 45 and Minute ($残業時間) <= 59 ;
Time (Hour ($残業時間); 45 ;0);
$残業時間)

[/php/

印刷時に行間を自動で詰める

表示を拡大・縮小したいオブジェクトを選択して「位置」タブの「スライドと表示」を設定する

グローバルリンク - FileMaker小ネタ集

経過年月を求める

入社日から作成日までの年月を求める
日を考慮しない

Let (
YM = Year ( $作成日 ) * 12 + Month ( $作成日 ) - Year ( $入社日 ) * 12 - Month ( $入社日 ) ;
Div ( YM ; 12 ) & "年" & Mod ( YM ; 12 ) & "ヶ月" )

日を考慮する

Let (
YM = Int ( Year ( $作成日 ) * 12 + Month ( $作成日 ) + Day ( $作成日 ) / 100  - Year ( $入社日 ) * 12 - Month ( $入社日 ) - Day ( $入社日 ) / 100 ) ;
Div ( YM ; 12 ) & "年" & Mod ( YM ; 12 ) & "ヶ月" )

経過月数を計算

Let (
[
D1 = $作成日 ;
D0 = $入社日 ;
YM1 = Year ( D1 ) * 12 + Month ( D1 ) + Day ( D1 ) / 100 ;
YM0 = Year ( D0 ) * 12 + Month ( D0 ) + Day ( D0 ) / 100
] ;
Int ( YM1 - YM0 ) +1
)