リレーションのフィールドタイプが違う場合の動作
リレーションシップで、テキストフィールド=数字フィールドのように、フィールドタイプが違うものをリレーションさせると、バグの元になる。ここでは、実際に起きた問題(の最小の再現)を例に解説する。
状況設定
以下のようにリレーションシップが組まれている。「受注」テーブルから、「顧客別集計」のレコードを作成するように設定されている。ここで、「受注::顧客コード」はテキストフィールド、「顧客別集計::顧客コード」が数字フィールドになっている。
「受注」テーブルには次のようなレコードがあるとする。顧客コード「0001」と「その他」が2件ずつ用意されている。「顧客コード」には4桁揃えの数字が入ることが想定されているが、数字を含まない「その他」という値が入力されている。本来このような運用は避けるべきだが、実際の運用ではこのようなことはよく起こる。
顧客コード | 金額 |
0001 | 1000 |
0001 | 1000 |
その他 | 1000 |
その他 | 1000 |
レコード作成時の動作
ここで、上記の対象レコードに対して、次のスクリプトを実行する。
レイアウト切り替え [「受注」(受注); アニメーション:なし]
レコード/検索条件/ページへ移動 [最初の]
Loop
フィールド設定 [受注_顧客別集計::金額; 受注_顧客別集計::金額 + 受注::金額]
レコード/検索条件/ページへ移動 [次の; 最後まできたら終了:オン]
End loop
各顧客ごとに受注の金額を集計するスクリプトである。顧客コード「0001」「その他」でそれぞれ金額が2000の顧客別集計が作成されることが予想できる。しかし、実際に実行すると、「顧客別集計」のレコードは次のようになる。
顧客コード | 金額 |
0001 | 2000 |
その他 | 1000 |
その他 | 1000 |
顧客コード「0001」は想定通り集計されているが、「その他」は別々のレコードが作成されてしまっている。「その他」は数字タイプとしての値を持たないためか、うまく照合されなかった。「顧客別集計::顧客コード」をテキストフィールドに変更すると、以下のように正しく集計される。
顧客コード | 金額 |
0001 | 2000 |
その他 | 2000 |
投稿者プロフィール
-
スモールの未来探究部 所属
FileMaker開発エンジニア
最新の投稿
- FileMaker研究室2024年2月8日FileMaker WebDirectでアクセス時に発生する502エラーの解決方法
- FileMaker研究室2023年12月19日Webビューアで特定の座標のGoogleMapを表示
- FileMaker研究室2023年8月19日FelicaのIDmを取得する方法の模索
- FileMaker研究室2022年11月25日AWSでの環境構築録