En

JazzTeam Software Development Company

Agile Java Development

Расширение ECM Alfresco

Система управления документами Alfresco
Activiti: установка workflow отправки документов на проверку
Создание и выполнение бизнес-процесса
Полезная информация по созданию своих собственных “Процессов” (workflows)
Технология Alfresco Web Scripts
Использование REST сервиса
Alfresco Web Scripts: дашлеты
Полезная информация по созданию Web-Scripts

Система управления документами Alfresco

Система Alfresco ECM — это система для организации внутреннего портала компании, Alfresco позволяет организовать совместную работу сотрудников предоставляя следующие основные возможности:

Activiti: установка workflow отправки документов на проверку

Ниже по шагам описан процесс установки в Аlfresco собственного “Процесса”. Данный Процесс создан на основе мануала, реализует функциональность по отправке документов на проверку, и описывается следующей схемой:

Alfresco-1

  1. В каталоге ALFRESCO_HOME/tomcat/shared/classes/alfresco/extension/ необходимо создать каталог model и поместить в него файл модели процесса ReviewWorkflowModel.xml
  2. В каталоге ALFRESCO_HOME/tomcat/shared/classes/alfresco/extension/ необходимо создать каталог workflows и поместить туда файл описания процесса ReviewProcess.xml
  3. Создать в ALFRESCO_HOME/tomcat/shared/classes/alfresco/extension/ каталог messages и поместить в него файл локализации процесса jazzWorkflow_ru_RU.properties
  4. В каталог ALFRESCO_HOME/tomcat/shared/classes/alfresco/extension поместить файлы web-client-config-custom.xml и dir-workflow-context.xml
  5. В ALFRESCO_HOME/tomcat/shared/classes/alfresco/web-extension поместить файлы share-config-custom.xml и custom-slingshot-application-context
  6. Создать в 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, производим вход под своей учетной записью и в меню переходим Еще -> Мои бизнес-процессы

Alfresko-2

После чего нажимаем Начать бизнес-процесс.

Alfresko-3

В списке доступных бизнес процессов выбираем Отправить документ на ревью.

Alfresko-4

Указываем описание задачи, что необходимо проверить, назначаем задачу на конкретного человека в системе и добавляем документы который необходимо проверить, после чего нажимаем кнопку Начать бизнес-процесс.

Alfresko-5

После чего бизнес процесс перейдет в актуальное состояние, а у пользователя Иванов Александр, на которого была назначена проверка, в списке задач появится соответствующая задача.

Alfresko-6

После чего он может открыть задачу, просмотреть прикрепленные к ней файлы, проверить их и отписать Результат проверки.

Alfresko-7

После чего необходимо нажать кнопку Отправить для того чтобы отправить задачу Результат проверки документов. После отправки Результата проверки у пользователя, который отправлял документы на проверку появляется задача Результат проверки.

Alfresko-8

В задаче описан Результат проверки документов,

Alfresko-9

После чего задачу можно закрыть, сделать это можно нажатием на кнопку Задача выполнена. После чего бизнес-процесс перейдет в состояние Завершен.

Полезная информация по созданию своих собственных “Процессов” (workflows)

Технология Alfresco Web Scripts

Веб-скрипты в Alfresco предоставляют огромные возможности по расширению функциональности системы.

Веб-скрипт в терминологии Alfresco – это RESTful-сервис, который привязан к определенному URI. Веб-скрипт может обрабатывать разные типы HTTP-запросов: GET, PUT, POST, DELETE. Обычно тип запроса выбирается в зависимости от выполняемых функций (GET — выдача данных, PUT — загрузка данных и т.д.).

Вот так выглядит процесс исполнения веб-скрипта:

Alfresko-10

Напишем веб-скрипт который позволит используя метод HTTP POST создавать новые каталоги.

Структура веб-скрипта:

folder.post.desc.xml

<!--Начало описания скрипта-->
<webscript>
    <!--Короткое название-->
    <shortname>Create New Folder</shortname>
    <!--Описание-->
    <description>Create new folder</description>
    <!--URI скрипта, скрипт принимает два параметра name и 
parentNodeRef-->
    <url>/jazzteam/folder?name={name}&amp;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 для обновления индекса веб-скриптов.

Alfresko-11

Нажимаем на ссылку Browse all Web Scripts и видим наш скрипт:

Alfresko-12

Использование REST сервиса

Для использования ранее написанного сервиса его необходимо вызвать, делается это посредством отправки HTTP запроса. Для вызова сервиса воспользуемся расширением для Google Chrome – POSTMAN.

Alfresko-13

Сервис можно вызывать несколькими способами, в зависимости от того в каком формате мы хотим получить ответ, указание формата не является обязательным, если мы не указываем формат то сервис вернет ответ в формате указанным для него по умолчанию.

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.

Alfresko-14

В список параметров добавим name – имя создаваемого каталога, parentNodeRef – идентификатор каталога в котором мы хотим создать новый каталог.

Alfresko-15

После того как все заполнено, необходимо отправить запрос, для чего нажмем кнопку Send.

Alfresko-17

После чего будет создан новый каталог, и в ответе сервер нам вернет его nodeRef и относительный путь к нему в Alfresco.

В случае ошибки сервер вернет в ответе описание ошибки:

Alfresko-18

При указании в поле URL: localhost:8080/alfresco/service/jazzteam/folder.xml ответ от сервера будет в формате xml.

Alfresko-19

Описание ошибки в формате xml.

Alfresko-20

Alfresco Web Scripts: дашлеты

Дашлеты по сути являются веб скриптами, которые вместо json/xml в ответ выдают html-код, отображаемый на странице в виде виджета.

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

Для создания дашлета нам нужно написать следующие файлы:

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,
выполняем вход под своей учетной записью и нажимаем на кнопку Настроить домашнюю страницу,

Alfresko-21

далее нажимаем на кнопку Добавить дашлеты

Alfresko-22

и в списке доступных дашлетов видим наш дашлет – List User Dashlet.

Alfresko-23

Добавим его путем перетаскивания в Столбец 1 или Столбец 2, после чего нажмем кнопку OK.

После чего дашлет будет отображен в виде панели с прокручиваемым списком, на главной странице Alfresco Share.

Alfresko-24

Полезная информация по созданию Web-Scripts

, , , ,

Leave a Reply

Your email address will not be published. Required fields are marked *