私は目標が次のようなインジケータに表示条件を使用することを探しています:
編集中の親の子ケースが開いている場合、インディケーターはカウントする必要があります。そうでない場合はカウントしません。
つまり、患者が妊娠しているときに子供の「妊娠」のケースが作成されます。妊娠が終了すると、この子供のケースは閉じられます。したがって、子供の妊娠ケースが開いている場合にのみインジケータをカウントします。そうでない場合は、人がもう妊娠していないことを意味します。
これは表示条件フィールドで可能ですか?
はい、表示条件の詳細モードで実行できます。
必要になるだろう:
count(instance('casedb')/casedb/case[index/parent = instance('commcaresession')/session/data/case_id][@status = 'open']) > 0
これを少し分解するには:
instance('casedb')/casedb/case
はすべてのケースを取得します[index/parent = instance('commcaresession')/session/data/case_id ]
部分は、現在のケースのparent_id
を持つケースまですべてのケースをフィルタリングします[@status = 'open']
フィルターcount
関数は、その数をカウントします。> 0
比較はtrueを返します。Casedbインスタンス式を使用して、「妊娠」ケースタイプである現在のケースの開いている子ケースを検索できます。
ステップ0:生活を楽にし、表現をよりクリーンにするために、現在のケースのcase_idを格納する隠し値を作成することをお勧めします。そのための計算条件は次のとおりです。instance('commcaresession')/session/data/case_id
(以下の手順2でcase_idとして参照されます。このインスタンスパスは CommCare Session Instance help page にあります。
ステップ1:既存のケース(つまり、「case database(db)」)を検索する必要があるすべてのインスタンス式は、次のように始まります:instance('casedb')/casedb/
ステップ2:次に、親が現在のケースであるすべてのケースを検索するように指定します:case[index/parent = case_id]
ステップ3:すべての子ケースの中で、「妊娠」ケースタイプの子のみが必要であることを指定します:[@case_type = 'pregnancy']
ステップ4:そして、現在開いている妊娠中の子供のケースのみが必要な場合:[@status = 'open']
それはあなたに与える:instance('casedb')/casedb/case[index/parent = case_id][@case_type = 'pregnancy'][@status = 'open']
条件に一致するすべてのケースが出力されますが、本当に知りたいのは、いくつあるかということです。
最後のステップ、ステップ5:インスタンスパスの周囲にカウント関数を追加して、まだ開いている子の妊娠ケースがあるかどうかを確認します。これが当てはまる場合は、インジケーターにカウントする必要があります:count(instance('casedb')/casedb/case[index/parent = case_id][@case_type = 'pregnancy'][@status = 'open']) > 0