Как установить значение параметра REPORT_TIME_ZONE? - PullRequest
0 голосов
/ 11 июня 2018

Как установить часовой пояс отчета, используя встроенный параметр REPORT_TIME_ZONE?

1 Ответ

0 голосов
/ 11 июня 2018

TimeZone может быть легко передан в отчет с помощью кода.Например, с Java:

Map<String, Object> params = new HashMap<>();
params.put(JRParameter.REPORT_TIME_ZONE, TimeZone.getTimeZone("Europe/London"));

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, new JREmptyDataSource());

В случае, если вы попытаетесь изменить REPORT_TIME_ZONE непосредственно на jrxml следующим образом:

<parameter name="REPORT_TIME_ZONE" class="java.util.TimeZone">
    <defaultValueExpression><![CDATA[java.util.TimeZone.getTimeZone("Europe/Copenhagen");]]></defaultValueExpression>
</parameter>

youполучит эту ошибку:

Caused by: net.sf.jasperreports.engine.JRException: org.xml.sax.SAXParseException; lineNumber: 10; columnNumber: 14; Error at line 10 char 14: Duplicate declaration of parameter: REPORT_TIME_ZONE

Если вам действительно нужно установить параметр в шаблоне, вы можете использовать этот трюк:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="TimeZone sample" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="595" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0">
    <variable name="fake" class="java.util.TimeZone">
        <variableExpression><![CDATA[java.util.TimeZone.getDefault()]]></variableExpression>
        <initialValueExpression><![CDATA[$P{REPORT_PARAMETERS_MAP}.put("REPORT_TIME_ZONE", java.util.TimeZone.getTimeZone("Europe/Moscow"))]]> </initialValueExpression>
    </variable>
    <title>
        <band height="60">
            <textField>
                <reportElement x="0" y="30" width="100" height="30"/>
                <textFieldExpression><![CDATA[new Date()]]></textFieldExpression>
            </textField>
        </band>
    </title>
</jasperReport>

В этом примере я изменилзначение параметра через параметры Карта с помощью фиктивной переменной:

$P{REPORT_PARAMETERS_MAP}.put("REPORT_TIME_ZONE", java.util.TimeZone.getTimeZone("Europe/Moscow"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...