Параметры в Ireport / Jasperreports - PullRequest
1 голос
/ 23 января 2012

Я использую инструмент «runjasper.jar» для заполнения файла jxrml. В этом файле у меня есть параметр под названием «запрос везде». Эта строка будет добавлена ​​к SQL-соединению (mysqlDB) через $ P! {Querywhere}, но у меня возникли некоторые проблемы с использованием некоторых символов. например: «an» и (и т. д.

Я открыл файл Java в NetBeans для его отладки. В этой строке:

JasperPrint print = JasperFillManager.fillReport(report, parameters, conn);

Параметры - строка с именем querywhere что равно:

WHERE my_company_id ='12345'

(скопировано с отладчика netbeans) Это нормально.

Если я распечатываю переменную Report

$P{querywhere} 

в отчете у меня будет такая строка:

WHERE m5_pdc.m5_company_id =\'12010901\'

Если я установлю параметр, который экранирует \ на

WHERE my_company_id =\'12345\'

параметр $ P {querywhere}:

WHERE my_company_id =\\'12345\\'

Итак: Короткий вопрос, как я могу передать строку вроде:

WHERE my_company_id ='12345' 

к отчету.

Есть идеи, как передавать символы типа "и"? Кажется, что в этом случае escape-символ не работает.

Спасибо и всего наилучшего

Christian

Ответы [ 2 ]

3 голосов
/ 23 января 2012

Вы можете использовать следующее выражение: SELECT .. FROM .. WHERE strAttr=$P{strFilter} в файле jrxml.

Фрагмент из шаблона отчета (файл jrxml):

<parameter name="strFilter" class="java.lang.String"/>
<queryString>
    <![CDATA[SELECT city FROM address WHERE city=$P{strFilter}]]>
</queryString>
<field name="city" class="java.lang.String"/>

Этот код отлично работает для строк с одинарными, двойными кавычками и символами круглых скобок:

Map<String, Object> params = new HashMap<String, Object>();
JasperReport jasperReport = JasperCompileManager.compileReport(reportSource);
//params.put("strFilter", "Berl)in");
//params.put("strFilter", "Muni\"ch");
params.put("strFilter", "Stuttga'rt");
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, connection);

JasperExportManager.exportReportToPdfFile(jasperPrint, pdfFileName);

Или вы можете использовать такое выражение: SELECT .. FROM .. WHERE $P!{whereClause}.

Фрагмент из шаблона отчета (файл jrxml):

<parameter name="strFilter" class="java.lang.String"/>
<parameter name="whereClause" class="java.lang.String"/>
<queryString>
    <![CDATA[SELECT city FROM address WHERE city=$P{strFilter} $P!{whereClause}]]>
</queryString>

Этот код отлично работает для строк с одинарными, двойными кавычками и скобками:

Map<String, Object> params = new HashMap<String, Object>();
JasperReport jasperReport = JasperCompileManager.compileReport(reportSource);
//params.put("strFilter", "Berl)in");
//params.put("whereClause", "AND city = 'Berl)in'");
//params.put("strFilter", "Muni\"ch");
//params.put("whereClause", "AND city = 'Muni\"ch'");
params.put("strFilter", "Stuttga'rt");
params.put("whereClause", "AND city = 'Stuttga''rt'");
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, connection);

JasperExportManager.exportReportToPdfFile(jasperPrint, pdfFileName);
0 голосов
/ 23 января 2012

вы можете сделать переменную в виде строки при передаче параметра в hasmap, создать параметр в ireport и объявить его как строку в свойствах. Строковое значение, которое вы задали в параметре карты хеша, будет заменено тем же значением.

...