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

  1. <!--Начало описания скрипта-->
  2. <webscript>
  3. <!--Короткое название-->
  4. <shortname>Create New Folder</shortname>
  5. <!--Описание-->
  6. <description>Create new folder</description>
  7. <!--URI скрипта, скрипт принимает два параметра name и
  8. parentNodeRef-->
  9. <url>/jazzteam/folder?name={name}&amp;parentNodeRef=
  10. {parentNodeRef}</url>
  11. <!--Способ указания выходного формата и формат по умолчанию-->
  12. <format default="json">any</format>
  13. <!--Аутентификация. Этот скрипт будет доступен любому
  14. пользователю системы (требуются логин и пароль)-->
  15. <authentication>user</authentication>
  16. <!--Включаем транзакции для доступа к хранилищу-->
  17. <transaction>required</transaction>
  18. <lifecycle>sample</lifecycle>
  19. </webscript>

Опишем контроллер работы скрипта, в контроллере содержится вся бизнес логика работы скрипта.

folder.post.js

  1. // Получаем параметр parentNodeRef из URL, для этого используем
  2. // стандартный объект alfresco - args
  3. var parentFolderNodeRef = args["parentNodeRef"];
  4. // Получаем параметр name
  5. var newFolderName = args["name"];
  6. if (parentFolderNodeRef && newFolderName) {
  7. // Получаем объект родительского каталога, делаем это
  8. // посредством еще одного стандартного объекта - search, вызываем
  9. // метод findNode и передаем в него nodeRef узла который
  10. // необходимо найти
  11. var parentFolder = search.findNode(parentFolderNodeRef);
  12. // Если узел найден, и он является контейнером
  13. if (parentFolder && parentFolder.isContainer) {
  14. //Убеждаемся что каталога с таким именем еще нет
  15. if (!parentFolder.childByNamePath("/" + newFolderName)) {
  16. // Создаем новый каталог в каталоге parentFolder, посредством
  17. // вызова метода createFolder, который принимает в виде параметра
  18. // имя нового каталога.
  19. var createdFolder = parentFolder.createFolder
  20. (newFolderName);
  21. // Используем стандартный объект model для сохранения данных,
  22. // которые понадобятся для формирования ответа
  23. model.data = {
  24. "name": createdFolder.name,
  25. "nodeRef": createdFolder.nodeRef.toString(),
  26. "path": createdFolder.displayPath.toString()
  27. };
  28. }
  29. // В случае если мы пытаемся продублировать имя каталога
  30. // необходимо сформировать ответ об исключительной
  31. // ситуации, делается это с использованием объекта status,
  32. // в поле code присваиваем код HTTP статуса 403, что
  33. //свидетельствует об ошибке, в поле message - описание
  34. else {
  35. status.code = 403;
  36. status.message = "Folder " + newFolderName + " already
  37. exists.";
  38. status.redirect = true;
  39. }
  40. }
  41. else {
  42. status.code = 400;
  43. status.message = "Folder with nodeRef " +
  44. parentFolderNodeRef + " not found.";
  45. status.redirect = true;
  46. }
  47. }
  48. else {
  49. status.code = 403;
  50. status.message = "Invalid arguments.";
  51. status.redirect = true;
  52. }

Опишем шаблон вывода результата работы веб скрипта в формате json.

folder.post.json.ftl

  1. <#--Включаем экранирование символов-->
  2. <#escape x as jsonUtils.encodeJSONString(x)>
  3. {
  4. "data":{
  5. <#--Получаем из объекта data, который мы в контроллере сохранили в объекте model, поля name, nodeRef и path-->
  6. "name":"${data.name}",
  7. "nodeRef":"${data.nodeRef}",
  8. "path":"${data.path}"
  9. }
  10. }

Опишем шаблон вывода результата работы веб скрипта в формате xml.

folder.post.xml.ftl

  1. <!--?xml version="1.0" encoding="utf8"?-->
  2. <#--Включаем экранирование символов-->
  3. <#escape x as x?xml>
  4. <#--Корневой элемент-->
  5. <data>
  6. <#--Получаем из объекта data, который мы в контроллере сохранили
  7. в объекте model, поля name, nodeRef и path-->
  8. ${data.name}
  9. ${data.nodeRef}
  10. ${data.path}
  11. </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

  1. <webscript>
  2. <shortname>List User Dashlet</shortname>
  3. <description>Simple dashlet</description>
  4. <family>dashlet</family>
  5. <url>/components/dashlets/listuser</url>
  6. </webscript>

users.get.js

  1. //Создаем объект-коннектор, который позволит обращаться к alfresco
  2. var connector = remote.connect('alfresco');
  3. //Обращаемся к сервису расположенному по URL /jazz/users,
  4. //который вернет список пользователей в формате json
  5. var dataStr = connector.get('/jazz/users');
  6. //Парсим полученную json-строку, переводим ее в js объект
  7. var data = eval('(' + dataStr + ')').data;
  8. //Сохраняем полученные данные в поле data объекта model,
  9. //для последующего использования в шаблоне вывода
  10. model.data = data;

Опишем шаблон страницы которая будет являться представлением дашлета

users.get.html.ftl

  1. <script type="text/javascript">
  2. <#--Позволим панели быть расширяемой, изменять свой размер-->
  3. new Alfresco.widget.DashletResizer("${args.htmlid}",
  4. "${instance.object.id}");
  5. </script>
  6. <div class="dashlet" style="height: 40%">
  7. <#--Установим заголовок панели-->
  8. <div class="title">${msg('label.title')}</div>
  9. <div class="body scrollableList">
  10. <#--Оформим вывод записей в виде списка таблиц-->
  11. <#list data.users as user>
  12. <div class="detail-list-item
  13. <#if !user_has_next>last-item</#if>">
  14. <table>
  15. <tr>
  16. <td>
  17. <div class="yui-dt-liner">
  18. <#--Установим иконку для юзера-->
  19. <img src='/share/res/components/documentlibrary/images/
  20. folder-32.png'/>
  21. </div>
  22. </td>
  23. <td>
  24. <h4>
  25. <a class="theme-color-1" href="#">${user.fullName}
  26. (${user.nickName})</a>
  27. </h4>
  28. </td>
  29. </tr>
  30. </table>
  31. </div>
  32. </#list>
  33. </div>
  34. </div>

users.get_ru.properties

  1. 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 *