alfresco
Skrypty sieciowe
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:
- Prześlij te trzy pliki do rozszerzenia Data Dictionary / Web Scripts
- Odśwież skrypty internetowe, przechodząc do http: // localhost: 8080 / alfresco / s / index i klikając „Odśwież skrypty internetowe”.
- 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.