AlfrescoIntegration

Материал из RunaWFE
Перейти к навигации Перейти к поиску

Руководство по работе с Alfresco

Версия 4.4.1

© 2015-2021, ООО "Процессные технологии", материалы этого документа распространяются свободно на условиях лицензии GNU FDL. RunaWFE Free является системой с открытым кодом и распространяется в соответствии с LGPL лицензией (http://www.gnu.org/licenses/lgpl.html).

# Назначение системы Alfresco

Alfresco можно использовать для организации документооборота:

  • хранение документов в иерархической системе папок
  • хранение атрибутов (мета-данных) документов
  • поддержка версионности документов
  • поиск документов по содержимому или атрибутам

Таким образом Alfresco можно использовать для хранения бизнес-объектов в качестве слоя данных. Интерфейс Alfresco поддерживает расширения, можно реализовывать отчеты используя JSF1.1.

# Проект wfe-alfresco

Проект wfe-alfresco является каркасом для облегчения работы с Alfresco (доступен в репозитории наряду с другими проектами wfe).

Основные возможности:

  • построение Lucene-запросов в объектном виде
  • обеспечение конверсии модели Alfresco и объектной модели Java
  • базовые классы для использования в RunaWFE (обработчик, орг.функция, тег)

# Alfresco content to Java object mapping

Позволяет работать с объектами (контентом) Alfresco посредством Java-объектов.

# Alfresco API

При взаимодействии с Alfresco может использоваться: Java API и WebServices API. Для этого предназначены 2 реализации интерфейса AlfConn: AlfHelper (для Java API) и AlfSession (для WebServices API).

AlfHelper может быть использован только в той же JVM, в который выполняется Alfresco.

AlfSession может быть использован как локально, так и удаленно. Именно он используется на стороне WFE.

# Поиск объектов

Поиск в Alfresco производится посредством запроса в формате Lucene и коннектора AlfConn.

Пакет ru.runa.alfresco.search содержит классы для динамического построения запроса, который затем может быть преобразован в запрос формата Lucene.

Класс Search является корневым контейнером поискового запроса, содержит условия фильтрации и условия сортировки. Ограничение по количеству результатов поиска может быть установлено в этом же классе. Обратите внимание, что сортировка не работает через WebServices API.

Класс Group является контейнером, содержащим список дочерних элементов (групп или выражений) с действующим на них оператором (AND, OR, NOT).

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

Выражение Expr состоит из операнда и параметров, необходимых для успешной работы оператора.

# Создание собственного типа на основе AlfObject

Соответствия между типами определяются аннотациями Type, Property, Assoc.

Каждый тип Java, соответствующий типу контента Alfresco должен наследоваться от AlfObject.

Также должны быть соблюдены условия:

  • публичный конструктор без параметров
  • для ссылочного свойства myProperty нужно использовать методы getMyProperty и setMyProperty
    • тип свойства myProperty должен реализовывать интерфейс-маркер IAlfObject
    • при вызове метода getMyProperty, если значение объекта не закешировано, будет сделан запрос в Alfresco по его UUID
@Property(name = "ewtEmployee")
private Employee employee;
public Employee getEmployee() {
 return employee;
}
public void setEmployee(Employee employee) {
 this.employee = employee;
}
  • для ассоциации myAssoc нужно использовать метод getMyAssoc
    • при вызове метода getMyAssoc, если коллекция еще не заполнена, будет сделан запрос в Alfresco для загрузки ассоциации
@Assoc(name = "ewtTimingRecords")
private final Set<TimingRecord> timingRecords = Sets.newHashSet();
public Set<TimingRecord> getTimingRecords() {
 return timingRecords;
}
  • для свойств (multiple=true in Alfresco) в Java могут быть типа массив или java.util.ArrayList. В первом случае они являются не модифицируемыми.
@Property(name="ewtInOuts")
private ArrayList<String> inOuts;

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

# Базовые классы для использования в RunaWFE

Набор базовых реализаций для обработчика, оргфункции, валидатора, тега, используемых в RunaWFE переопределяет сходные методы, добавляя в ниx дополнительный аргумент (AlfSession), который может быть использован для взаимодействия с Alfresco.

# Конфигурация

Конфигурационный файл alfwf.settings.xml предназначен для настройки отдельных элементов системы за счет различных фрагментов файла.

Например фрагмент alf/connection используется классом WSConnectionSettings, в то время как фрагменты alf/imports, alf/mappings используются классом Mappings. Вообще, расширение класса Settings и добавление новых фрагментов в XML файл представляется удобным с точки зрения хранения конфигурации в одном месте.

# Пример использования

Описание

На демонстрационном стенде развернут процесс approve my doc.

Процесс позволяет подтвердить или отклонить документ, предварительно расположив его в Alfresco.

Для этого (код, используемый в процессе):

  • в Alfresco определена модель данных,
  • в RunaWFE определен класс MyDoc, соответствующий новому типу документа
  • в RunaWFE определены обработчики для взаимодействия с Alfresco: создание документа, подтверждение документа, отклонение документа
  • в RunaWFE определен тег, отображающий статус документа на форме задания

Установка и настройка

Замечание. Используемая версия AlfrescoLabs 3.0 Final

Замечание. В дистрибутив проект wfe-alfresco не включен. При сборке проекта необходимо его подключить с помощью maven.

  • Расположите в ${Alfresco}/tomcat/shared/classes/alfresco/extension файлы
    • demo-context.xml расширение контекста Spring
    • demoModel.xml модель к предметной области
    • web-client-config-custom.xml расширение для просмотра свойства в интерфейсе Alfresco
  • При запущенном Alfresco создайте папку, в которой будут создаваться документы, её UUID (например 92253b54-41c5-4873-bfd4-ba8270cba38c) замените в файле alfwf.settings.xml
  • Скопируйте файл alfwf.settings.xml в папку для расширений RunaWFE
  • Скопируйте файл wfe.custom.ftl.form.tags.xml в папку для расширений RunaWFE
  • При запущенном RunaWFE загрузите процесс approve my doc.par в систему

Файл:AlfrescoDemo.zip