alfresco
Script Web
Ricerca…
introduzione
I webscripts sono moduli funzionali in Alfresco, che possono solo mostrare alcune informazioni o anche fare alcune cose all'interno di Alfresco (ad esempio eseguire il flusso di lavoro, lavorare con file, utenti, gruppi o altre entità).
Ogni webscripts ha due parti principali: codice (.js, .java) e modello Freemaker (.ftl)
Webscript può avere anche un file .properties aggiuntivo con le stringhe di testo utilizzate. Le parti sono accoppiate nel file context.xml (Spring framework logic).
È associato a qualsiasi URL descritto in questo file.
Ciao World Web Script
Facciamo un ciao web world script. Gli script Web hanno un descrittore, un controller e, opzionalmente, una vista. Questi file devono seguire una convenzione di denominazione.
Questo descrittore è denominato 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>
Puoi vedere che il descrittore dichiara che questo script web verrà mappato su un URL, "/ example / helloworld", e che richiede l'autenticazione dell'utente. Il descrittore dichiara anche un argomento chiamato name.
Ecco il controller. Si chiama helloworld.get.js.
model.foo = "bar";
Questo controller è scritto in JavaScript ma i controller possono anche essere scritti in Java. Con un po 'più di lavoro puoi scrivere controller anche in altre lingue.
Questo controller non fa molto. Aggiunge solo una nuova variabile al modello chiamata "pippo" e gli assegna un valore di "barra".
Il controllore ha accesso a una varietà di variabili con ambito radice che sono tutte documentate nella documentazione ufficiale .
Infine, diamo un'occhiata alla vista. Si chiama helloworld.get.html.ftl
<html>
<body>
<p>Hello, ${args.name!"name not specified"}!</p>
<p>Foo: ${foo}</p>
</body>
</html>
Puoi vedere dal nome che questa vista è implementata come modello di Freemarker e genera HTML. Questa vista acquisisce il valore di "pippo" dal modello e afferra anche l'argomento del nome passato allo script web. Se non viene specificato un argomento name, il modello fornisce del testo predefinito.
Se invece si desidera produrre XML o JSON, è sufficiente modificare il nome e aggiornare di conseguenza l'implementazione del modello.
Distribuzione
Gli script Web possono essere distribuiti nel classpath o caricati nel repository. Ad esempio, per distribuire questo script Web caricando nel repository, attenersi alla seguente procedura:
- Carica questi tre file in Dizionario dei dati / Estensioni degli script Web
- Aggiorna gli script Web andando su http: // localhost: 8080 / alfresco / s / index e facendo clic su "Aggiorna script Web".
- Passare allo script Web andando su http: // localhost: 8080 / alfresco / s / example / helloworld? Name = Jeff
Folder Maker: uno script Web che gestisce POST
Hello World Web Script gestisce i metodi GET HTTP. Ma cosa succede se si desidera creare dati sul server? Per questo il tuo script web dovrebbe gestire il POST.
Ecco un semplice esempio che crea nuove cartelle in Company Home. Viene invocato effettuando una chiamata POST con un corpo JSON simile al seguente:
{'name':'testfolder'}
Facoltativamente, puoi aggiungere un titolo o una descrizione alla cartella passando quelli come parte del corpo, come:
{
'name':'testfolder',
'title':'test title',
'description':'test description'
}
Il descrittore si chiama 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>
L'elemento opzionale "family" è un modo conveniente per raggruppare gli script Web nell'indice degli script Web. L'elemento "format" dichiara che questo script Web restituisce JSON.
Il controller si chiama 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;
Si noti che questo controller ha "json" nel suo nome. Questo dice ad Alfresco di aspettarsi un carico utile JSON. Alfresco analizzerà automaticamente il JSON e lo metterà in una variabile radice chiamata "json".
Il controller acquisisce il nome, il titolo e la descrizione dal JSON e crea la cartella utilizzando la variabile dell'ambito di base chiamata "companyhome".
Se un titolo o una descrizione sono passati in quelle proprietà vengono salvati.
I valori passati e il riferimento al nodo della nuova cartella vengono impostati sul modello prima di passare il controllo alla vista.
La vista è denominata foldermaker.post.json.ftl:
{
<#if title??>
"title": "${title}",
</#if>
<#if description??>
"description": "${description}",
</#if>
"id": "${id}",
"name": "${name}"
}
Questo freemarker riporta solo i valori impostati sul modello come JSON. Il titolo e la descrizione potrebbero non essere sempre presenti, quindi la vista utilizza il controllo null di Freemarker integrato in un'istruzione if per evitare di restituire quelli che non erano impostati.
Qualsiasi client HTTP può essere utilizzato per testare questo script web out. Ecco come apparirebbe usando l'arricciatura:
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"
}
Si noti che curl sta passando nelle credenziali di autenticazione di base. In questo caso sta usando "admin". Poiché questo esempio crea elementi in Company Home, è necessario utilizzare un utente che disponga delle autorizzazioni appropriate per farlo.
Questo script web non ha un vero controllo degli errori. Se non si passa un nome o si passa a un nome che è già stato utilizzato si vedrà un errore.