2017-11-17 206 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,除了通過硬編碼名稱引用字段之外,無法訪問列公式中的字段值。 –