Поиск…


Вступление

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, вы можете - просто изменить имя, а затем соответствующим образом обновить реализацию шаблона.

развертывание

Веб-скрипты могут быть развернуты в путь к классам или загружены в репозиторий. Например, чтобы развернуть этот веб-скрипт, загрузив его в репозиторий, выполните следующие действия:

  1. Загрузите эти три файла в расширение словаря данных / веб-скриптов
  2. Обновите веб-скрипты, перейдя по адресу http: // localhost: 8080 / alfresco / s / index и нажав «Обновить веб-скрипты».
  3. Перейдите к веб-скрипту, перейдя по адресу 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, вы должны использовать пользователя, который имеет соответствующие разрешения для этого.

В этом веб-скрипте нет реальной проверки ошибок. Если вы не передадите имя или не передали имя, которое уже было использовано, вы увидите сообщение об ошибке.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow