Suche…


Einführung

Webscripts sind funktionale Module in Alfresco, die lediglich Informationen anzeigen oder auch einige Elemente in Alfresco erstellen können (z. B. Workflow ausführen, mit Dateien, Benutzern, Gruppen oder anderen Entitäten arbeiten).

Jedes Webskript besteht aus zwei Hauptteilen (.js, .java) und einer Freemaker-Vorlage (.ftl).

Webscript kann auch eine zusätzliche .properties-Datei mit Textzeichenfolgen enthalten. Teile werden in der Datei context.xml (Spring-Framework-Logik) gepaart.

Es ist an jede in dieser Datei beschriebene URL gebunden.

Hallo World Web Script

Lassen Sie uns ein Hallo-World-Web-Skript erstellen. Webscripts verfügen über einen Deskriptor, einen Controller und optional eine Ansicht. Diese Dateien müssen einer Namenskonvention folgen.

Dieser Deskriptor heißt 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>

Sie können sehen, dass der Deskriptor erklärt, dass dieses Webskript einer URL "/ example / helloworld" zugeordnet wird und dass eine Benutzerauthentifizierung erforderlich ist. Der Deskriptor deklariert auch ein Argument namens Name.

Hier ist der Controller. Es heißt helloworld.get.js.

model.foo = "bar";

Dieser Controller ist in JavaScript geschrieben, Controller können jedoch auch in Java geschrieben werden. Mit etwas mehr Arbeit können Sie Controller auch in anderen Sprachen schreiben.

Dieser Controller macht nicht viel. Es fügt dem Modell einfach eine neue Variable namens "foo" hinzu und gibt ihm den Wert "bar".

Ihr Controller hat Zugriff auf eine Vielzahl von Variablen für den Root-Bereich, die alle in der offiziellen Dokumentation dokumentiert sind .

Zum Schluss betrachten wir die Ansicht. Es heißt helloworld.get.html.ftl

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

Sie können aus dem Namen ersehen, dass diese Ansicht als Freemarker-Vorlage implementiert ist und HTML ausgibt. Diese Ansicht bezieht sich auf den Wert von "foo" aus dem Modell und auf das Namensargument, das an das Webskript übergeben wurde. Wenn kein Namensargument angegeben ist, enthält die Vorlage einen Standardtext.

Wenn Sie stattdessen XML oder JSON erstellen möchten, können Sie einfach den Namen ändern und Ihre Vorlagenimplementierung entsprechend aktualisieren.

Einsatz

Webscripts können im Klassenpfad bereitgestellt oder in das Repository hochgeladen werden. Gehen Sie folgendermaßen vor, um dieses Web-Skript durch Hochladen in das Repository bereitzustellen:

  1. Laden Sie diese drei Dateien in die Erweiterungen für Data Dictionary / Web Scripts hoch
  2. Aktualisieren Sie die Web-Scripts, indem Sie zu http: // localhost: 8080 / alfresco / s / index wechseln und auf "Refresh Web Scripts" klicken.
  3. Navigieren Sie zum Webskript, indem Sie zu http: // localhost: 8080 / alfresco / s / example / helloworld? Name = Jeff wechseln

Folder Maker: Ein Webskript, das den POST abwickelt

Das Hello World Web Script behandelt GET HTTP-Methoden. Was aber, wenn Sie Daten auf dem Server erstellen möchten? Dafür sollte Ihr Webskript mit POST umgehen.

Hier ist ein einfaches Beispiel, das neue Ordner in der Startseite des Unternehmens erstellt. Es wird durch einen POST-Aufruf mit einem JSON-Body aufgerufen, der wie folgt aussieht:

{'name':'testfolder'}

Optional können Sie dem Ordner einen Titel oder eine Beschreibung hinzufügen, indem Sie diese als Teil des Hauptteils übergeben:

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

Der Deskriptor heißt 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>

Das optionale "family" -Element ist eine bequeme Möglichkeit, Webskripts im Webskriptindex zu gruppieren. Das Element "format" gibt an, dass dieses Webskript JSON zurückgibt.

Der Controller heißt 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;

Beachten Sie, dass dieser Controller "json" im Namen hat. Dies weist Alfresco an, eine JSON-Nutzlast zu erwarten. Alfresco analysiert die JSON automatisch und speichert sie in einer Root-Variablen namens "Json".

Der Controller entnimmt den Namen, den Titel und die Beschreibung von der JSON und erstellt den Ordner mit der Root-Bereichsvariablen "companyhome".

Wenn ein Titel oder eine Beschreibung in diesen Eigenschaften übergeben wird, werden diese gespeichert.

Die übergebenen Werte sowie die Knotenreferenz des neuen Ordners werden für das Modell festgelegt, bevor die Kontrolle an die Ansicht übergeben wird.

Die Ansicht heißt foldermaker.post.json.ftl:

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

Dieser Freemarker gibt die im Modell eingestellten Werte einfach als JSON zurück. Der Titel und die Beschreibung sind möglicherweise nicht immer vorhanden. Daher verwendet die Ansicht die in einer if-Anweisung eingebaute Freemarker-Nullprüfung, um zu vermeiden, dass diese zurückgegeben werden, wenn sie nicht festgelegt wurden.

Jeder HTTP-Client kann verwendet werden, um dieses Web-Skript zu testen. So würde es mit curl aussehen:

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

Beachten Sie, dass curl grundlegende Berechtigungsnachweise überträgt. In diesem Fall wird "admin" verwendet. Da dieses Beispiel Elemente im Firmensitz erstellt, müssen Sie einen Benutzer verwenden, der über die entsprechenden Berechtigungen verfügt.

Dieses Web-Skript hat keine echte Fehlerprüfung. Wenn Sie keinen Namen oder einen bereits verwendeten Namen eingeben, wird ein Fehler angezeigt.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow