【问题标题】:Using Formula Language to return column values使用公式语言返回列值
【发布时间】:2017-11-17 23:40:26
【问题描述】:

我正在尝试返回存储在 tNames 变量中的所有值。

字段中存在值。已选择将多值显示为单独的条目,但没有返回任何名称。

下面是示例代码:

tNames := "";
@For(n := 0; n <= QuestionCount - 1; n := n + 1;
tNames := tNames + ", " + @Implode(@GetField("ChecklistContact_" + 
  @Text(n));",")
);
@Trim(tNames)

我不知道为什么它没有返回任何东西,将感谢您的帮助。

下面只返回索引为0的联系人,但我想返回每个文档中的所有联系人。

tCount := 0;
@For(n := 0; n <= QuestionCount - 1; n := n + 1;
 tCount := tCount + @If(@GetField("ChecklistContact_" + @Text(n)) = ""; 0; 1)
);
@GetField("ChecklistContact_" + @Text(tCount))

根据 Richard 的 cmets,下面会返回所需的值,但不希望对字段名称进行硬编码。

有没有办法使用for循环返回字段名和值?

tNames := "";
tNames:= @GetField("ChecklistContact_1") : @GetField("ChecklistContact_2") : ... @GetField("ChecklistContact_7");
@Trim(tNames)

【问题讨论】:

    标签: xpages lotus-notes xpages-ssjs lotus lotus-formula


    【解决方案1】:

    我不相信IBM's documentation 明确表示这一点,但我认为@GetField 不适用于列值公式。文档说它在“当前文档”中起作用,并且在视图中执行公式时没有当前文档。

    假设您知道 N 的最大数量是多少,那么可以通过一个简单的列表来做到这一点:

    ChecklistContact_1 : ChecklistContact_2 : ChecklistContact_3 : ... : ChecklistContact_N
    

    如果 N 很大,这将需要大量输入,但您只需输入一次,复制、粘贴和编辑数字会很快完成。

    【讨论】:

    • 感谢您的提示,我在上面添加了一个新脚本,它使用 @GetField() 仅返回第一个索引,但我想全部返回。
    • 我在上面添加了返回所有必需值的脚本,但我不想硬编码字段名称。感谢您的帮助。
    • 您可以按照 shillem 的建议将计算字段添加到视图中文档的表单中。您使用 get 字段的循环策略将在那里起作用。但是您必须刷新并重新保存所有文档,然后才能在视图级别看到结果。如果有很多文档并且用户有副本,他们会受到打击。未读标记也将被更改。此外,请确保在计算字段中选中了多值复选框。这是我能想到的避免硬编码的唯一方法。
    【解决方案2】:

    这听起来可能不优雅,但如果可以的话,请在表单中使用列公式创建一个新的计算字段,然后在列中使用该新字段。此外,从性能的角度来看,你会做得更好。

    【讨论】:

      【解决方案3】:

      也许按照 Richard 的建议使用循环来创建字段名列表,然后显示 tNames

      【讨论】:

      • 我不相信这是可能的。 AFAIK,除了通过硬编码名称引用字段之外,无法访问列公式中的字段值。
      猜你喜欢
      • 1970-01-01
      • 2017-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-13
      • 2021-08-07
      相关资源
      最近更新 更多