0

複数のパラメーターを持つJasperReportsを使用してレポートを作成したいのですが、ユーザーがすべてのパラメーターを渡すとレポートは正しく生成されますが、1 つのパラメーターが欠落している場合は何も生成されません。このリクエストを使用します

  SELECT
     t.*,
     u."name" AS username,
     c."name" AS componentName,
     s."designation" AS statusName,
     pr."name" AS priorityName,
     p."name" AS projectName
FROM
     "component" c INNER JOIN "ticket" t ON c."id" = t."component_id"
     INNER JOIN "personne" u ON t."personne_id" = u."id"
     INNER JOIN "status" s ON t."status_id" = s."id"
     INNER JOIN "priority" pr ON t."priority_id" = pr."id"
     INNER JOIN "project" p ON c."project_id" = p."id"
WHERE
     pr.name = $P{priority}
and u.login = $P{userLogin}
and s.designation = $P{status}
and t.creation_date between $P{start} and $P{end}
and c.name = $P{componenet}

パラメータが 1 つ欠けている場合でも、レポートを生成する方法を教えてください。

4

3 に答える 3

0

レポートを生成する前に、Java クラスで where 句を制御できます。

1.Javaでは、パラメーターがnullかどうかを確認してから、次のような小さな検証を行うことができます

StringBuffer sb = new StringBuffer();
if(StringUtils.isNotEmpty(priority)){
        sb.append(" AND pr.name = "+priority);
    }

2. 他のすべての条件について行うu.login, s.designation

3. その後、合格できますreportParam.put("sqlQuery", sb.toString());

4. ireport では、クエリを変更するだけです

WHERE
pr.name = $P{priority}
and u.login = $P{userLogin}
and s.designation = $P{status}
and t.creation_date between $P{start} and $P{end}
and c.name = $P{componenet}

WHERE 1=1 $P!{sqlQuery}

nullJavaクラスの条件を無視するので、今は心配する必要はありません。

于 2013-07-16T03:05:19.617 に答える