Расширение ECM Alfresco
Система управления документами Alfresco
Activiti: установка workflow отправки документов на проверку
Создание и выполнение бизнес-процесса
Полезная информация по созданию своих собственных “Процессов” (workflows)
Технология Alfresco Web Scripts
Использование REST сервиса
Alfresco Web Scripts: дашлеты
Полезная информация по созданию Web-Scripts
Система управления документами Alfresco
Система Alfresco ECM — это система для организации внутреннего портала компании, Alfresco позволяет организовать совместную работу сотрудников предоставляя следующие основные возможности:
- Совместная работа с документами.
- Совместная работа со статьями на внутреннем портале с использованием подхода Wiki.
- Ведение дискуссий. Дискуссии — это своего рода форум, где любой сотрудник может создать новое обсуждение, а остальные сотрудники смогут в нем участвовать, оставляя свои сообщения.
- Ведение блогов.
- Организация документооборота. По умолчанию в системе существует только один «Процесс» (workflow) для системы документооборота, а именно процесс принятия (одобрения) документов. Пример: Документ должен быть одобрен Директором, для этого после окончания работы над документом необходимо запустить «Процесс» принятия документа и указать лиц, которые должны его одобрить (в данном случае это Директор). После этого в списке задач Директора появится новая задача принятия документа, где у него будет две опции «Принять» и «Отказать». Кроме этого существует возможность создавать свои собственные «Процессы» (workflow).
Activiti: установка workflow отправки документов на проверку
Ниже по шагам описан процесс установки в Аlfresco собственного “Процесса”. Данный Процесс создан на основе мануала, реализует функциональность по отправке документов на проверку, и описывается следующей схемой:
- В каталоге ALFRESCO_HOME/tomcat/shared/classes/alfresco/extension/ необходимо создать каталог model и поместить в него файл модели процесса ReviewWorkflowModel.xml
- В каталоге ALFRESCO_HOME/tomcat/shared/classes/alfresco/extension/ необходимо создать каталог workflows и поместить туда файл описания процесса ReviewProcess.xml
- Создать в ALFRESCO_HOME/tomcat/shared/classes/alfresco/extension/ каталог messages и поместить в него файл локализации процесса jazzWorkflow_ru_RU.properties
- В каталог ALFRESCO_HOME/tomcat/shared/classes/alfresco/extension поместить файлы web-client-config-custom.xml и dir-workflow-context.xml
- В ALFRESCO_HOME/tomcat/shared/classes/alfresco/web-extension поместить файлы share-config-custom.xml и custom-slingshot-application-context
- Создать в ALFRESCO_HOME/tomcat/shared/classes/alfresco/web-extension/ каталог messages и поместить туда файл jazz_ru_RU.properties который описывает локализацию интерфейса share.
Создание и выполнение бизнес-процесса
После чего необходимо запустить Alfresco, для этого переходим в директорию ALFRESCO_HOME/tomcat/bin и запускаем файл startup.bat
Переходим по адресу http://localhost:8080/share, производим вход под своей учетной записью и в меню переходим Еще -> Мои бизнес-процессы
После чего нажимаем Начать бизнес-процесс.
В списке доступных бизнес процессов выбираем Отправить документ на ревью.
Указываем описание задачи, что необходимо проверить, назначаем задачу на конкретного человека в системе и добавляем документы который необходимо проверить, после чего нажимаем кнопку Начать бизнес-процесс.
После чего бизнес процесс перейдет в актуальное состояние, а у пользователя Иванов Александр, на которого была назначена проверка, в списке задач появится соответствующая задача.
После чего он может открыть задачу, просмотреть прикрепленные к ней файлы, проверить их и отписать Результат проверки.
После чего необходимо нажать кнопку Отправить для того чтобы отправить задачу Результат проверки документов. После отправки Результата проверки у пользователя, который отправлял документы на проверку появляется задача Результат проверки.
В задаче описан Результат проверки документов,
После чего задачу можно закрыть, сделать это можно нажатием на кнопку Задача выполнена. После чего бизнес-процесс перейдет в состояние Завершен.
Полезная информация по созданию своих собственных “Процессов” (workflows)
- Пример создания workflow в ECM Alfresco (часть 1)
- Создание workflow. Продолжение(часть 2)
- Activiti: пример создания workflow
- Alfresco Developer Series Advanced Workflows
Технология Alfresco Web Scripts
Веб-скрипты в Alfresco предоставляют огромные возможности по расширению функциональности системы.
Веб-скрипт в терминологии Alfresco – это RESTful-сервис, который привязан к определенному URI. Веб-скрипт может обрабатывать разные типы HTTP-запросов: GET, PUT, POST, DELETE. Обычно тип запроса выбирается в зависимости от выполняемых функций (GET — выдача данных, PUT — загрузка данных и т.д.).
Вот так выглядит процесс исполнения веб-скрипта:
Напишем веб-скрипт который позволит используя метод HTTP POST создавать новые каталоги.
Структура веб-скрипта:
- folder.post.desc.xml – описание скрипта;
- folder.post.js – js-контроллер;
- folder.post.json.ftl – шаблон для вывода json;
- folder.post.xml.ftl – шаблон для вывода xml.
folder.post.desc.xml
<!--Начало описания скрипта-->
<webscript>
<!--Короткое название-->
<shortname>Create New Folder</shortname>
<!--Описание-->
<description>Create new folder</description>
<!--URI скрипта, скрипт принимает два параметра name и
parentNodeRef-->
<url>/jazzteam/folder?name={name}&parentNodeRef=
{parentNodeRef}</url>
<!--Способ указания выходного формата и формат по умолчанию-->
<format default="json">any</format>
<!--Аутентификация. Этот скрипт будет доступен любому
пользователю системы (требуются логин и пароль)-->
<authentication>user</authentication>
<!--Включаем транзакции для доступа к хранилищу-->
<transaction>required</transaction>
<lifecycle>sample</lifecycle>
</webscript>
Опишем контроллер работы скрипта, в контроллере содержится вся бизнес логика работы скрипта.
folder.post.js
// Получаем параметр parentNodeRef из URL, для этого используем
// стандартный объект alfresco - args
var parentFolderNodeRef = args["parentNodeRef"];
// Получаем параметр name
var newFolderName = args["name"];
if (parentFolderNodeRef && newFolderName) {
// Получаем объект родительского каталога, делаем это
// посредством еще одного стандартного объекта - search, вызываем
// метод findNode и передаем в него nodeRef узла который
// необходимо найти
var parentFolder = search.findNode(parentFolderNodeRef);
// Если узел найден, и он является контейнером
if (parentFolder && parentFolder.isContainer) {
//Убеждаемся что каталога с таким именем еще нет
if (!parentFolder.childByNamePath("/" + newFolderName)) {
// Создаем новый каталог в каталоге parentFolder, посредством
// вызова метода createFolder, который принимает в виде параметра
// имя нового каталога.
var createdFolder = parentFolder.createFolder
(newFolderName);
// Используем стандартный объект model для сохранения данных,
// которые понадобятся для формирования ответа
model.data = {
"name": createdFolder.name,
"nodeRef": createdFolder.nodeRef.toString(),
"path": createdFolder.displayPath.toString()
};
}
// В случае если мы пытаемся продублировать имя каталога
// необходимо сформировать ответ об исключительной
// ситуации, делается это с использованием объекта status,
// в поле code присваиваем код HTTP статуса 403, что
//свидетельствует об ошибке, в поле message - описание
else {
status.code = 403;
status.message = "Folder " + newFolderName + " already
exists.";
status.redirect = true;
}
}
else {
status.code = 400;
status.message = "Folder with nodeRef " +
parentFolderNodeRef + " not found.";
status.redirect = true;
}
}
else {
status.code = 403;
status.message = "Invalid arguments.";
status.redirect = true;
}
Опишем шаблон вывода результата работы веб скрипта в формате json.
folder.post.json.ftl
<#--Включаем экранирование символов-->
<#escape x as jsonUtils.encodeJSONString(x)>
{
"data":{
<#--Получаем из объекта data, который мы в контроллере сохранили в объекте model, поля name, nodeRef и path-->
"name":"${data.name}",
"nodeRef":"${data.nodeRef}",
"path":"${data.path}"
}
}
Опишем шаблон вывода результата работы веб скрипта в формате xml.
folder.post.xml.ftl
<!--?xml version="1.0" encoding="utf8"?-->
<#--Включаем экранирование символов-->
<#escape x as x?xml>
<#--Корневой элемент-->
<data>
<#--Получаем из объекта data, который мы в контроллере сохранили
в объекте model, поля name, nodeRef и path-->
${data.name}
${data.nodeRef}
${data.path}
</data>
После описания скрипта необходимо его установить, для этого скопируем все файлы скрипта в директорию: ALFRESCO_HOME\tomcat\shared\classes\alfresco\templates\webscripts\
Перейдем по адресу http://localhost:8080/alfresco/service/index и нажмем кнопку Refresh Web Scripts для обновления индекса веб-скриптов.
Нажимаем на ссылку Browse all Web Scripts и видим наш скрипт:
Использование REST сервиса
Для использования ранее написанного сервиса его необходимо вызвать, делается это посредством отправки HTTP запроса. Для вызова сервиса воспользуемся расширением для Google Chrome – POSTMAN.
Сервис можно вызывать несколькими способами, в зависимости от того в каком формате мы хотим получить ответ, указание формата не является обязательным, если мы не указываем формат то сервис вернет ответ в формате указанным для него по умолчанию.
localhost:8080/alfresco/service/jazzteam/folder – ответ в формате json;
localhost:8080/alfresco/service/jazzteam/folder.json – вернет ответ в формате json;
localhost:8080/alfresco/service/jazzteam/folder.xml – ответ в формате xml.
Так же возвращаемый формат можно указать в виде параметра format, который может принимать значения xml или json, добавленного в конец списка параметров.
Введем в поле с надписью “Enter request URL here” URL нашего REST севиса, в выпадающем списке выберем значение POST.
В список параметров добавим name – имя создаваемого каталога, parentNodeRef – идентификатор каталога в котором мы хотим создать новый каталог.
После того как все заполнено, необходимо отправить запрос, для чего нажмем кнопку Send.
После чего будет создан новый каталог, и в ответе сервер нам вернет его nodeRef и относительный путь к нему в Alfresco.
В случае ошибки сервер вернет в ответе описание ошибки:
При указании в поле URL: localhost:8080/alfresco/service/jazzteam/folder.xml ответ от сервера будет в формате xml.
Описание ошибки в формате xml.
Alfresco Web Scripts: дашлеты
Дашлеты по сути являются веб скриптами, которые вместо json/xml в ответ выдают html-код, отображаемый на странице в виде виджета.
Напишем дашлет который будет отображать список пользователей систем, данные дашлет получает посредством обращения к веб скриптам системы.
Для создания дашлета нам нужно написать следующие файлы:
- users.get.desc.xml – дескриптор дашлета;
- users.get.js – контроллер, основная логика;
- users.get.html.ftl – шаблон вывода в формате html;
- users.get_ru.properties – файл локализации.
users.get.desc.xml
<webscript>
<shortname>List User Dashlet</shortname>
<description>Simple dashlet</description>
<family>dashlet</family>
<url>/components/dashlets/listuser</url>
</webscript>
users.get.js
//Создаем объект-коннектор, который позволит обращаться к alfresco
var connector = remote.connect('alfresco');
//Обращаемся к сервису расположенному по URL /jazz/users,
//который вернет список пользователей в формате json
var dataStr = connector.get('/jazz/users');
//Парсим полученную json-строку, переводим ее в js объект
var data = eval('(' + dataStr + ')').data;
//Сохраняем полученные данные в поле data объекта model,
//для последующего использования в шаблоне вывода
model.data = data;
Опишем шаблон страницы которая будет являться представлением дашлета
users.get.html.ftl
<script type="text/javascript">
<#--Позволим панели быть расширяемой, изменять свой размер-->
new Alfresco.widget.DashletResizer("${args.htmlid}",
"${instance.object.id}");
</script>
<div class="dashlet" style="height: 40%">
<#--Установим заголовок панели-->
<div class="title">${msg('label.title')}</div>
<div class="body scrollableList">
<#--Оформим вывод записей в виде списка таблиц-->
<#list data.users as user>
<div class="detail-list-item
<#if !user_has_next>last-item</#if>">
<table>
<tr>
<td>
<div class="yui-dt-liner">
<#--Установим иконку для юзера-->
<img src='/share/res/components/documentlibrary/images/
folder-32.png'/>
</div>
</td>
<td>
<h4>
<a class="theme-color-1" href="#">${user.fullName}
(${user.nickName})</a>
</h4>
</td>
</tr>
</table>
</div>
</#list>
</div>
</div>
users.get_ru.properties
label.title=Alfresco User List
Скопируем ранее описанные файлы в
ALFRESCO_HOME/tomcat/shared/classes/alfresco/web-extension/site-webscripts/org/alfresco/components/dashlets/,
перейдем по адресу
http://localhost:8080/alfresco/service/index
и нажмем кнопку Refresh Web Scripts для обновления индекса веб-скриптов.
После чего переходим
http://localhost:8080/share,
выполняем вход под своей учетной записью и нажимаем на кнопку Настроить домашнюю страницу,
далее нажимаем на кнопку Добавить дашлеты
и в списке доступных дашлетов видим наш дашлет – List User Dashlet.
Добавим его путем перетаскивания в Столбец 1 или Столбец 2, после чего нажмем кнопку OK.
После чего дашлет будет отображен в виде панели с прокручиваемым списком, на главной странице Alfresco Share.
Полезная информация по созданию Web-Scripts
Список сервисов в Аlfresco Вышла новая версия 1.25 продукта XML2Selenium
Comments are currently closed.