1

レポートに埋め込まれた静的クエリを使用する、私が開発した JasperReport のスニペットを次に示します。

<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="Report" pageWidth="842" pageHeight="595" orientation="Landscape" columnWidth="802" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" isFloatColumnFooter="true">
     <property name="ireport.zoom" value="1.0"/>
     <property name="ireport.x" value="129"/>
     <property name="ireport.y" value="0"/>
     <parameter name="lp" class="java.lang.Integer"/>
     <parameter name="all_price" class="java.lang.Integer"/>
     <parameter name="all_amount" class="java.lang.Integer"/>
     <parameter name="all_total_price" class="java.lang.Integer"/>
     <queryString>
          <![CDATA[SELECT sanaf_number,sanaf,sales_id,sales.sanaf_id,customer_name,  price, total_price, addad, wahda, required_amount FROM sanaf,sales  where (sales.export='0')and(sanaf.sanaf_id=sales.sanaf_id) limit $P{lp}]]>
     </queryString>
     <field name="sales_id" class="java.lang.Integer"/>
     <field name="sanaf_id" class="java.lang.Integer"/>

ResultSetここで、静的クエリの代わりに aを使用する必要があります。レポートを実行するために使用するコードは次のとおりです/

void showResports(){
  try{
    // OriginalExportOriginalExport 
    String reportName ="";

    if(export.equalsIgnoreCase("1")){
      reportName = "OriginalExport.jasper";
    } else if(export.equalsIgnoreCase("0")){
      reportName = "ExportReport4.jasper";
    }

    InputStream in =getClass().getResourceAsStream(reportName);

    if(in==null|| connection==null) return ;

    HashMap parameterMap = new HashMap();
    parameterMap.put("lp", new Integer(selectedNumber));

    if(export.equalsIgnoreCase("0")){
      int all_price=DatabaseManager.countTotalPriceForImport(selectedNumber);
      int all_amount=DatabaseManager.countAmountForImport(selectedNumber);
      int all_total_price=DatabaseManager.countTotalPrice(selectedNumber);

      parameterMap.put("all_price",new Integer(all_price));
      parameterMap.put("all_amount",new Integer(all_amount));
      parameterMap.put("all_total_price",new Integer(all_total_price));
    } else if(export.equalsIgnoreCase("1")){
      int all_requiredAmount=DatabaseManager.countAllRequiredAmount(selectedNumber);
      int all_given_amount=DatabaseManager.countAllGivenAmount(selectedNumber);
      parameterMap.put("all_requiredAmount",new Integer(all_requiredAmount));
      parameterMap.put("all_given_amount",new Integer(all_given_amount));
    }

    JasperPrint jp = JasperFillManager.fillReport(in, parameterMap, connection);
    System.out.println("Object of Jasper Print created");

    JRViewer jv = new JRViewer(jp);
    //Insert viewer to a JFrame to make it showable
    JFrame jf = new JFrame();
    jf.getContentPane().add(jv);
    jf.validate();
    jf.setVisible(true);
    jf.setSize(new Dimension(800,600));
    jf.setLocation(300,100);
    jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);  
  }catch(Exception e){
    e.printStackTrace();
  }
}// showReports
4

1 に答える 1

3

結果セットに、現在レポートに埋め込まれているクエリと同じフィールドが含まれている場合は、レポートqueryStringから を削除してから、次のように変更する必要があります。

JasperFillManager.fillReport(in, parameterMap, connection);

JasperFillManager.fillReport(in, parameterMap, new JRResultSetDataSource(resultSet));

resultSetデータを含む結果セットはどこにありますか。

唯一の複雑な点は、結果セットのフィールドの名前が異なる場合、またはフィールド全体が異なる場合です。その場合、レポートのフィールド名も調整する必要があります。

于 2012-06-05T17:01:36.043 に答える