1

別の入力コントロールに入力するために使用されるいくつかの入力コントロールを含むレポートがあります。

私の入力コントロール:

  1. GPI - 製品コードを持つ複数選択入力コントロール。パラメータはコレクションです。
  2. NAME_LOOKUP - ユーザーが製品名を入力できる単一値のテキスト ボックス。パラメータは文字列です。
  3. NDC - GPIおよびNAME_LOOKUPに入力された内容に基づいて値を取得する薬物コードのリスト。

NDCを設定するクエリには、次のWHEREがあります。

 WHERE (
   REGEXP_LIKE(DESCRIPTION, $P{name_lookup}, 'i')
   OR REGEXP_LIKE(NDC, $P{name_lookup}, 'i')
       )
   OR ($X{IN, GPI, gpi}) 

これは、構文が設計されているとおりに機能します。ユーザーがリストからGPI値を$X選択しない場合、私のNDC入力コントロールはすべての薬物コードを表示します。ただし、GPI入力コントロールから値が実際に選択されている場合にのみ、ドラッグ コードを表示したいと考えています。

やってみると

 WHERE (
   REGEXP_LIKE(DESCRIPTION, $P{name_lookup}, 'i')
   OR REGEXP_LIKE(NDC, $P{name_lookup}, 'i')
       )
   OR ($X{IN, GPI, gpi} AND $P{gpi} IS NOT NULL) 

NDC入力コントロールのJasperReports Serverで無効な列タイプを取得します。

やってみると

 WHERE (
   REGEXP_LIKE(DESCRIPTION, $P{name_lookup}, 'i')
   OR REGEXP_LIKE(NDC, $P{name_lookup}, 'i')
       )
   OR ($X{IN, GPI, gpi} AND $P!{gpi} IS NOT NULL) 

式が見つからないというエラーが発生します。

NDC入力コントロールの結果をすべての結果ではなく、選択したGPIのみに制限するにはどうすればよいですか?

4

2 に答える 2

2

同じ問題が発生しているときにこれを見つけました。リストの長さを保持する2番目のパラメーターを使用して最終的に解決しました。

<parameter name="potentially_empty_list" class="java.util.Collection"/>
<parameter name="num_of_list_elements" class="java.lang.Integer" isForPrompting="false">
        <defaultValueExpression>
<![CDATA[$P{potentially_empty_list}.size()]]>
</defaultValueExpression>
</parameter>

SQL クエリは次のようになります。

[... select etc...]
WHERE $X{IN,mysql_column_name, ist}
AND $P{num_of_list_elements} > 0

空のリストの場合、次のように mysql に送信されます。

WHERE 0 = 0 #(that's how jasper parses $X{IN..} for an empty collection
AND 0 > 0   # don't match anything :)
于 2013-04-17T11:23:28.677 に答える