0

Jaspersoft Studio 数据集对话框突然出现以下问题:

第一:运行第一个查询select KN_Perzentile from "Kennzahl" where KN_ID = 215 and KN_RefWert1 = 8.3并单击刷新预览数据后,Studio 显示读取了 2 个字段(实际上应该是一个,因为我测试了针对 DB 的查询),但数据根本不会显示!

第二:在那里运行任何其他查询都会遇到错误,说找不到字段KN_Perzentile !在第二个查询中根本不问这个字段!

这两个查询都针对数据库进行了测试并且是正确的。我只有一个项目有这些问题。

变量vVisual应该从数据库中读取值。构建路径中的 java 类应该读取他的变量并将其用于创建图表。但数据不会添加到图表中。我猜那是因为 jasper 不读取 KN_Perzentile。这是生成后 Visual Basic = 0 的图表: 在此处输入图像描述 这是 jrxml:

<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="JFreeReport" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="1edc4d15-06d0-46cf-8d57-179fd0bed566">
<scriptlet name="BoxPlotScript" class="testProjektIman.toc.JFreeChartScriptlet"/>
<queryString>
    <![CDATA[select KN_Perzentile  from  "Kennzahl"  where  KN_ID = 215 and KN_RefWert1 = 8.3
]]>
</queryString>
<field name="KN_Perzentile" class="java.lang.Double"/>
<variable name="Pie" class="net.sf.jasperreports.engine.JRRenderable" calculation="System">
    <variableExpression><![CDATA[$V{Pie}]]></variableExpression>
    <initialValueExpression><![CDATA[$V{Pie}]]></initialValueExpression>
</variable>
<variable name="vVisual" class="java.lang.Double" calculation="First">
    <variableExpression><![CDATA[$F{KN_Perzentile}]]></variableExpression>
    <initialValueExpression><![CDATA[$F{KN_Perzentile}]]> </initialValueExpression>
</variable>
<detail>
    <band height="290" splitType="Stretch">
        <image scaleImage="Clip" hAlign="Center">
            <reportElement x="60" y="50" width="440" height="215"  uuid="60c9de91-e7ad-4ffb-81fd-109a381532b6"/>
            <imageExpression><![CDATA[$V{Pie}]]></imageExpression>
        </image>
    </band>
</detail>
</jasperReport>

Java 类:

public class JFreeChartScriptlet extends JRDefaultScriptlet

{

@Override
public void afterReportInit() throws JRScriptletException {
    Double testVb = 0.0;
    DefaultPieDataset dataset = new DefaultPieDataset();
    testVb = (Double) this.getVariableValue("vVisual");
    dataset.setValue("Java", new Double(43.2));
    dataset.setValue("Visual Basic", testVb);
    dataset.setValue("C/C++", new Double(17.5));
    dataset.setValue("PHP", new Double(32.5));
    dataset.setValue("Perl", new Double(1.0));

    JFreeChart chart =
        ChartFactory.createPieChart3D(
                "Pie Chart 3D Demo 1",
                dataset,
                true,
                true,
                false);

    PiePlot3D plot = (PiePlot3D) chart.getPlot();
    plot.setStartAngle(290);
    plot.setDirection(Rotation.CLOCKWISE);
    plot.setForegroundAlpha(0.5f);
    plot.setNoDataMessage("No data to display");
    this.setVariableValue("Pie", new JCommonDrawableRenderer(chart));
}

}
4

1 回答 1

1

第一的

我没有看到结果中任何字段的任何使用。$V{Pie}只是指自己并在报告Detail带中使用,$V{vVisual}正在计算但未在任何地方使用。

由于这种结构,没有显示任何字段。

第二

有一个field定义叫KN_Perzentile. 如果您更改查询并且您的查询不再返回此字段(具有正确的数据类型),您将收到您所看到的错误。

编辑

根据scriptlets 的文档,有两条规则需要遵守:

确保报表模板中的变量由 Scriptlet(或子报表)填充时的重要部分是确保该变量在报表设计中具有“系统”的计算类型:

<variable name="AllCities" class="java.lang.String" calculation="System"/>

另请注意,没有变量表达式。在使用 Scriptlet 提供的值在您自己的报表中创建变量时,请确保记住这两点。

在此之后,variableExpressionsystem删除变量的 。

于 2016-06-24T08:20:30.937 回答