AlfrescoIntegration
Руководство по работе с Alfresco
Версия 4.6.0
© 2015-2023, ООО "Процессные технологии"
# Назначение системы 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 (свободно загрузить 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 в систему