Zoeken…


Invoering

Webscripts zijn functionele modules in het Alfresco, die alleen wat informatie kunnen weergeven of ook iets in het Alfresco kunnen maken (bijv. Workflow uitvoeren, werken met bestanden, gebruikers, groepen of andere entiteiten).

Elke webscripts heeft twee hoofdonderdelencode (.js, .java) en Freemaker-sjabloon (.ftl)

Webscript kan ook een extra .properties-bestand hebben met de gebruikte tekenreeksen. Onderdelen worden gekoppeld in het context.xml-bestand (Spring framework logic).

Het is gebonden aan elke URL die in dit bestand wordt beschreven.

Hallo wereld webscript

Laten we een hallo wereld webscript maken. Webscripts hebben een descriptor, een controller en, optioneel, een weergave. Deze bestanden moeten een naamgevingsconventie volgen.

Deze descriptor heet 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>

Je kunt zien dat de descriptor verklaart dat dit webscript wordt toegewezen aan een URL, "/ example / helloworld", en dat het gebruikersauthenticatie vereist. De descriptor verklaart ook een argument genaamd naam.

Hier is de controller. Het heet helloworld.get.js.

model.foo = "bar";

Deze controller is geschreven in JavaScript, maar controllers kunnen ook in Java worden geschreven. Met een beetje meer werk kun je controllers ook in andere talen schrijven.

Deze controller doet niet veel. Het voegt gewoon een nieuwe variabele toe aan het model genaamd "foo" en geeft het de waarde "bar".

Uw controller heeft toegang tot een verscheidenheid aan root-scoped-variabelen die allemaal zijn gedocumenteerd in de officiële documentatie .

Laten we tot slot het uitzicht bekijken. Het heet helloworld.get.html.ftl

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

Je kunt aan de naam zien dat deze weergave is geïmplementeerd als een Freemarker-sjabloon en HTML uitvoert. Deze weergave pakt de waarde van "foo" uit het model en pakt ook het naamargument dat is doorgegeven aan het webscript. Als er geen naamargument wordt opgegeven, biedt de sjabloon standaardtekst.

Als u in plaats daarvan XML of JSON wilt produceren, kunt u de naam wijzigen en uw sjabloonimplementatie dienovereenkomstig bijwerken.

Deployment

Webscripts kunnen worden geïmplementeerd in het klassenpad of worden geüpload naar de gegevensopslagruimte. Om dit webscript bijvoorbeeld te implementeren door te uploaden naar de repository, volgt u deze stappen:

  1. Upload deze drie bestanden naar Data Dictionary / Web Scripts Extensions
  2. Vernieuw de webscripts door naar http: // localhost: 8080 / alfresco / s / index te gaan en op "Webscripts vernieuwen" te klikken.
  3. Navigeer naar het webscript door naar http: // localhost: 8080 / alfresco / s / example / helloworld? Name = Jeff te gaan

Folder Maker: een webscript dat POST verwerkt

Het Hello World Web Script verwerkt GET HTTP-methoden. Maar wat als u gegevens op de server wilt maken? Daarvoor zou uw webscript POST moeten verwerken.

Hier is een eenvoudig voorbeeld dat nieuwe mappen maakt in Company Home. Het wordt ingeroepen door een POST-oproep te plaatsen met een JSON-instantie die eruit ziet als:

{'name':'testfolder'}

Desgewenst kunt u een titel of een beschrijving aan de map toevoegen door deze als onderdeel van het hoofdgedeelte door te geven, zoals:

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

De descriptor heet 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>

Het optionele "familie" -element is een handige manier om webscripts te groeperen in de webscriptindex. Het element "format" geeft aan dat dit webscript JSON retourneert.

De controller wordt foldermaker.post.json.js genoemd:

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;

Merk op dat deze controller "json" in zijn naam heeft. Dit vertelt Alfresco om een JSON-lading te verwachten. Alfresco parseert de JSON automatisch en plaatst deze in een rootvariabele genaamd "json".

De controller pakt de naam, titel en beschrijving van de JSON en maakt de map met behulp van de root scope variabele genaamd "companyhome".

Als een titel of beschrijving wordt doorgegeven, worden die eigenschappen opgeslagen.

De waarden die zijn doorgegeven en de knooppuntreferentie van de nieuwe map worden ingesteld op het model voordat de controle wordt overgedragen aan de weergave.

De weergave heet foldermaker.post.json.ftl:

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

Deze freemarker echoot gewoon de waarden terug die op het model zijn ingesteld als JSON. De titel en beschrijving zijn mogelijk niet altijd aanwezig, dus de weergave gebruikt de null-check van Freemarker ingebouwd in een if-instructie om te voorkomen dat deze worden geretourneerd als ze niet waren ingesteld.

Elke HTTP-client kan worden gebruikt om dit webscript uit te testen. Dit is hoe het eruit zou zien met krullen:

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"
}

Merk op dat krullen in de basisverificatiegegevens passeren. In dit geval gebruikt het "admin". Omdat in dit voorbeeld items in Company Home worden gemaakt, moet u een gebruiker met de juiste machtigingen gebruiken om dat te doen.

Dit webscript heeft geen echte foutcontrole. Als u geen naam doorgeeft of een naam die al in gebruik is, krijgt u een foutmelding.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow