Saltar a contenido

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.