Szukaj…


Wprowadzenie

Skrypty internetowe to moduły funkcjonalne w Alfresco, które mogą po prostu wyświetlać niektóre informacje lub wprowadzać pewne elementy wewnątrz Alfresco (np. Uruchamiać przepływ pracy, pracować z plikami, użytkownikami, grupami lub innymi podmiotami).

Każdy skrypt ma dwie główne części - kod (.js, .java) i szablon Freemaker (.ftl)

Webscript może mieć także dodatkowy plik .properties z ciągami tekstowymi. Części są sparowane w pliku context.xml (logika Spring Framework).

Jest powiązany z dowolnym adresem URL opisanym w tym pliku.

Hello World Web Script

Stwórzmy skrypt internetowy hello world. Skrypty sieciowe mają deskryptor, kontroler i opcjonalnie widok. Pliki te muszą być zgodne z konwencją nazewnictwa.

Ten deskryptor nosi nazwę 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>

Widać, że deskryptor deklaruje, że ten skrypt WWW zostanie zmapowany na adres URL „/ example / helloworld” i że wymaga uwierzytelnienia użytkownika. Deskryptor deklaruje również argument o nazwie name.

Oto kontroler. Nazywa się helloworld.get.js.

model.foo = "bar";

Ten kontroler jest napisany w JavaScript, ale kontrolery mogą być również napisane w Javie. Przy odrobinie pracy możesz pisać kontrolery również w innych językach.

Ten kontroler niewiele robi. Po prostu dodaje nową zmienną do modelu o nazwie „foo” i nadaje jej wartość „bar”.

Twój kontroler ma dostęp do różnych zmiennych o zasięgu głównym, które wszystkie są udokumentowane w oficjalnej dokumentacji .

Na koniec spójrzmy na widok. Nazywa się helloworld.get.html.ftl

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

Możesz zobaczyć z nazwy, że ten widok jest zaimplementowany jako szablon Freemarker i wyświetla HTML. Ten widok pobiera wartość „foo” z modelu, a także pobiera argument nazwy, który został przekazany do skryptu WWW. Jeśli nie podano argumentu nazwy, szablon udostępnia tekst domyślny.

Jeśli zamiast tego chcesz utworzyć XML lub JSON, możesz - po prostu zmień nazwę, a następnie odpowiednio zaktualizuj implementację szablonu.

Rozlokowanie

Skrypty sieciowe można wdrożyć w ścieżce klasy lub przesłać do repozytorium. Na przykład, aby wdrożyć ten skrypt internetowy, przesyłając go do repozytorium, wykonaj następujące kroki:

  1. Prześlij te trzy pliki do rozszerzenia Data Dictionary / Web Scripts
  2. Odśwież skrypty internetowe, przechodząc do http: // localhost: 8080 / alfresco / s / index i klikając „Odśwież skrypty internetowe”.
  3. Przejdź do skryptu internetowego, przechodząc do http: // localhost: 8080 / alfresco / s / example / helloworld? Name = Jeff

Kreator folderów: skrypt internetowy, który obsługuje POST

Skrypt WWW Hello World obsługuje metody GET HTTP. Ale co, jeśli chcesz utworzyć dane na serwerze? W tym celu skrypt internetowy powinien obsługiwać POST.

Oto prosty przykład, który tworzy nowe foldery w Strona główna firmy. Jest on wywoływany przez wykonanie wywołania POST z treścią JSON, która wygląda następująco:

{'name':'testfolder'}

Opcjonalnie możesz dodać tytuł lub opis do folderu, przekazując je jako część treści, na przykład:

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

Deskryptor nazywa się 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>

Opcjonalny element „rodzina” to wygodny sposób grupowania skryptów sieciowych w indeksie skryptów sieciowych. Element „format” deklaruje, że ten skrypt internetowy zwraca JSON.

Kontroler nazywa się 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;

Zauważ, że ten kontroler ma w nazwie „json”. To mówi Alfresco, że może spodziewać się ładunku JSON. Alfresco automatycznie przeanalizuje JSON i umieści go w zmiennej głównej o nazwie „json”.

Kontroler pobiera nazwę, tytuł i opis z JSON i tworzy folder za pomocą zmiennej zasięgu głównego o nazwie „companyhome”.

Jeśli tytuł lub opis zostaną przekazane w tych właściwościach, zostaną zapisane.

Przekazywane wartości oraz odwołanie do węzła nowego folderu są ustawiane w modelu przed przekazaniem kontroli do widoku.

Widok nazywa się foldermaker.post.json.ftl:

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

Ten freemarker po prostu odzwierciedla wartości ustawione w modelu jako JSON. Tytuł i opis nie zawsze mogą być obecne, więc widok używa wbudowanej kontroli zerowej Freemarker w instrukcji if, aby uniknąć ich zwracania, jeśli nie zostały ustawione.

Do przetestowania tego skryptu internetowego można użyć dowolnego klienta HTTP. Oto jak wyglądałoby to przy użyciu 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"
}

Zauważ, że curl przekazuje podstawowe dane uwierzytelniające. W tym przypadku używa „admin”. Ponieważ ten przykład tworzy elementy w Domu firmowym, musisz do tego użytkownika, który ma odpowiednie uprawnienia.

Ten skrypt internetowy nie sprawdza prawdziwego błędu. Jeśli nie podasz nazwy lub nazwy, która była już używana, zobaczysz błąd.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow