1

以前にこれと同様の質問をしました(フォームで外部キーとしてRecIdを使用する方法)が、より複雑なシナリオでもう少し詳しく調べたいと思います。

置換キーは、インデックスが設定されていて重複を許可するがnoに設定されている場合はうまく機能しますが、複数フィールドのインデックスではまったく機能しないようです。または、重複を許可するがyesに設定されている場合は機能しません。

プログラムで、置換キーを使用せずにグリッド内の外部キーを変換された値に置き換える方法はありますか?フィールドをオーバーライドするdisplayメソッドを作成しようとしましたが、奇妙な動作が発生しました。フィールドがグリッド内を移動し、displayメソッドが使用する行を認識しないため、列全体のすべての値が同じでした。

表A:ボブ:1、サリー:1、スー:3表B:1:リンゴ、2:リンゴ、3:オレンジ「人」は、人の表で参照されている食品RecIdによって、お気に入りの「食品」に関連付けられています。 。これらのレコードを一意にする追加のデータが他の列にあると想定するため、「1:Apples」と「2:Apples」を統合することはできません。

グリッド内のフィールド値を上書きするdisplayメソッドを作成する方法があるはずです。助言がありますか?サンプルコード?

ありがとう

4

1 に答える 1

4

まず、代理FK置換は、複合キー({First Name、Last Name}など)で機能します(または少なくとも機能するはずです)。

次に、これらのレコードを一意にする「他の列に追加データ」があると述べます...それでは、なぜこれらの列を食品の名前と組み合わせて代替キーを形成しないのですか?データモデルが正しくないようです(または、少なくとも一部のメタデータが、指定した条件と一致していません)

第3に、任意のフィールドグループを参照グループコントロールのReplacementFieldGroupとして選択できます。それだけで、基本的にあなたがやりたいことを何でもすることができます。とはいえ、代理FK置換のセマンティクスのため、可能な限り、置換フィールドグループとして代替キーを使用することを強くお勧めします。

フロー:

1)ユーザーが参照グループに値を入力します。

2)ユーザーのタブが表示されます。

3)ユーザーが入力した値は、関連するテーブルでレコードを検索するために使用されます。

4a)ユーザーが入力した値がレコードに一意にマップされている場合、そのレコードが選択されます。それ以外の場合は、

4b)ユーザーが入力した値が一意でない場合、ユーザーが「意味のある」レコードを選択できるようにルックアップが表示されます。したがって、ルックアップは一意に識別可能なレコードのコレクションを提示する必要があることに注意してください。これにより、ユーザーはどのレコードを選択するかを知ることができます(ルックアップですべてのレコードが同じように見える場合、何を選択する必要があるのか​​わかりません)。

5)入力された値が正常に解決されると、レコードはソースフォームに戻されます。

このフローを考えると、テーブルに一意のインデックス(キー)がない場合、ステップ3〜5が中断されることは明らかです。(レコードに一意の識別手段がない場合、ユーザーはレコードへの一意の参照をどのように指定する必要がありますか(RecIdをユーザーに表示したくない場合)???)

置換フィールドグループとして一意でないインデックスを引き続き使用することを決定した例外的なケースでは、 resolveReferenceとlookupReference実装して、ユーザーに一意の解決/ルックアップエクスペリエンスを提供する必要があります(上記のフローのステップ3〜5を処理するため) )。注:これの一般的な使用例は、非選択フィールドが参照グループに表示されないように効果的に排除し、代わりに外部コンテキストまたはモードにその値を暗黙的に設定させることです。たとえば、代替キーが{Size、Color}の場合、おそらくユーザーにフォームの上部で色を選択させ、ユーザーにSizeを入力させるだけで、「Color」をグローバルフォームコンテキストにすることができます。参照グループ...次に、resolveReferenceおよびlookupReferenceオーバーライドを介して色を暗黙的に追加し直すことができます。

于 2012-05-21T19:36:05.360 に答える