Tips, Soluciones y Novedades en Tecnología

26/09/2015

Pentaho – solutions


En este post veremos un servicios de pentaho y como sacar provecho de ello para poder integrarlo en nuestra aplicación empresarial

para ello tenemos que analizar  un servicio especifico:

 

/pentaho/SolutionRepositoryService

 

este servicio tiene una serie de parámetros que espera recibir al ser llamado.

  • component: getSolutionRepositoryDoc
  • component: getAcl
  • component: setAcl
  • component: createNewFolder
  • component: delete

 

por cada tipo de componente que queremos solicitar hay otros parámetros que debemos enviar

getSolutionRepositoryDoc         userid password
getAcl solution path filename   userid password
setAcl solution path filename aclXml userid password
createNewFolder solution path name   userid password
delete solution path name   userid password

 

Paso 1: Listar el repositorio de pentaho: pentaho/SolutionRepositoryService?component=getSolutionRepositoryDoc &userid=xx&password=xxx

el resultado es en formatto xml.

 

<?xml version="1.0" encoding="UTF-8"?><repository path="/pentaho-solutions" product-id="POBS" version-build="49886" version-major="4" version-milestone="stable" version-minor="5" version-relase="0">
    <file description="Links for updating the system settings and web service examples" isDirectory="true" lastModifiedDate="1433353698531" localized-name="Admin Services" name="admin" visible="false">
        <file description="Tools for the content Repository" isDirectory="true" lastModifiedDate="1433353698529" localized-name="Content Repository Admin" name="Content" visible="false"/>
        <file description="resources" isDirectory="true" lastModifiedDate="1433353698533" localized-name="resources" name="resources" visible="false">
            <file description="metadata" isDirectory="true" lastModifiedDate="1433353698553" localized-name="metadata" name="metadata" visible="false"/>
        </file>
        <file description="Removes files from the content repository that are more than 180 days old." isDirectory="false" lastModifiedDate="1335477348000" localized-name="Clean Repository" name="clean_repository.xaction" param-service-url="/pentaho/ServiceAction?solution=admin&amp;path=&amp;action=clean_repository.xaction&amp;component=xaction-parameter" url="/pentaho/ViewAction?solution=admin&amp;path=&amp;action=clean_repository.xaction" visible="true"/>
        </file>
    <file description="cdb" isDirectory="true" lastModifiedDate="1436830518047" localized-name="cdb" name="cdb" visible="false">
        <file description="queries" isDirectory="true" lastModifiedDate="1436830518077" localized-name="queries" name="queries" visible="true"/>
        <file description="saiku" isDirectory="true" lastModifiedDate="1436830518013" localized-name="saiku" name="saiku" visible="true"/>
    </file>
    <file description="CDE" isDirectory="true" lastModifiedDate="1443127490702" localized-name="cde" name="cde" visible="true">
        <file description="components" isDirectory="true" lastModifiedDate="1437605131147" localized-name="components" name="components" visible="true"/>
        <file description="widgets" isDirectory="true" lastModifiedDate="1437605131393" localized-name="widgets" name="widgets" visible="true">
            <file description="" isDirectory="false" lastModifiedDate="1437605131329" localized-name="SampleWidget" name="sample.wcdf" url="/pentaho/content/pentaho-cdf-dd/Render?solution=cde&amp;path=widgets&amp;file=sample.wcdf" visible="true"/>
        </file>
    </file>
</repository>

 

  Para como se puede apreciar el xml contendrá todos los archivos y carpetas del repositorio de pentaho

y las propiedades son las siguientes:

  • lastModifiedDate
  • name
  • localized-Name
  • param-service-url
  • url
  • isDirectory
  • isVisible

Siguiendo los nodos y con estos parámetros podemos diferencias si son carpetas o archivos.

 

Ahora supongamos que en la vista nuestro frontend utiliza JSON, acá tendremos una trabajito de procesar este xml y pasarlo a json, filtrando solo los archivo y carpetas visibles

al repositorio.

un resultado en JSON considero necesario para tener todo a la mano seria este JSON.

 

{
    "data":
            [
                {
                    "localizedName": "Testing",
                    "visible": true,
                    "isDirectory": true,
                    "description": "Testing",
                    "name": "Testing",
                    "path": "",
                    "children": [{
                            "localizedName": "saiku",
                            "visible": true,
                            "isDirectory": true,
                            "description": "saiku",
                            "name": "saiku",
                            "path": "",
                            "children": [{
                                    "localizedName": "miarchivo",
                                    "visible": true,
                                    "isDirectory": false,
                                    "description": "",
                                    "name": "miarchivo.saiku",
                                    "path": "saiku",
                                    "editUrl": "/pentaho/content/saiku-ui/index.html?solution=Testing&path=saiku&action=miarchivo.saiku&dimension_prefetch=false&mode=edit&biplugin=true#query/open/miarchivo.saiku",
                                    "lastModifiedDate": "1442801950932",
                                    "param-service-url": "",
                                    "leaf": true,
                                    "type": "saiku",
                                    "solution": "Testing",
                                    "url": "/pentaho/content/saiku-ui/index.html?solution=Testing&path=saiku&action=miarchivo.saiku&dimension_prefetch=false&mode=view&biplugin=true#query/open/miarchivo.saiku"
                                }],
                            "lastModifiedDate": "1442806447920",
                            "expanded": false,
                            "solution": "Testing"
                        }],
                    "lastModifiedDate": "1442801913318",
                    "expanded": false,
                    "solution": "Testing"
                }]
    ,
    "success": true,
    "expanded": false
}

Con este JSON, ya podemos construir un TreePanel en cualquier framework javascript

image

Las extensiones en pentaho son:

Set<String> map = new HashSet<>();
       map.add("saiku");
       map.add("prpt");
       map.add("xcdf");
       map.add("wcdf");
       map.add("adhoc");
       map.add("xaction");
       map.add("waqr");

con ello podemos colocar un icon en función al tipo.

 

PASO 2 :  Crear una carpeta en el repositorio de pentaho :

  pentaho/SolutionRepositoryService?component=createNewFolder&solution=SOLUTION&path=PATH&name=NAME &userid=xx&password=xxx

      

al realizar esta peticion se recibirá un mensaje en XML

  <result>true</result>  si se creo correctamente la carpeta

 y  <result>false</result> si no pudo crearlo

 

interpretamos este resultado y enviamos al cliente.

 

PASO 3:  Eliminar un archivo o carpeta del repositorio de pentaho

  pentaho/SolutionRepositoryService?component=delete&solution=SOLUTION&path=PATH&name=NAME &userid=xx&password=xxx

al realizar esta peticion se recibirá un mensaje en XML

  <result>true</result>  si se elimino

 y  <result>false</result> si no pudo eliminarlo

 

interpretamos este resultado y enviamos al cliente.

 

PASO 4: Obtener los permisos de una carpeta o archivo de pentaho

pentaho/SolutionRepositoryService?component=getAcl&solution=SOLUTION&path=PATH&filename=FILENAME&userid=xx&password=xxx

la respuesta es un xml con la siguiente estructura

<?xml version='1.0' encoding='UTF-8'?>
<acl>
    <entry role='Admin' permissions='-1'/>
    <entry role='cto' permissions='-1'/>
    <entry role='dev' permissions='3'/>
    <entry role='Authenticated' permissions='1'/>
</acl>

 

interpretamos este xml y podemos modificarlo y enviarlo al paso siguiente.

 

PASO 5:  dar o quitar permiso a una carpeta o archivo de pentaho

pentaho/SolutionRepositoryService?component=setAcl&solution=SOLUTION&path=PATH&filename=FILENAME&aclXml=XML_IGUAL_AL_ANTERIOR&userid=xx&password=xxx

 

al realizar esta peticion se recibirá un mensaje en XML

  <result>true</result>  si se añadió los nuevos permisos

 y  <result>false</result> si no pudo añadir los permisos

 

interpretamos este resultado y enviamos al cliente.

 

Como observamos los pasos anteriores, es fácil integrar pentaho a nuestra aplicación empresarial y no depender de su consola de administración para administrar nuestros reportes.

 

Cualquier consulta no duden en escribir.

 

Saludos cordiales.

0 comments:

Publicar un comentario