Contexto
Recientemente desarrollé un proyecto en Codeigniter 3 en donde se consumen reportes alojados en JasperServer, sin embargo quise crear también la versión para la versión 4 de codeigniter, con el paquete de composer llamado Jaspersoft Rest Client, y decidí compartir una de las configuraciones que utilicé inicialmente, puede que les de una idea de cómo implementarlo y mejorar el consumo de reportes usando una API de éste tipo
Qué es CodeIgniter?
CodeIgniter es un framework de desarrollo de aplicaciones web de código abierto y basado en PHP. Fue creado por EllisLab y ahora es mantenido por la comunidad de desarrolladores. CodeIgniter proporciona una estructura ligera y sencilla para desarrollar aplicaciones web rápidas y eficientes, siguiendo el patrón de diseño MVC official site.
Qué es Jaspersoft Rest Client?
Es una librería que se utilizar para realizar peticiones e interactuar con los reportes alojados en Jasper Reports Server a través de la API REST en PHP nativo. Esto permite incrustar más fácilmente los datos en el servidor de reportes, o realizar tareas administrativas en el servidor utilizando PHP.
Requerimientos para éste ejemplo
El proyecto se puede descargar de https://github.com/jesusferm/Codeigniter-4-Jaspersoft-Rest-Client
- SO Fedora 38 (Puede usarse otro SO, sin embargo se utilizó una distro GNU/Linux)
- XAMPP 8.2.4
- PHP 8.2.4
- Codeigniter 4
- Jaspersoft Rest Client
- Composer
- Installación de Jaspersoft Rest Client en Codeigniter 4
Configuración de Jasper Server
** Importante! Se asume que se cuenta con Jasper Server configurado y con al menos un reporte, ya sea con conexión a base de datos o no.
Descargar Codeigniter 4
Crear el proyecto de codeigniter 4
composer create-project codeigniter4/appstarter civ4-jasper
Entrar al proyecto desde la terminal y descargar el paquete:
composer require jaspersoft/rest-client
Configuración de Codeigniter
Configurar el archivo .env con los accesos de jasperserver
JASPER_SERVER_USERNAME=jasperadmin JASPER_SERVER_PASSWORD=jasperadmin JASPER_SERVER_URL=http://localhost:8080/jasperserver
Configurar autoload
Añadir que se autocarguen los siguiente elementos:
[...] public $psr4 = [ APP_NAMESPACE => APPPATH, 'App' => APPPATH, 'Config' => APPPATH.'Config', 'Helper' => APPPATH.'Helper', ]; [...]
Archivo helper reports
Crear en dentro del directorio helpers el archivo reports_helper.php y añadir lo siguiente ** Aquí se configura la jasper server, por lo que si las contraseñas o dirección url, no corresponden a las predeterminadas, realizar el cambio
<?php
use Jaspersoft\Client\Client;
function reporte($idRegistro, $name, $params, $type = 'pdf')
{
try {
$client = new Client(env('JASPER_SERVER_URL'), env('JASPER_SERVER_USERNAME'), env('JASPER_SERVER_PASSWORD'));
$report = $client->reportService()->runReport('/reports/'.$name, $type, null, null, $params);
$nombre_temporal = str_replace('/', '_', $name).'_'.$idRegistro.'.'.$type;
$config['upload_path'] = '../files/reports/';
/* $config['max_size'] = '1000000';
$config['max_width'] = '10240000000';
$config['max_height'] = '76889';
$config['encrypt_name'] = true;
$config['allowed_types'] = 'jpg|jpeg|png|gif|pdf';
$config['file_name'] = $nombre_temporal; */
if (! write_file($config['upload_path'].$nombre_temporal, $report)) {
return 'Unable to write the file';
} else {
return $config['upload_path'].$nombre_temporal;
}
} catch (Throwable $error) {
return 'error '.$error;
}
}
Invocar a la función reporte
Para invocar a la función reporte, es necesario pasar los siguientes parámetros:
Un id consecutivo, el nombre del reporte que debe estar en el servidor de jasper, la lista de parámetros en caso que se requieran en el reporte, y el formato del reporte que se quiera obtener.
[...]
public function reports()
{
$params = [
'nombre_movimiento' => 'Reporte uno',
'autoriza' => '',
'cargo' => '',
];
$data['pdf'] = reporte(1, 'Codeigniter/reporteuno', $params, 'pdf');
return view('reports', $data);
}
[...]
Iniciar el proyecto
php spark serve
Acceder a la ruta http://localhost:8081/reports
El proyecto completo lo pueden descargar de GitHub
Algunas fuentes de consulta
– https://stackoverflow.com/questions/39633886/how-to-integrate-jasper-reports-in-codeigniter-php
– https://blog.e-zest.com/integration-of-jaspersoft-report-php-codeigniter-web-framework
– https://forum.codeigniter.com/thread-77397.html
– https://forum.codeigniter.com/thread-1202.html