4.09 間接参照
FileMakerの間接参照とは、項目を「間接的に」参照できることです。通常は、計算式を作る際に、計算式中でフィールドやカスタム関数を名前で使用すると、FileMakerはこれらの名前をその項目の内部IDとリンクします。このようにして計算式を完成させ、参照されている項目の名前を変更すると計算式もそれに一致するように更新されます。この機能はほかの多くのプログラミング言語にはありません。好きなように項目を変更してもソリューション全体が壊れることはないという点で、長期間にわたるソリューションの管理がたいへんしやすくなっています。
FileMakerの新しいバージョンでは、内部IDではなく名前で項目を参照する方法がたくさんあります。そのため、名前を変更すると計算式が壊れてしまうケースがあります。たとえば「GetField ( "TextFieldName" )
」を使用していて、フィールド名を「TextFieldName」から「ChangedField」に変更し、計算式中で使われているこのフィールド名をすべて更新しない場合には、コードは動作しなくなります。
計算式を完全にダイナミックなものにしたりユーザのデータからフィールド名を作ったりすることもできます。「GetField ( "Text" & $Variable )
」は同じように有効な計算式です。変数のデータはテキストフィールドまたはユーザが選択するダイアログから作成できます。
ベースエレメンツは、すべての関数のコールから間接参照の関数のリストを作ります。これは、レイアウト、フィールド、値一覧を選択できる関数のほか、カスタム関数を参照している可能性がある計算式全体を含む関数もリストに含まれます。
ベースエレメンツでの動作の仕組み
ベースエレメンツは、そのフィールドが何を指すかがユーザにとって明確な「GetField ( "TextFieldName" )
」のようなシンプルなものと、結果がユーザにわからないこともある「GetField ( "Text" & $Variable )
」のような複雑なものを区別しません。その理由は、複雑なオプションの可能性がたくさんあって、実行時にどの項目が参照されるかを判断できないからです。シンプルなソリューションでは判断できることもありますが、時間がかかる上にどの部分が正確なのかがわからないようなものにはしないことにしました。
ベースエレメンツは、個々の項目の参照を分析するのではなく、どの項目が間接的に使われている可能性があるか、どのようなタイプかを追跡し、それがソリューションにどのように影響を与えるかをお客様が判断できるようにしています。
自分のソリューションでどのように活用するか
まず、扱いやすくするために間接参照をあまり使わないようにしましょう。FileMakerの新しいバージョンでは、項目を直接使用するGetFieldName
や名前で参照するオプションもあり、参照の数に含まれます。間接的な参照はパワフルで、「フィールドを名前で設定」のようなステップを使うと複雑さを大幅に軽減できます。必要に応じて間接参照を用い、管理しましょう。その項目が間接的に使われているという目印になるようなネーミングのルールを決めて、その項目を削除したり名前を変えたりしないように注意する方法もあります。
次に、「参照されていない」チェックボックスにはさまざまな状態があることを頭に置き、項目が使われている可能性を考慮しないままに削除することは避けましょう。計算式のエラーがあるときは、ソリューション中のフィールドやカスタム関数を削除してはいけません。また、項目の削除後は、実際に運用する前に必ずソリューションをテストしましょう。