FileMaker 入力値の自動化・入力値の制限「データとフィールド」 中級編(6章)

FileMaker公式テキスト中級編!!!

中級編では、
中級開発者として複数の利用者を想定してシンプルなカスタムAppを作成する
といった内容になります。

全16章です。
前回は、5章『リレーションシップ』について学びました。
👉FileMaker 中級編(5章)

今回は、6章『データとフィールド』についての知識を学びます。

データとフィールド(6章)

カスタムAppに入力されるデータは、フィールドに保存(格納)されていきます。

レイアウト(TO)を通してレコード単位で「入力」「出力」が行われます。

どのように複雑で長いスクリプトも、ほとんどの場合、データを入出力するために作成されています1 つのスクリプト内で何度も入出力をしながら結果を得ることもあります。

 

「入力」は、ブラウズモードでのレコードの作成や更新のためだけではなく、検索モードで検索条件を指定することなども当てはまります。
「出力」は、印刷や書き出しだけではなく、集計結果やグラフ、検索結果の表示なども当てはまります。

このようにして取り扱われるデータを保存しているフィールドとオプションについて解説します!!!

フィールド定義

データが正しく入力されていることは、システムの正確さに繋がります!
そのためには正しい入力のしやすい設定をする必要があります。


フィールド設定。フィールドのオプション設定。

  1. フィードの名前
  2. フィールドタイプ
  3. 入力値の自動化
  4. 入力値の制限
  5. 格納と索引

フィードの名前

取り扱うデータを端的で内容がすぐにわかるように命名します。
計算式やスクリプトの作成中に、フィールドを選択しやすく、タイプも簡単に見分けられると便利です。


下記3つは特別なものであるため、分かりやすいように区別します。

・ 計算タイプフィールド >>> 「c_ フィールド名」(calculationの頭文字)
・ 集計タイプフィールド >>> 「s_フィールド名」(summaryの頭文字)
・ グローバル格納フィールド >>> 「g_フィールド名」(globalの頭文字)

フィールドタイプ

データには型(タイプ)があります。データを適切に扱えるようにタイプごとの保存方法、索引方法
が用意されています。また、ソート結果にも影響しま

フィールドは全8種類

<基本の6タイプ>

タイプ名 格納するデータの種類
テキスト オプションのテキストスタイル、および行揃えを含め、10,000,000 文字まで
(使用可能なメモリによって制限されます)
数字 10^-400 から10^400 までの値と同じ範囲の負の値をサポート
日付 日付のみ。グレゴリオ暦で0001 年1 月1 日から4000 年12 月31 日までの範囲の日付
時刻 時刻のみ。時、分、秒を保存
タイムスタンプ 暦上の日時の特定日付と時刻の組み合わせ(2003/10/25 2:39:46 など)
オブジェクト 最大4GB の画像、Microsoft Word やExcel などのファイル、PDF、マルチメディアファ
イル(写真、ムービー、サウンドなど)など
基本のフィールドタイプ6種

●数字とテキストタイプ
電話番号や郵便番号など数字かテキストか迷う場合もあります。
2つともテキストタイプです。

・数字の大小で結果を比較する場合。(計算や並び替え)は数字タイプ

・文字列として数字を使用している場合はテキストタイプ

※業務上付与している番号(商品番号、見積番号など)は「0」からはじまるものでない限り、数字の方が検索やソートでの取り扱いが楽です。

<特殊な2タイプ>

計算 現在のレコードまたは関連レコードのフィールド値を使用する計算式の計算結果
(計算の結果は、テキスト、数字、日付、時刻、タイムスタンプ、またはオブジェクトのいずれか
のタイプ)
集計 同じテーブル内の複数のレコードのフィールド値を集計して得られた値
特殊な2種

特殊なタイプの「計算」「集計」は、他のフィールドなどのデータを元に算出するものです。


●計算タイプ
結果のデータにあわせたタイプを設定します。
●集計タイプ
集計結果に対してはタイプ設定はありません(結果は主に数値です)。

<フィールドと入力>
設定されたタイプに則したデータを入力します。
例えば、テキストタイプのフィールドに、数字、日付、時間、タイムスタンプを入力すると一見、
表示上は問題がなく思えても、様々なタイミングで期待とは違う結果になってしまいます。。

設定されたタイプに則したデータが入力できるように入力オプションの設定をしていきます。

入力値の自動化

レコードの作成時に自動的に初期値として入力される。

<目的>

  • 入力漏れ(空欄)を防ぐ
  • タイプミスを防ぐ
  • 入力の負担を減らす  。。。

<利用場所>

 

  • ハウスキーピングフィールド
    ※デフォルトでユーザが入力できないように設定されています。
    これは、ユーザが本来とは違う日付をわざと入力することを防でいます。
    自動入力された『常にあてになる』データがフィールドに設定されているようにするためです。
  • 作成時の値が決まっているフィールド 。。。

 

●「入力値の自動化」設定には以下3点に意識する

  1. なにを 「対象のフィールド」の設定
  2. どのように 「初期値として入力する値」の設定
  3. どの程度 「入力の厳格さ」の設定

分かりにくい内容について説明します。

●シリアル番号
レコードの作成または確定時に、自動で連番を生成して入力する設定です。
3種あります。

・シリアル値(数字)
[次の値:]数字 [増分:]数字

1,2,3,,,と続く数字。
シンプル。上限設定不要で、始まりの数字のみ決めればいい。

・シリアル値(テキスト)
[次の値:]テキスト(CD01) [増分:]数字

CD01,CD02,CD03,,,と続くテキスト。
値の意味が分かりやすい。上限設定が必要。

・UUID
計算値の自動入力
既存の値は置き換えない
Get(UUID)かGet(UUID 番号)

72A80F52-C2DC-45E7-A929-E71D99AA87CF など
連番では無い。顧客管理に連番が必要な場合は、顧客番号として別のフィールドを作ることもOK。
※モバイルとの同期に有効。
モバイル上で生まれたシリアル番号(数字)は社内PCと重複してしまいます。
世界レベルで唯一の存在である、UUIDなら問題ない。

●計算値

  • 同テーブルのフィールド値
  • 関連レコードのフィールド値
  • 関連レコードの複数のフィールド値
  • 取得関数からの値

上記のように様々な値を利用して計算し、初期値として設定できる。

<計算値のオプション>
[フィールドに既存の値が存在する場合は置き換えない]

チェック 
なにかしらの値が入力されているときは計算しない
↓↓↓つまり
初期値が空欄の場合のみ自動で入力される

チェック外す
既存の値を置き換える
↓↓↓
計算式の再評価で置き換わる
(詳細は他の章)

●ルックアップ値
関連テーブルの関連レコードの指定したフィールドからデータをコピーして入力する設定です。

ルックアップ設定には、関連が必要です。
[開始するテーブル:] (どこのTOから)
[関連テーブルからルックアップする:] (どこのTOを見るか)
[値のコピー元のフールド:](どの値をコピーするか)

・ 参照先の関連レコードの一番目のレコードのデータがコピーされる
・ コピーされたデータを変更してもコピー元のデータに反映されない

●データ入力時の値変更の禁止
入力時とは。。。 ユーザーが自分で入力しようとする時

チェック
自動入力されたデータをユーザーが変更できなくなる。

しかし!それ以外の変更はできる!
スクリプトやインポートなど開発者が意図的に入力していると判断できる場合は変更できる。

入力値の制限

フィールド入力の確定時に、「範囲内の値」に制限をすることができます。

<目的>

  • 不正値の入力を防ぐ
  • タイプミスを防ぐ
  • 同じ意味の違う言葉の入力を防ぐ(「男」と「おとこ」)  。。。

<利用場所>

  • 入力されるべき値が決まっているフィールド
  • 期限(範囲)が定められているフィールド 。。。

 

●「入力値の自動化」設定には以下5点に意識する

  1. なにを 「対象のフィールド」の設定
  2. いつ 「制限範囲内かを判断するタイミング」の設定
  3. どの程度 「範囲外の入力を認めるかどうか」の設定
  4. どの条件で 「制限する内容」の設定
  5. どのように 「制限を超えた場合のダイアログ」の設定

分かりにくい内容について説明します。

●[このフィールドの入力値を制限する:]
『いつ制限を評価するか』を設定します。初期値は[データの入力時のみ]です。

入力には次の種類があります

  • 手入力
  • 置換、再ルックアップなどのメニューコマンドによるもの
  • スクリプト
  • インポート
  • 「入力値の自動化」オプションによる自動入力

[常時]
すべての入力で制限します。
もちろん自動入力も含まれます。常に制限を評価します。
例えば、 この制限によりインポート時にエラーになったレコードはスキップされます。 

[データの入力時のみ]
ユーザの手入力時のみ制限されます。
全置換、インポートや[フィールド設定]スクリプトステップなどは制限されません。 

●[データの入力時にユーザによる上書きを許可する] 
設定した制限をユーザが無視できるようにします。
確実に制限したい場合『オフ』にします。 

●[必要条件:]
制限する内容です。1 つのフィールドに複数の条件を設定できます。
ただし、オプションが衝突しないように気をつけます。 

項目 入力値の必須条件
タイプ:[数字] 数字のみ
タイプ:[西暦4桁の日付] 月と日が数字で、年が4桁の数字である日付(2015/12/5 など)
タイプ:[時刻] 時間と分が 00:00 から 23:59 までの数値である時刻
空欄不可 空欄のフィールドを不可とする
ユニークな値 他のレコードの同じフィールドで値が重複しないようにする
既存値 他のレコードの同じフィールドにすでに入力された値に一致させる 
値一覧名 値一覧を選択 指定した値一覧の値に一致する 
下限値/上限値 特定の範囲内の文字(数字、ひらがな、カタカナは五十音順、英単 語はアルファベット順、漢字はコード順)、数字、日付、また時刻 
[計算式で制限] 計算結果と一致する
[フィールドに変更があった場合のみ制限する]を選択または選択解除してから[OK]をクリックします
[最大文字数] 指定いした文字数以下にする
[最大キロバイト数] 特定のファイルサイズを超えないようにする (オブジェクトタイプのフィールドの場合) 

●[制限値以外の入力時にカスタムメッセージを表示] 
制限の評価がエラーになるとデフォルトのエラーメッセージが表示されます。 
こちらを設定すると、独自のメッセージを表示できます。
具体的な内容をユーザに表示したい場合に便利です。最大255 文字まで設定可能です。

入力値の制限によるエラーメッセージ

●[データの入力時にユーザによる上書きを許可する] 

オン の場合

エラーメッセージには[フィールドの復帰][いいえ][はい]の3つのボタンが表示されます。

  • [はい] 制限を超えた入力を認め、そのまま確定します。
  • [いいえ] 確定されず編集中のフィールドに戻ります。
  • [フィールドの復帰] 入力前(元の値)に戻ります。

オフ の場合

エラーメッセージには[フィールドの復帰][OK]の2つのボタンが表示されます。

  • [OK] 確定されず編集中に戻ります。
  • [フィールドの復帰] 入力前(元の値)に戻ります。

■[データの入力時にユーザによる上書きを許可する] がオフ
[空欄不可] がチェック
の場合。

エラーメッセージには[OK]のボタン表示のみになる。

通常、入力値の自動化とセットで[空欄不可]が使われることが多い。
しかし、そうではない場合。
[フィールド復帰]ボタンが存在し、クリックした場合、空欄に戻ってしまう可能性がある。
ので[フィールド復帰]ボタンが無く、[OK]のみになる。

設定の保存 

※[データベースの管理]ダイアログを閉じないと、設定が保存されません。
[キャンセル]を押すと、 それまでのすべての変更が破棄されます。 

<エラーの多さに注意>
たくさんの制限を設定すると、エラーメッセージが頻繁に表示されてユーザが入力作業を面倒だと考えるかもしれません。 

その他の制限方法

入力値の制限について違う方法も可能です。 

  • スクリプトトリガ
  • 計算値の自動化を制限に利用する
  • 条件付き書式/プレースホルダテキストをエラーメッセージ代わりに使う 

など他の方法によってより厳格に、柔軟に制限する方法もあるようです。
現時点では難しいので詳しくは学びませんが、「フィールド設定以外にも様々な方法がある」ということを覚えておくと良さそうです👀

発行日と期限日 

現在、「期限日」は発行日に基づいて自動入力によって、1ヶ月後を入力する設定になっています。
しかし、発行日が空欄の場合どうでしょう?
発行日を空欄のまま決定すると、連動する[期限日]についてもエラーメッセージが出てしまいます。

両方とも空欄不可の設定だからです。
ですが[データの入力時にユーザによる上書きを許可する]に両方ともチェックを入れています。
なので、[はい]をクリックすれば空欄を確定することができ、次へ進むことができます。

※連動するフィールドの取り扱いには注意が必要です。
どのような設定にしたら、的確な値が入力されるか。も大事ですが、利用者が快適に操作できることも重要です。

どのような組み合わせで行えば理想の動作になるか、きちんと確認しながら開発する必要があります!


以上で6章は終わりです。

次回は7章「データと索引・格納 」について、フィールドオプションの設定で触れなかった「格納と索引」について学習していきます😄

コメント

タイトルとURLをコピーしました