Web Scripts y búsquedas en Alfresco

36
Web Scripts 1

Transcript of Web Scripts y búsquedas en Alfresco

Page 1: Web Scripts y búsquedas en Alfresco

Web Scripts

1

Page 2: Web Scripts y búsquedas en Alfresco

Qué nos permite un Web Script

• Construir servicios identificados por una URI y que son accesibles mediante HTTP.

• Convertir el repositorio de Alfresco en un Servidor HTTP que permite el acceso a sus contenidos.

• No es necesario ninguna herramienta adicional.

• No es necesario tener conocimientos de Java.

2

Page 3: Web Scripts y búsquedas en Alfresco

3

WebScripts frente a APIs tradicionales

• APIS tradicionales:

• Lo que hemos visto en el primer día.

• Collección de métodos para interaccionar con el repositorio.

• Desventaja: los documentos no son accesibles directamente, sino que debemos escribir código capaz de invocar a los métodos del API.

• Web Scripts:

• Se sigue un estilo llamado REST (REpresentational State Transfer).

• Las llamadas a métodos no son el centro de atención.

• En su lugar, tenemos URIs (Uniquely Identified Resources) y un interfaz de acceso mediante HTTP.

Page 4: Web Scripts y búsquedas en Alfresco

4

Acceso REST (1)

• Los Web Scripts proporcionan acceso REST al contenido del repositorio de Alfresco.

• Permite establecer controles a los contenidos empresariales del repositorio.

• Además, proporciona una forma de acceder uniformemente a los contenidos por parte de aplicaciones y servicios cliente, como por ejemplo:

• El navegador web.

• Portales.

• Una aplicación personalizada.

• Permite ver a los repositorios de contenidos de Alfresco como una colección de documentos interrelacionados entre sí.

Page 5: Web Scripts y búsquedas en Alfresco

5

Acceso REST (2)

• Permite contruir un interfaz de peso ligero usando tecnologías como JavaScript.

• Podemos mapear contenido dentro del repositorio con recursos en la web (URIs).

Page 6: Web Scripts y búsquedas en Alfresco

6

Soluciones donde se han usado Web Scripts

• Integración de Alfresco con sistemas de terceros.

• Portlets.

• Búsquedas personalizadas.

• Integración con Office.

• Desarrollo de aplicaciones para Facebook.

Page 7: Web Scripts y búsquedas en Alfresco

7

Qué es un Web Script

• Es un servicio ligado a una URI que responde a métodos HTTP.

• Métodos HTTP: GET, POST, PUT y DELETE.

Page 8: Web Scripts y búsquedas en Alfresco

8

Tipos de Web Scripts

• Web Scripts de datos y Web Scripts de presentación.

• Web Scripts de datos:

• Encapsulan el acceso y la modicación de contenidos del repositorio.

• Son proporcionados y expuestos por el servidor de Alfresco.

• Alfresco proporciona una serie de Web Scripts de datos listos para ser usados.

• Web Scripts de presentación:

• Permiten construir interfaces de usuario.

• Típicamente, renderizan HTML.

• Pueden ser almacenados en el servidor de Alfresco, pero también en un servidor web separado.

Page 9: Web Scripts y búsquedas en Alfresco

9

Componentes de la implementación de un Web Script

• Un documento que describe, entre otras cosas, la URI asociada al Web Script.

• Un script de control. Este script:

• Se escribe en JavaScript.

• Es opcional.

• Realiza el trabajo propiamente dicho del Web Script.

• Puede actualizar el repositorio de Alfresco.

• Tiene acceso a todos los argumentos de la URI y a los servicios de Alfresco.

• Una o más plantillas de Freemaker:

• Se conocen como vistas.

• Se encargan de renderizar la salida en el formato adecuado. Por ejemplo, HTML o XML.

• Tiene acceso a todos los argumentos de la URI y a los datos construidos por el script de control, si es que existe.

Page 10: Web Scripts y búsquedas en Alfresco

10

Acceso a los Web Scripts

• Suponiendo que está en nuestra máquina: http://localhost:8080/alfresco/service/index.

• Ejemplo de Web Script que tiene los 3 elementos: Retrieve Day Events.

• Ejemplo de Web Script sin script de control: Tagging Actions.

Page 11: Web Scripts y búsquedas en Alfresco

11

Desde dónde podemos usar un Web Script

• En un navegador: accediendo a la URI del Web Script.

• Desde una página JSF.

• Desde una aplicación de Facebook.

Page 12: Web Scripts y búsquedas en Alfresco

12

URIs

• De la forma: http[s]://<host>:<port>/[<contextPath>/]/<servicePath>[/<scriptPath>][?<scriptArgs>]

• host es el nombre o dirección del servidor que alberga el Web Script.

• port es el puerto a través del cual el Web Script se expone en el servidor.

• contextPath es el path donde la aplicación está desplegada, generalmente /alfresco.

• servicePath es el path al cual los servicios de Alfresco están mapeados, generalmente /service.

• scriptPath es el path específico al Web Script.

• scriptArgs son los argumentos que se le pasan al Web Script.

Page 13: Web Scripts y búsquedas en Alfresco

13

Ejemplos de URIs

• http://localhost:8080/alfresco/service/api/path/Workspace/SpacesStore/Company%20Home/children

• http://localhost:8081/share/service/mytasks?priority=1

Page 14: Web Scripts y búsquedas en Alfresco

14

Autenticación

• Algunos Web Scripts pueden requerir que el invocador se autentique.

• Cada Web Script dicta sus propios requerimientos de autenticación.

• Si un Web Script requiere autenticación y el invocador no está autenticado, se inicia el proceso de autenticación correspondiente.

• Una vez autenticado, se realiza la invocación al Web Script propiamente dicha.

Page 15: Web Scripts y búsquedas en Alfresco

15

Ejemplo de autenticación

• Autenticación soportada por el Explorer Web Client de Alfresco.

• Copiamos la URI del Web Script Retrieve Day Events.

• Hacemos logout y cerramos el navegador.

• Abrimos de nuevo el navegador e introducimos la URI del Web Script.

• Veremos que pide autenticación: usamos admin, admin.

Page 16: Web Scripts y búsquedas en Alfresco

16

Formato de la respuesta (1)

• Si la llamada al Web Script no proporciona indicaciones sobre qué codificación para la respuesta usar, se utiliza la codificación por defecto del Web Script.

• La llamada al Web Script puede indicar el formato de la respuesta principalmente de las siguientes formas:

• Extensión de la URL. Ej: http://<host>:<port>/<contextPath>/<servicePath>/api/path/Workspace/SpacesStore/Company%20Home/children.html

• Argumento de formato. Ej: http://<host>:<port>/<contextPath>/<servicePath>/api/path/Workspace/SpacesStore/Company%20Home/children?format=html

Page 17: Web Scripts y búsquedas en Alfresco

17

Formato de la respuesta (2)

• Valores más comunes:

• Html. Para text/html.

• Text. Para text/plain.

• Xml. Para text/xml.

Page 18: Web Scripts y búsquedas en Alfresco

18

Ejemplo de creación de un Web Script (1)

• Company Home > Data Dictionary > Web Scripts.

• Crear el XML de descripción.

• Create -> Create Content.

• Nombre, ej: hello2.get.desc.xml.

• XML.

• Contenido de hello.get.desc.xml.

• Crear la plantilla de respuesta.

• Create -> Create Content.

• Nombre, ej: hello2.get.html.ftl.

• Plain text.

• Contenido de response_hello.

Page 19: Web Scripts y búsquedas en Alfresco

19

Ejemplo de creación de un Web Script (2)

• Registro del Web Script.

• http://localhost:8080/alfresco/service/index

• Pinchamos en Refresh list of Web Scripts.

• Prueba del Web Script.

• http://localhost:8080/alfresco/service/sample/hello

• Si funciona, veremos un mensaje de saludo.

Page 20: Web Scripts y búsquedas en Alfresco

20

Elección de una URI

• Elemento <url> del documento de descripción.

• Relativa a http:/.../service/

Page 21: Web Scripts y búsquedas en Alfresco

21

Lugares donde pueden ir los ficheros

• Carpeta del repositorio /Company Home/Data Dictionary/Web Scripts Extensions

• Carpeta del repositorio /Company Home/Data Dictionary/Web Scripts

• Carpeta del classpath /alfresco/extension/templates/webscripts

• Carpeta del classpath /alfresco/templates/webscripts

Page 22: Web Scripts y búsquedas en Alfresco

22

Elementos del fichero de descripción

• Hay muchos, vemos algunos de los más comunes.

• shortname es el nombre de nuestro Web Script.

• description es una descripción breve del Web Script.

• url es una plantilla de URI a la que el Web Script está ligado.

• authentication es el nivel requerido de autenticación. Los valores válidos son:

• none especifica que no se requiere autenticación.

• guest especifica que al menos se requiere autenticación como guest.

• user especifica que al menos se requiere autenticación de un usuario registrado.

• admin especifica que se requiere autenticación como administrador.

Page 23: Web Scripts y búsquedas en Alfresco

23

Script de control (1)

• Ejecuta JavaScript en la invocación de su respectiva URI.

• Puede ejecutar consultas o actualizaciones contra el repositorio.

• Nombre del archivo de la forma <serviceId>.<httpMethod>.js

Page 24: Web Scripts y búsquedas en Alfresco

24

Script de control (2)

• Algunos objetos disponibles para todos los Web Scripts:

• Args. Array asociativo para todos los parámetros de la URI.

• argsM. Array asociativo para todos los parámetros de la URI, donde cada clave es un nombre de argumento y cada valor es un array que contiene los respectivos valores de argumentos.

• Ejemplo:

// log each argument (assuming only one value has been provided for each) for (arg in args) {

logger.log(arg + "=" + args[arg]); }

// log each argument (assuming one or more values have been provided for each) for (arg in argsM) {

for each (val in argsM[arg]) { logger.log(arg + "=" + val);

} }

Page 25: Web Scripts y búsquedas en Alfresco

25

Script de control (3)

• Algunos objetos disponibles para todos los Web Scripts (cont):

• url. Proporciona acceso a la URI, o partes de ella, que lanzó el Web Script.

• format. Proporciona información sobre el formato de la respuesta.

Page 26: Web Scripts y búsquedas en Alfresco

26

Script de control (4)

• Algunos objetos disponibles para Web Scripts almacenados en el repositorio de Alfresco:

• roothome. El nodo raíz del repositorio.

• companyhome. El nodo Company Home.

• search. Proporciona acceso a Lucene y resultados almacenados de las búsquedas.

Page 27: Web Scripts y búsquedas en Alfresco

27

Plantilla de respuesta (1)

• Renderiza la respuesta a una petición HTTP.

• Múltiples formatos de respuesta.

• Formato del nombre de archivo: <serviceId>.<httpMethod>.<format>.ftl

• format es el formato de la respuesta.

• Algunos objetos disponibles para todos los Web Scripts:

• Args. Array asociativo para todos los parámetros de la URI.

• argsM. Array asociativo para todos los parámetros de la URI, donde cada clave es un nombre de argumento y cada valor es un array que contiene los respectivos valores de argumentos.

• url. Proporciona acceso a la URI, o partes de ella, que lanzó el Web Script.

• format. Proporciona información sobre el formato de la respuesta.

Page 28: Web Scripts y búsquedas en Alfresco

28

Plantilla de respuesta (2)

• Algunos objetos disponibles para Web Scripts almacenados en el repositorio de Alfresco:

• roothome. El nodo raíz del repositorio.

• companyhome. El nodo Company Home.

• No está disponible, por ejemplo, un objeto search.

Page 29: Web Scripts y búsquedas en Alfresco

29

URLs interesantes

• Web Scripts en general: http://wiki.alfresco.com/wiki/Web_Scripts

• Ejemplos de Web Scripts: http://wiki.alfresco.com/wiki/Web_Scripts_Examples

Page 30: Web Scripts y búsquedas en Alfresco

30

Introducción a las búsquedas

1

Page 31: Web Scripts y búsquedas en Alfresco

31

API de búsqueda

• Las búsquedas se definen usando el objeto org.alfresco.service.cmr.search.SearchParameters.

• Son ejecutadas usando el bean SearchService.

• SearchService está disponible a través del bean auxiliar RepositoryServices.

• Las búsquedas devuelven un objeto de clase org.alfresco.service.cmr.search.ResultSet.

• El objeto anterior se compone de objetos de clase org.alfresco.service.cmr.search.ResultSetRow. Cada objeto de esta clase se refiere a un nodo en el repositorio.

1

Page 32: Web Scripts y búsquedas en Alfresco

32

Lucene: Ejemplo 1

• En FirstFoundationClient, línea 97 y siguientes.

1

Page 33: Web Scripts y búsquedas en Alfresco

33

Lucene: Ejemplo 2

• Uso de Lucene para encontrar todos los nodos de un content type.

SearchParameters sp = new SearchParameters(); sp.addStore(getStoreRef()); sp.setLanguage(SearchService.LANGUAGE_LUCENE); sp.setQuery("TYPE:\"{http://www.alfresco.org/model/content/1.0}content\""); ResultSet results = null; try {

results = serviceRegistry.getSearchService().query(sp); for(ResultSetRow row : results) {

NodeRef currentNodeRef = row.getNodeRef(); ... }

} finally { if(results != null) {

results.close(); }

}

1

Page 34: Web Scripts y búsquedas en Alfresco

34

Ejemplo con XPath

• Búsqueda de todos los nodos que comiencen por “company_home”, que tengan un aspecto “contractDocument” y un atributo “referenceDate” igual a “2009-06-30T00:00:00”:

+PATH:"/app:company_home//." AND +ASPECT:"{vic.model}contractDocument" AND +@vic\:referenceDate:"2009-06-30T00:00:00"

1

Page 35: Web Scripts y búsquedas en Alfresco

35

Lucene frente a Xpath

• Ventajas de Lucene:

• Es más flexible que Xpath.

• Ventajas de XPath:

• Es más sencillo que Lucene, por lo que la curva de aprendizaje es menos pronunciada.

• Es más conocido que Lucene, al ser frecuente su uso en las búsquedas de nodos en XML.

1

Page 36: Web Scripts y búsquedas en Alfresco

36

URLs interesantes

• http://wiki.alfresco.com/wiki/Search

1