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&path=&action=clean_repository.xaction&component=xaction-parameter" url="/pentaho/ViewAction?solution=admin&path=&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&path=widgets&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
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