View
840
Download
2
Category
Preview:
Citation preview
Web Scripts
1
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
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.
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í.
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).
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.
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.
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.
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.
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.
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.
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.
13
Ejemplos de URIs
• http://localhost:8080/alfresco/service/api/path/Workspace/SpacesStore/Company%20Home/children
• http://localhost:8081/share/service/mytasks?priority=1
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.
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.
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
17
Formato de la respuesta (2)
• Valores más comunes:
• Html. Para text/html.
• Text. Para text/plain.
• Xml. Para text/xml.
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.
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.
20
Elección de una URI
• Elemento <url> del documento de descripción.
• Relativa a http:/.../service/
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
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.
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
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);
} }
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.
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.
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.
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.
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
30
Introducción a las búsquedas
1
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
32
Lucene: Ejemplo 1
• En FirstFoundationClient, línea 97 y siguientes.
1
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
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
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
36
URLs interesantes
• http://wiki.alfresco.com/wiki/Search
1
Recommended