You are on page 1of 36

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
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.

3
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í.

4
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).

5
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.

6
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.

7
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.

8
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.
9
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.

10
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.

11
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.

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

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

13
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.

14
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.

15
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/Workspac
e/SpacesStore/Company%20Home/children.html

• Argumento de formato. Ej:


http://<host>:<port>/<contextPath>/<servicePath>/api/path/Workspac
e/SpacesStore/Company%20Home/children?format=html

16
Formato de la respuesta (2)
• Valores más comunes:

• Html. Para text/html.

• Text. Para text/plain.

• Xml. Para text/xml.

17
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.
18
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.

19
Elección de una URI
• Elemento <url> del documento de descripción.

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

20
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

21
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.

22
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

23
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);
}
}
24
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.

25
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.

26
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.

27
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.

28
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

29
Introducción a las búsquedas

30
1
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.

31
1
Lucene: Ejemplo 1

• En FirstFoundationClient, línea 97 y siguientes.

32
1
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();
}
}

33
1
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"

34
1
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.

35
1
URLs interesantes
• http://wiki.alfresco.com/wiki/Search

36
1

You might also like