1

我之前问过一个与此类似的问题(如何在表单中使用 RecId 作为外键),但想在更复杂的场景中进一步探索它。

当您设置了索引并将允许重复设置为 no 时,替换键效果很好,但它们似乎根本不适用于多字段索引或允许重复设置为 yes。

有没有办法以编程方式在不使用替换键的情况下用翻译值替换网格中的外键?我尝试编写一个显示方法来覆盖该字段,但是导致了一些奇怪的行为——字段在网格中移动,并且显示方法不知道要使用哪一行,因此整个列中的所有值都是相同的。

表 A: Bob:1, Sally:1, Sue:3 表 B: 1:Apples, 2:Apples, 3:Oranges “人”通过食物 RecId 与他们最喜欢的“食物”联系在一起,在 People 表中引用. 假设其他列中存在使这些记录唯一的附加数据,因此合并“1:Apples”和“2:Apples”是不可能的。

似乎应该有一种方法可以编写一个显示方法来覆盖网格中的字段值。有什么建议么?示例代码?

谢谢

4

1 回答 1

4

首先,代理 FK 替换确实(或至少应该)使用复合键(例如,{First Name, Last Name})。

其次,您说“其他列中的附加数据”使这些记录独一无二……那么为什么不将这些列与食物名称结合起来形成备用键?数据模型似乎不正确(或者至少某些元数据与您所说的条件不一致)

第三,可以选择任何字段组作为参考组控件上的 ReplacementFieldGroup。仅此一项就可以让您基本上做任何您想做的事情。也就是说,由于代理 FK 替换的语义,我强烈建议您尽可能使用备用键作为替换字段组。

流动:

1) 用户在参考组中键入一个值。

2)用户的标签。

3) 用户键入的值用于在相关表中查找记录。

4a) 如果用户输入的值被唯一地映射到选择该记录的记录,否则,

4b) 如果用户输入的值不是唯一的,则显示查找以允许用户选择他们“意指”的记录。请注意,因此查找必须呈现一组唯一可识别的记录,以便用户知道要选择哪个记录(如果在查找中所有记录看起来都一样,那么他们将不知道应该选择什么。)

5) 成功解析键入的值后,将记录设置回源表单。

鉴于此流程,很明显,如果表上没有唯一索引(键),则步骤 3-5 将被破坏。(如果记录无法唯一标识(假设您不想向用户显示 RecId),用户应该如何指定对记录的唯一引用?)

在您决定仍要使用非唯一索引作为替换字段组的特殊情况下,您必须实现 resolveReference 和 lookupReference 为用户提供独特的解析/查找体验(处理上述流程中的步骤 3-5 )。注意:常见的用例是希望有效地消除在参考组中显示的非选择性字段,而是让一些外部上下文或模式隐式设置该值。例如,如果备用键是 {Size, Color},则可能使“Color”成为全局表单上下文——也许通过让用户在表单顶部选择一种颜色——并且只让用户输入 Size参考组...然后可以通过 resolveReference 和 lookupReference 覆盖隐式添加颜色。

于 2012-05-21T19:36:05.360 回答