2017-11-17 205 views
0

我试图返回存储在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下面的评论返回所需的值,但宁愿不要硬代码字段名称。

是否有任何方式使用循环来返回字段名称和值?

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

回答

2

这听起来不雅,但是,如果你能在你的表单中创建一个新的计算字段与列公式,然后使用列中的新字段。另外,从性能角度来看,你会变得更好。

2

我不相信IBM's documentatioñ明确地说,但我不认为@GetField作品在列值的公式。该文件说,它在“当前文档”中工作,并且公式在视图中执行时没有当前文档。

假设你知道什么是N的最大数量,要做到这一点的方法是使用一个简单的列表:

ChecklistContact_1 : ChecklistContact_2 : ChecklistContact_3 : ... : ChecklistContact_N 

如果N大,这将是一个很大的打字,但你会只需要做一次,复制粘贴和编辑这些数字就可以很快完成。

+0

感谢您的提示,我已经添加了一个新的脚本,它只使用@GetField()返回第一个索引,但是我想返回所有的脚本。 –

+0

我已经添加了上面的脚本,返回所有需要的值,但我不想硬编码字段名称。谢谢你的帮助。 –

+1

正如shillem建议的那样,您可以将计算字段添加到视图中文档的表单中。 get field的循环策略将在那里工作。但是,在视图级别看到结果之前,您必须刷新并重新保存所有文档。如果有大量文档和用户具有副本,则会受到影响。未读标记也会改变。另外,请确保在计算字段中选中了多值的复选框。这是我能想到的避免硬编码的唯一方法。 –

1

也许使用循环创建字段名的列表,理查德建议,然后显示tNames

+0

我不认为这是可能的。 AFAIK,除了通过硬编码名称引用字段之外,无法访问列公式中的字段值。 –