Tips, Soluciones y Novedades en Tecnología

26/09/2015

Save As adhoc


adhoc, en la versión community no tiene botones guardar o guardar como, por ello cuando se requiere abrirlo en una ventana individual, no es posible actualizarlo o crear otro a partir de ello

pero estos magníficos plugins disponen de un api de integración para este cometido (saiku y adhoc), después explicare en otro post a cerca de saiku.

 

por hora veamos algunos escenario con la integración de adhoc con un proyecto web.

En muchos casos necesitamos integrar pentaho en nuestra aplicación web, pero como lo hacemos si no queremos incluirlo al BA SERVER, como un iframe o como una aplicación independiente

entonces insertamos en un iframe  /pentaho/content/saiku-adhoc/web/index.html?biplugin=true, pero si queremos administrar estos reportes desde nuestra aplicación se nos complica la cosa

y solo podremos ver los reportes guardados y creados desde el BASERVER.

 

hoy vamos a dar las pautas necesarias para aquellos que quieran integrarlo en su aplicación web.

 

para comenzar tanto saiku como adhoc tiene un plugin de integración que se encuentra en la ruta:

\pentaho-solutions\system\saiku-adhoc\web\js\adhoc\plugins\BIServer\plugin.js

 

pero veamos en funcionamiento de adhoc.

  adhoc

 

y veamos la parte mas importante del archivo anteriormente mencionado.

var puc = {
    allowSave: function(isAllowed) {
       

        if(top.mantle_initialized !== undefined && top.mantle_initialized &&
            top.parent.enableAdhocSave ) {
            if (window.ALLOW_PUC_SAVE === undefined || ALLOW_PUC_SAVE) {
                top.parent.enableAdhocSave(isAllowed);
               
            }
        }
    },
   
    refresh_repo: function() {
        if(top.mantle_initialized !== undefined && top.mantle_initialized) {
            top.mantle_refreshRepository();
        }
    },
   
    save_to_solution: function(filename, solution, path, type, overwrite) {
       
        var self = this;
       
        var query = Application.tabs._tabs[0].content.query;
        query.action.get("/json", {
            success: function(model, response) {
               
                var queryToSave = jQuery.parseJSON(response.json);

                queryToSave.maxClientSeq = query.workspace.idCounter;
               
                var savedQuery = JSON.stringify(queryToSave, null, ' ');
               
                (new SavedQuery({
                    name: filename,
                    newname: query.get('name'),
                    json: savedQuery,
                    solution: solution,
                    path: path,
                    action: filename,
                    overwrite: overwrite
                })).save({},{
                    success: function() {
                        puc.refresh_repo();}
                });
            }
        });
    }
};

 

como podemos observar hay tres metodos: allowSave,refresh_repo y save_to_solution

- allowSave : esta tiene una función principal y es la encargada de notificar a la pagina que contiene al iframe embebido, siempre en cuando la pagina tenga una variable mantle_initialized

-  refresh_repo : esta función también hace un llamado al pagina que contiene el iframe notificando que el reporte fue guardado y que refresquen el repositorio

- save_to_solution: aquí recibimos los parámetros de la pagina que contienen al iframe, el cual nos enviar los parámetros siguientes:

  • solution
  • path
  • name
  • write

 

en un .html debemos definir un iframe con src=”/pentaho/content/saiku-adhoc/web/index.html?biplugin=true” para cargar el adhoc

una vez definida creamos un archivo javascript que contenga las siguientes funciones.


/**
* JS Integration, interaccion con js iframe content report.
*
*/

var mantle_initialized = true;
var lastMessage;
/**
*
* @param {type} contentEdit
* @returns {undefined}
*/
function enableContentEdit(contentEdit) {
    console.log("enableContentEdit : " + contentEdit);
}
/**
*
* @param {type} contentEdit
* @returns {undefined}
*/
function setContentEditSelected(contentEdit) {
    console.log("setContentEditSelected : " + contentEdit);
}

/**
*  EN ESTA FUNCION ADHOC NOS DICE QUE YA SE PUEDE GUARAR ESTE REPORTE

* @param {type} adhocSave
* @returns {undefined}
*/
function enableAdhocSave(adhocSave) {
    console.log("Call : enableAdhocSave ->  " + adhocSave);
    if (adhocSave) {
        /**
         * Mostrar Boton Guardar y Guardar como
         */
    } else {
        /**
         * Ocultar Boton Guardar y Guardar como
         */
    }
}
/**
* ADHOC NOS NOTIFICA PARA REFRESCAR EL REPOSITORIO
* @returns {undefined}
*/
function mantle_refreshRepository() {
    console.log("Call refresh Tree");
}

/**
* ADHOC  NOS ENVIA UN MENSAJE SI SE PRODUJO UN ERROR AL GUARDAR EL REPORTE

* @param {type} title
* @param {type} details
* @returns {undefined}
*/
function mantle_showMessage(title, details) {
    lastMessage = title + ": " + details;
    console.log("mantle_showMessage Title : " + title + ", Detail: " + details);
}

 

ahora procedemos hacer una corrida, supongamos que inicializamos el iframe, y creamos nuestro reporte, una vez haya datos en el reporte, adhoc ejecutara la función ALLOWSAVE

y si el usuario desea guardar tendrá que seccionar una ubicación del repositorio y un nombre que desea darle al nuevo reporte

tree

 

Una vez que el usuario haya seleccionado la ubicación correspondiente procedemos a preparar estas variables

  • var solution
  • var path
  • var name
  • var write (true si el usuario selecciono un reporte del repositorio y desea sobrescribirlo)

con estos valores ya podemos decirle a ADHOC, que guarde nuestro reporte y ejecutamos el siguiente javascript

en este caso el iframe que contiene al adhoc es el siguiente

<iframe name="adhoc" ..

 

window.frames["adhoc"].gCtrlr.repositoryBrowserController.remoteSave(name,solution,'/' + path, null, write);

 

con esto se ejecutara la funcion remoteSave de plugin.js y esta enviara los parametros aa puc.save_to_solution(name,solution,path,null,write);

después de guardarlo adhoc nos notificara a

/**
* Refrescar el arbol
* @returns {undefined}
*/
function mantle_refreshRepository() {
    console.log("Call refresh Tree");
}

 

y en nuestro .html refrescaremos el repositorio en el cual se encontrara el archivo guardado.

 

pentaho

Cualquier consulta no duden en escribir.

Saludos cordiales

0 comments:

Publicar un comentario