Buscar..


Introducción

Los webscripts son módulos funcionales en Alfresco, que solo pueden mostrar algunas informaciones o también hacer algunas cosas dentro de Alfresco (por ejemplo, ejecutar flujos de trabajo, trabajar con archivos, usuarios, grupos u otras entidades).

Cada webscripts tiene dos partes principales: código (.js, .java) y plantilla de Freemaker (.ftl)

Webscript también puede tener un archivo .properties adicional con cadenas de texto utilizadas en. Las partes se emparejan en el archivo context.xml (lógica de Spring Framework).

Está enlazado a cualquier URL descrita en este archivo.

Hola World Web Script

Hagamos un script web hola mundo. Los scripts web tienen un descriptor, un controlador y, opcionalmente, una vista. Estos archivos deben seguir una convención de nomenclatura.

Este descriptor se llama helloworld.get.desc.xml.

<webscript>
  <shortname>Hello World</shortname>
  <description>Hello world web script</description>
  <url>/example/helloworld?name={nameArgument}</url>
  <authentication>user</authentication>  
</webscript>

Puede ver que el descriptor declara que este script web se asignará a una URL, "/ example / helloworld", y que requiere la autenticación del usuario. El descriptor también declara un argumento llamado nombre.

Aquí está el controlador. Se llama helloworld.get.js.

model.foo = "bar";

Este controlador está escrito en JavaScript, pero los controladores también pueden escribirse en Java. Con un poco más de trabajo, también puede escribir controladores en otros idiomas.

Este controlador no hace mucho. Simplemente agrega una nueva variable al modelo llamado "foo" y le da un valor de "barra".

Su controlador tiene acceso a una variedad de variables de ámbito raíz, todas documentadas en la documentación oficial .

Por último, echemos un vistazo a la vista. Se llama helloworld.get.html.ftl

<html>
  <body>
    <p>Hello, ${args.name!"name not specified"}!</p>
    <p>Foo: ${foo}</p>
  </body>
</html>

Puede ver en el nombre que esta vista se implementa como una plantilla de Freemarker y genera HTML. Esta vista toma el valor de "foo" del modelo y también captura el argumento de nombre que se pasó a la secuencia de comandos web. Si no se especifica un argumento de nombre, la plantilla proporciona un texto predeterminado.

Si desea producir XML o JSON, puede cambiar el nombre y actualizar la implementación de la plantilla en consecuencia.

Despliegue

Los scripts web se pueden implementar en la ruta de clase o cargarse en el repositorio. Por ejemplo, para implementar este script web subiéndolo al repositorio, siga estos pasos:

  1. Suba estos tres archivos al diccionario de datos / Extensiones de scripts web
  2. Actualice los Web Scripts en http: // localhost: 8080 / alfresco / s / index y haga clic en "Actualizar Web Scripts".
  3. Vaya al script web yendo a http: // localhost: 8080 / alfresco / s / example / helloworld? Name = Jeff

Folder Maker: un script web que maneja POST

Hello World Web Script maneja los métodos GET HTTP. ¿Pero qué pasa si quieres crear datos en el servidor? Para eso su script web debe manejar POST.

Aquí hay un ejemplo simple que crea nuevas carpetas en el Hogar de la Compañía. Se invoca al hacer una llamada POST con un cuerpo JSON que se parece a:

{'name':'testfolder'}

Opcionalmente, puede agregar un título o una descripción a la carpeta pasándolos como parte del cuerpo, como:

{
  'name':'testfolder',
  'title':'test title',
  'description':'test description'
}

El descriptor se llama foldermaker.post.desc.xml:

<webscript>
  <shortname>Folder Maker</shortname>
  <description>Creates folders</description>
  <family>Examples</family>
  <url>/example/folders</url>
  <format default="json"></format>
  <authentication>user</authentication>
</webscript>

El elemento opcional "familia" es una forma conveniente de agrupar los scripts web en el índice del script web. El elemento "formato" declara que este script web devuelve JSON.

El controlador se llama foldermaker.post.json.js:

var name = title = desc = null;

var name = json.get('name');

try {
  title = json.get('title');
} catch (err) {}

try {
  desc = json.get('description');
} catch (err) {}

var folder = companyhome.createFolder(name);

var needsSave = false;

if (title != null) {
  folder.properties['cm:title'] = title;
  needsSave = true;
}

if (desc != null) {
  folder.properties['cm:description'] = desc;
  needsSave = true;
}

if (needsSave) {
  folder.save();
}

model.id = folder.nodeRef.toString();
model.name = name;
model.title = title;
model.description = desc;

Observe que este controlador tiene "json" en su nombre. Esto le dice a Alfresco que espere una carga útil JSON. Alfresco analizará automáticamente el JSON y lo pondrá en una variable raíz llamada "json".

El controlador toma el nombre, el título y la descripción del JSON y crea la carpeta utilizando la variable de ámbito raíz llamada "companyhome".

Si se pasa un título o una descripción en esas propiedades, se guardan.

Los valores que se pasaron, así como la referencia del nodo de la nueva carpeta, se configuran en el modelo antes de entregar el control a la vista.

La vista se llama foldermaker.post.json.ftl:

{
  <#if title??>
  "title": "${title}",
  </#if>
  <#if description??>
  "description": "${description}",
  </#if>
  "id": "${id}",
  "name": "${name}"
}

Este freemarker simplemente devuelve los valores establecidos en el modelo como JSON. Es posible que el título y la descripción no siempre estén presentes, por lo que la vista utiliza la comprobación nula de Freemarker incorporada en una declaración if para evitar devolverlos si no se configuraron.

Se puede usar cualquier cliente HTTP para probar este script web. Esto es lo que se vería usando curl:

jpotts$ curl -uadmin:admin -H "content-type: application/json" -X POST "http://localhost:8080/alfresco/s/example/folders" -d "{'name':'testfolder','title':'test title', 'description':'test desc'}"
{
  "title": "test title",
  "description": "test desc"
  "id": "workspace://SpacesStore/cc26a12f-306b-41f1-a859-668f11fc2a54",
  "name": "testfolder"
}

Tenga en cuenta que curl está pasando en las credenciales básicas de autenticación. En este caso está utilizando "admin". Debido a que este ejemplo crea elementos en el Hogar de la empresa, debe usar un usuario que tenga los permisos adecuados para hacerlo.

Este script web no tiene comprobación de errores reales. Si no pasa un nombre o si ingresa un nombre que ya ha sido usado, verá un error.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow