Crear un manejador de informes de EGL

Un manejador de informes de EGL suministra bloques de código a los que el motor de JasperReports puede acceder durante la ejecución. Nombres de función predefinidos asocian algunos de estos bloques de código con eventos que se producen cuando JasperReports confecciona un informe. Tales eventos pueden incluir el inicio o el final de una página, de un elemento de línea o del propio informe. Puede llamar directamente a otras funciones personalizadas desde el código fuente del archivo de diseño XML.

Para crear un manejador de informes de EGL, haga lo siguiente:
  1. Identifique un proyecto o carpeta para que contenga el archivo. Debe crear un proyecto o carpeta si no tiene uno todavía.
  2. En el entorno de trabajo, pulse Archivo > Nuevo > Otros.
  3. En la ventana Nuevo, expanda EGL.
  4. Pulse Manejador de informes.
  5. Pulse en Siguiente.
  6. Seleccione el proyecto o carpeta que contendrá el archivo fuente EGL y, a continuación, seleccione un paquete.
  7. En el campo Nombre de archivo fuente EGL, teclee el nombre del archivo fuente del manejador de informes. Dado que el nombre de manejador de informes será idéntico al nombre de archivo, elija un nombre de archivo que se ajuste a los convenios de denominación de componentes de EGL (por ejemplo, myReportHandler).
  8. Pulse Finalizar.

El asistente Nuevo manejador de informes de EGL le proporcionará una lista de nombres de función que corresponden a eventos de confección de informe. JasperReports invocará "beforePageInit()", por ejemplo, antes de entrar en una página. Es responsabilidad del usuario crear el código para estas funciones.

Como alternativa, puede añadir esta información de plantilla a un archivo existente siguiendo estos pasos:
  1. Cree un archivo fuente EGL nuevo.
  2. Teclee handler seguido de Ctrl+espacio.
El resto de este tema contiene ejemplos de código que muestran lo siguiente:

Estos ejemplos apenas alcanzan a indicar las complejidades posibles de un manejador de informes. Para more, consulte la documentación de JasperReports.

Plantilla de manejador de informes

Este es el código de plantilla creado por el asistente Nuevo manejador de informes de EGL
handler handlerName type jasperReport

	// Declaraciones Use
	 use usePartReference;

	// Declaraciones de constante
	 const constantName constantType = literal;

	 // Declaraciones de datos
	 identifierName declarationType;

	 // Funciones de llamada de retorno Jasper
	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
end

Obtener parámetros de informe

Los informes pueden contener tres tipos de elementos: parámetros (que se establecen en el archivo XML y no cambian), variables (cambiables en el archivo XML o el manejador de informes) y campos (codificados con nombres en el origen de datos). El fragmento de código siguiente muestra cómo obtener parámetros de informe en un manejador de informes:
handler my_report_handler type jasperReport

	 // Declaraciones de datos 
	report_title	String;

	 // Función de llamada de retorno Jasper
	function beforeReportInit()
		report_title = getReportParameter("TítuloInforme");
	end

end

Obtener y establecer variables de informe

El fragmento de código siguiente muestra cómo obtener y establecer variables de informe en un manejador de informes:
handler my_report_handler type jasperReport

	 // Declaraciones de datos 
	item_count	int;

	 // Función de llamada de retorno Jasper
	function beforeDetailEval()
		item_count = getReportVariableValue("itemCount");
	end

	function afterDetailEval()
		setReportVariableValue("itemCount", (item_count + 1));
	end
end
Recuerde que los tipos de variables del manejador de informes deben coincidir con los del archivo fuente XML.

Obtener valores de campo de informe

El fragmento de código de ejemplo siguiente muestra cómo obtener valores de campo de informe en un manejador de informes:
handler my_report_handler type jasperReport
	
	 // Declaraciones de datos 
	employee_first_name	String;

	 // Función de llamada de retorno Jasper
	function beforeColumnInit()
		employee_first_name = getFieldValue("fName");
	end
end

Guardar datos de informe en el manejador de informes

El siguiente ejemplo de código muestra cómo guardar un registro de cliente bajo el nombre "saveCustomer" para acceder a él más tarde:
handler my_report_handler type jasperReport
	
	 // Declaraciones de datos 
	customer_array	customerRecordType[];
	c 			customerRecordType;

	 // Función de llamada de retorno Jasper
	function beforeReportInit()
		  customer ReportData;

		//crear el objeto ReportData para el subinforme Customer
		  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;
		addReportData(customer, "saveCustomer");
	end	
end

Recuperar datos de informe en el archivo XML

Una vez guardados los datos de informe en el manejador de informes, puede recuperarlos en el archivo fuente XML y pasarlos a un subinforme:
<jasperReport name="MasterReport" ... scriptletClass="subreports.my_report_handler">
...

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

...
</jasperReport>

Invocar una función desde el documento de diseño XML

A continuación figura un manejador de informes con una función muy simple:
handler my_report_handler type jasperReport
	
function hello () returns (String)
		return("Hello, world!");
	end
end
Invóquela desde el documento de diseño XML con este código:
<jasperReport name="MasterReport" ... scriptletClass="my_package.my_report_handler">
...

	<summary>
		<band height="40">
			<textField>
				<reportElement positionType="Float" x="0" y="20" width="500" height="15"/>
				<textElement textAlignment="Center">
					<font reportFont="Arial_Bold" size="10"/>
				</textElement>
				<textFieldExpression class="java.lang.String">
					<![CDATA[((my_package.my_report_handler)$P{REPORT_SCRIPTLET}).hello()]]>
				</textFieldExpression>
			</textField>
		</band>
	</summary>

...
</jasperReport>

La frase "Hello, world!" se imprimirá al final del informe.

Conceptos relacionados
Visión general del proceso de creación de informes de EGL
Visión general de los informes de EGL

Tareas relacionadas
Crear un archivo fuente EGL
Utilizar plantillas de informe

Consulta relacionada
Funciones adicionales del manejador de informes de EGL
Biblioteca ReportLib de EGL
Manejador de informes de EGL
Funciones predefinidas del manejador de informes de EGL

Comentarios
(C) Copyright IBM Corporation 2000, 2005. Reservados todos los derechos.