手工创建 EGL 报告处理程序

如果不想使用“新建 EGL 报告处理程序向导”来创建报告处理程序,可手工创建报告处理程序。

要手工创建报告处理程序,遵循下列步骤:
  1. 创建新的 EGL 源文件。
  2. 或者:
    • 手工输入处理程序代码。
    • 使用报告处理程序模板插入处理程序,如下所示:
      1. 浏览至报告处理程序模板并选择想要的模板。
      2. 单击编辑
      3. 输入 handler,然后按 Alt+/ 键。
      4. 根据需要更改模板代码。
本主题的余下部分包含显示下列各项的代码示例:

可针对您的应用程序复制此代码并修改它。

样本代码,它将显示用于手工创建报告处理程序的语法

以下代码显示用于手工创建 EGL 报告处理程序的一般语法:
handler handlerName type jasperReport
	
	 // Use Declarations (optional)
	 use usePartReference;
	
  	// Constant Declarations (optional)
	 const constantName constantType = literal;
	
	 // Data Declarations (optional)
	 identifierName declarationType;
	
	 // Pre-defined Jasper callback functions (optional)
	 function beforeReportInit()
		...
	 end 
	
	 function afterReportInit()
...
  end
    	
	 function beforePageInit()
		...
	 end 
	
	 function afterPageInit()
		...
	 end 
	
	 function beforeColumnInit()
		...
	 end 
	
	 function afterColumnInit()
		...
	 end 
	
	 function beforeGroupInit(stringVariable string)
		...
	 end 
	
	 function afterGroupInit(stringVariable string)
		...
	 end 
	
	 function beforeDetailEval()
		...
	 end 
	
	 function afterDetailEval()
		...
	 end 
	
	 // User-defined functions (optional)
	 function myFirstFunction()
		...
	 end 
	
	 function mySecondFunction()
		...
	 end 
end
    

显示如何获取报告参数的示例

以下代码段显示如何在报告处理程序中获取报告参数:
handler myReportHandler type jasperReport
	
	// Data Declarations
	 report_title	String;

	 // Jasper callback function
	 function beforeReportInit()
...

 		  report_title = getReportTitle();

...
  end
    
	...
	
	 // User-defined function
	 function getReportTitle() Returns (String)
    	return (getReportParameter("ReportTitle"));
  	end
	
end
    

显示如何设置和获取报告变量的示例

下面的代码段显示如何在报告处理程序中设置和获取报告变量:
handler myReportHandler type jasperReport
	
  	// Data Declarations
	 employee_serial_number	int;

	 // Jasper callback function
	 function afterPageInit()
		...
		  employee_serial_number = getSerialNumberVar();
		...
	 end 
	
	...
	
	 // User-defined function
	 function getSerialNumberVar() Returns (int)
    	employeeName String;
   	 employeeName = "Ficus, Joe";
   	 setReportVariableValue("employeeNameVar", employeeName);
   	 return (getReportVariableValue("employeeSerialNumVar"));
  	end
end
    

显示如何在报告处理程序中获取字段值的示例

以下示例代码段显示如何在报告处理程序中获取报告字段值:
handler myReportHandler type jasperReport
	
	// Data Declarations
	 employee_first_name	String;

	 // Jasper callback function
	 function beforeColumnInit()
		  ...
		  employee_first_name = getFirstNameField();
		  ...
	 end 
	
  	...
	
	 // User-defined function
	 function getFirstNameField() Returns (String)
    	fldName String;
    	fldName = "fname";
    	return (getFieldValue(fldName));
  	end
	
end
    

显示如何在报告处理程序中添加报告数据灵活记录的示例

下面的示例代码显示如何在报告处理程序中添加报告数据灵活记录:
handler myReportHandler type jasperReport
	
	// Data Declarations
	customer_array 	customerRecordType[];
	c 			customerRecordType;

	// Jasper callback function
	 function beforeReportInit()
		  customer ReportData;
		  datasetName String;
		
   		//create the ReportData object for the Customer subreport
		  c.customer_num  = getFieldValue("c_customer_num");
    c.fname         = getFieldValue("c_fname");
    c.lname         = getFieldValue("c_lname");
    c.company       = getFieldValue("c_company");
    c.address1      = getFieldValue("c_address1");
    c.address2      = getFieldValue("c_address2");
    c.city          = getFieldValue("c_city");
    c.state         = getFieldValue("c_state");
    c.zipcode       = getFieldValue("c_zipcode");
    c.phone         = getFieldValue("c_phone");	
    customer_array.appendElement(c);
		  customer.data = customer_array;	
    	datasetName = "customer";
    	addReportData(customer, datasetName);
  		    end	   
end
    

显示 XML 设计文档如何从报告处理程序获取报告数据记录的示例

下面的代码段显示 XML 设计文档如何从报告处理程序获取报告数据灵活记录:
<jasperReport name="MasterReport" 
   scriptletClass="subreports.SubReportHandler">
...

<subreport>
	 <dataSourceExpression>
    <![CDATA[(JRDataSource)(((subreports.SubReportHandler) 
    $P{REPORT_SCRIPTLET}).getReportData( 
       new String("customer")))]]&gt;
  </dataSourceExpression>
	 <subreportExpression class="java.lang.String">
    <![CDATA["C:/RAD/workspaces/Customer.jasper"]]&gt;
  </subreportExpression>
</subreport>

...
</jasperReport>

相关概念
EGL 报告概述
EGL 报告创建过程概述

相关任务
创建 EGL 源文件
创建 EGL 报告处理程序
使用报告模板

相关参考
EGL 报告库
EGL 报告处理程序
预定义报告处理程序函数
其它 EGL 报告处理程序函数

使用条款 | 反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.