Rules Report
Las reglas Report son un mecanismo para escribir informes personalizados usando reglas.
Este es un mecanismo poderoso que permite el uso de operaciones de reglas Clarive para generar datos que pueden recopilarse de muchas fuentes, no solo de la base de datos de Clarive.
Para escribir reglas report, necesitamos tener en cuenta muchas estrategias de generación de informes, principalmente:
-
Authentication - su regla debe encargarse de verificar si el usuario tiene permiso o no para ver el informe.
-
Paging - grandes cantidades de datos requieren que se configure la paginación.
Metadatos del Report¶
Como parte de la regla report, necesitamos declarar metadatos que definen los tipos de columnas que están siendo devueltos por el informe.
La buena noticia es que podemos devolver diferentes metadatos de informe dependiendo de los parámetros de entrada, por lo que los informes pueden ser altamente dinámicos dependiendo de lo que queramos mostrar.
La estructura de metadatos necesita ser devuelta con una función
asignada a la clave stash report_meta.
Esta es la estructura de metadatos típica generada por una operación Server CODE
de ClaJS que necesitamos incluir en nuestra regla Report:
cla.stash( 'report_meta', function(){ return { fields: { ids: [ 'id', 'title'], columns: [ {id: 'id', text: 'Mid'}, {id: 'title', text: 'Title'} ], report_name: 'MyReport', report_type: 'custom', hide_tree: true } } });
Donde una function() devuelve la estructura de metadatos del informe
que se va a utilizar para generar el informe.
Datos del Report¶
Los datos del informe serán el resultado de llamar a una función asignada a la variable
stash report_data.
La función devolverá una estructura de datos hash con 2 campos: data (con un
array de objetos) y el campo cnt, que es el recuento total de filas.
El siguiente es un ejemplo de una entrada de operación Server CODE en
ClaJS para una consulta directa de colección de topics.
cla.stash( 'report_data', function( params ){ var db = require('cla/db'); var start = params.start || 0; var limit = params.limit || 25; // sorting var sort = {}; var dir = params.dir; if( params.sort ) { sort[ params.sort ] = dir == 'ASC' ? 1 : -1; } else { sort['_seq'] = 1; } var where = {}; var query = params.query; if( query ) { where['_txt'] = cla.regex(query); } var rs = db.getCollection('topic').find( where ); rs.fields({ mid: 1, title: 1 }); rs.sort( sort ); rs.skip( start ); rs.limit( limit ); var cnt = rs.count(); var doc; var rows = []; while( doc = rs.next() ) { rows.push({ id: doc.mid, title: doc.title }); print( doc.title ); } return { data: rows, cnt: cnt } });
Seguridad del Report¶
La seguridad del informe necesita ser implementada por la regla, de lo contrario la regla no será visible para el usuario en el explorador de Reports.
Aquí hay un ejemplo de una operación de paleta Server CODE
con código ClaJS que verifica un cierto nombre de usuario
y devuelve true/false (permitir/bloquear) acceso del usuario
al informe:
cla.stash( 'report_security', function( params ){ if ( params.username == 'admin' ) { return true; } else { return false; } });
CLARIVE 7.0 También puede verificar roles de usuario en lugar de IDs de usuario. El objeto params
viene cargado con un array de los roles del usuario que ha iniciado sesión.
cla.stash( 'report_security', function( params ){ if ( params.roles.indexOf('DEVELOPER') > -1 ) { // assuming you have the DEVELOPER role in your system return true; } else { return false; } });
Todo
En la versión Clarive 7.2 habrá un verificador de seguridad más robusto como parte de la paleta de reglas.
Super Usuarios¶
Los super usuarios (usuarios que tienen action.admin.root) tienen acceso al
informe automáticamente. En otras palabras, el sistema no ejecutará el método report_security
cuando el usuario sea un super usuario.