2017-11-17 9 views
0

tNames変数に格納されているすべての値を返そうとしています。数式言語を使用して列の値を返す

値はフィールドに存在します。別々のエントリとしてのshow multivaluesは既に選択されていますが、名前のどれも返されません。以下は

サンプルコードです:

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)) 

以下のリチャードからのコメントには、必要な値が返されますが、フィールド名をハードコードしたくない場合があります。

forループを使用してフィールド名と値を返す方法はありますか?

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

答えて

2

を表示し、その後、フィールド名のリストを作成するためにあなたのループを使用しますあなたの列のその新しいフィールド。また、パフォーマンスの観点から、あなたはもっと良いでしょう。

2

私はIBM's documentatio nは、明示的にこれを言うことを信じていませんが、私は@GetFieldが列値式で動作しないと思います。ドキュメントは "現在のドキュメント"で動作し、フォーミュラがビューで実行されているときには現在のドキュメントが存在しないことを示します。

あなたはNの最大数が何であるかを知っていると仮定すると、これを行う方法は、単純なリストである:Nが大きい場合、これは入力の手間になります

ChecklistContact_1 : ChecklistContact_2 : ChecklistContact_3 : ... : ChecklistContact_N 

、しかし、あなたはよそれを一度やり直すだけで、数字をコピーして貼り付けて編集することでかなり早く進むことができます。リチャードが提案されているよう

+0

ヒントをお寄せいただきありがとうございます。私は@GetField()を使用して最初のインデックスのみを返す新しいスクリプトを追加しましたが、すべて返すようにします。 –

+0

必要なすべての値を返すスクリプトを追加しましたが、フィールド名をハードコードしたくないです。ご協力いただきありがとうございます。 –

+1

shillemが示唆するように、ビュー内のドキュメントのフォームに計算フィールドを追加できます。フィールドを取得するあなたのループ戦略はそこで動作します。しかし、ビューレベルでその結果を見る前に、すべてのドキュメントを更新して再保存する必要があります。多くのドキュメントがあり、ユーザーにレプリカがある場合、ヒットします。未読マークも変更されます。また、計算されたフィールドで複数値のチェックボックスが選択されていることを確認します。それがハードコーディングを避けるために私が考えることができる唯一の方法です。 –

1

多分それは洗練聞こえるけど、できれば、あなたの形で自分の列式で新しい計算結果フィールドを作成し、使用することがありますtNames

+0

私はそれが可能だとは思わない。 AFAIKでは、ハードコードされた名前でフィールドを参照する以外に、列の式でフィールド値にアクセスする方法がありません。 –

関連する問題