alfresco
Веб-скрипты
Поиск…
Вступление
Webscripts - это функциональные модули в Alfresco, которые могут просто отображать некоторую информацию или делать некоторые вещи внутри Alfresco (например, работать с рабочим процессом, работать с файлами, пользователями, группами или другими объектами).
Каждый веб-скрипт имеет два основных кода-части (.js, .java) и шаблон Freemaker (.ftl)
Webscript также может иметь дополнительный файл .properties с текстовыми строками, которые используются в. Партии спарены в файле context.xml (логика Spring Framework).
Он привязан к любому URL-адресу, описанному в этом файле.
Hello World Web Script
Давайте сделаем приветственный веб-скрипт. Веб-скрипты имеют дескриптор, контроллер и, необязательно, представление. Эти файлы должны соответствовать соглашению об именах.
Этот дескриптор называется 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>
Вы можете видеть, что дескриптор заявляет, что этот веб-скрипт будет сопоставлен с URL-адресом «/ example / helloworld» и что он требует аутентификации пользователя. Дескриптор также объявляет аргумент с именем name.
Вот контроллер. Он называется helloworld.get.js.
model.foo = "bar";
Этот контроллер написан на JavaScript, но контроллеры также могут быть написаны на Java. С еще большей работой вы можете писать контроллеры и на других языках.
Этот контроллер мало что делает. Он просто добавляет новую переменную в модель под названием «foo» и дает ей значение «bar».
Контроллер имеет доступ к различным переменным, зависящим от корня, которые полностью описаны в официальной документации .
Наконец, давайте посмотрим на представление. Он называется helloworld.get.html.ftl
<html>
<body>
<p>Hello, ${args.name!"name not specified"}!</p>
<p>Foo: ${foo}</p>
</body>
</html>
Из имени видно, что это представление реализовано как шаблон Freemarker и выводит HTML. Этот вид захватывает значение «foo» из модели, а также захватывает аргумент имени, который был передан в веб-скрипт. Если аргумент имени не указан, шаблон предоставляет некоторый текст по умолчанию.
Если вы хотите создать XML или JSON, вы можете - просто изменить имя, а затем соответствующим образом обновить реализацию шаблона.
развертывание
Веб-скрипты могут быть развернуты в путь к классам или загружены в репозиторий. Например, чтобы развернуть этот веб-скрипт, загрузив его в репозиторий, выполните следующие действия:
- Загрузите эти три файла в расширение словаря данных / веб-скриптов
- Обновите веб-скрипты, перейдя по адресу http: // localhost: 8080 / alfresco / s / index и нажав «Обновить веб-скрипты».
- Перейдите к веб-скрипту, перейдя по адресу http: // localhost: 8080 / alfresco / s / example / helloworld? Name = Jeff
Создатель папок: веб-скрипт, который обрабатывает POST
Hello World Web Script обрабатывает методы GET HTTP. Но что делать, если вы хотите создать данные на сервере? Для этого ваш веб-скрипт должен обрабатывать POST.
Вот простой пример, который создает новые папки в Home Company. Он вызывается путем вызова POST с телом JSON, который выглядит так:
{'name':'testfolder'}
При желании вы можете добавить заголовок или описание в папку, передав их как часть тела, например:
{
'name':'testfolder',
'title':'test title',
'description':'test description'
}
Дескриптор называется 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>
Необязательный «семейный» элемент - удобный способ группировки веб-скриптов в индексе веб-скрипта. Элемент «format» объявляет, что этот веб-скрипт возвращает JSON.
Контроллер называется 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;
Обратите внимание, что у этого контроллера есть имя «json». Это говорит, что Alfresco ожидает полезную нагрузку JSON. Alfresco автоматически проанализирует JSON и поместит его в корневую переменную под названием «json».
Контроллер захватывает имя, заголовок и описание из JSON и создает папку с использованием переменной области корня, называемой «companyhome».
Если заголовок или описание переданы в этих свойствах, они сохраняются.
Значения, которые были переданы, а также ссылка на узел новой папки, устанавливаются на модели перед передачей контроля над представлением.
Вид называется foldermaker.post.json.ftl:
{
<#if title??>
"title": "${title}",
</#if>
<#if description??>
"description": "${description}",
</#if>
"id": "${id}",
"name": "${name}"
}
Этот freemarker просто отгоняет значения, установленные на модели как JSON. Заголовок и описание могут не всегда присутствовать, поэтому в представлении используется встроенная функция проверки ошибок Freemarker в выражении if, чтобы избежать возврата тех, если они не были установлены.
Любой HTTP-клиент можно использовать для тестирования этого веб-скрипта. Вот как это будет выглядеть с помощью 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"
}
Обратите внимание, что curl передает базовые auth-учетные данные. В этом случае используется «admin». Поскольку этот пример создает элементы в Company Home, вы должны использовать пользователя, который имеет соответствующие разрешения для этого.
В этом веб-скрипте нет реальной проверки ошибок. Если вы не передадите имя или не передали имя, которое уже было использовано, вы увидите сообщение об ошибке.