web-dev-qa-db-ja.com

表示条件で子ケースを参照する方法

私は目標が次のようなインジケータに表示条件を使用することを探しています:

編集中の親の子ケースが開いている場合、インディケーターはカウントする必要があります。そうでない場合はカウントしません。

つまり、患者が妊娠しているときに子供の「妊娠」のケースが作成されます。妊娠が終了すると、この子供のケースは閉じられます。したがって、子供の妊娠ケースが開いている場合にのみインジケータをカウントします。そうでない場合は、人がもう妊娠していないことを意味します。

これは表示条件フィールドで可能ですか?

はい、表示条件の詳細モードで実行できます。

必要になるだろう:

count(instance('casedb')/casedb/case[index/parent = instance('commcaresession')/session/data/case_id][@status = 'open']) > 0

これを少し分解するには:

  1. instance('casedb')/casedb/caseはすべてのケースを取得します
  2. [index/parent = instance('commcaresession')/session/data/case_id ]部分は、現在のケースのparent_idを持つケースまですべてのケースをフィルタリングします
  3. 開いているケースのみの[@status = 'open']フィルター
  4. 現在のケースの子であり、開いているすべてのケースがあります。それはケースのリストを返します。 count関数は、その数をカウントします。
  5. 最後に、開いている子ケースがある場合、> 0比較はtrueを返します。
3
Ben Rudolph

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

0
Ali F