Alfresco — лучшие практики для пользовательского жизненного цикла документа (Java?)

Поговорив с некоторыми людьми на DevCon в Лондоне и просмотрев исходный код Records Management, я заметил, что на самом деле нет хорошего примера того, как реализовать жизненный цикл настраиваемых документов. Я знаю, что есть примеры правил и моделирования контента и даже рабочих процессов, но эти решения нельзя использовать для реализации чего-то более серьезного, например, управления записями.

Мне интересно, как эффективно сопоставить решение Java (у меня больше опыта работы с OO и Java, чем с Alfresco) с Alfresco. Что должно быть определено как класс Java и что должно быть типом/аспектом в модели контента. Когда отдавать предпочтение поведению, а не правилам, а когда действительно использовать рабочие процессы. В своих первых нескольких проектах я использовал рабочие процессы для реализации жизненного цикла документа, я написал довольно много логики бизнеса/предметной области в узлах рабочего процесса - как действия (JS). Позже я узнал, что это довольно сложно поддерживать, поскольку у вас есть некоторый код в рабочих процессах, некоторые в репозитории в виде скриптов (словарь данных/скрипты), некоторые Java,...

Является ли управление записями хорошим примером, с которого можно начать учиться и ознакомиться с некоторыми передовыми методами реализации полного жизненного цикла документов? Есть ли другие ресурсы?

Я больше всего борюсь с тем, как реализовать полный жизненный цикл в java и как «централизовать» логику бизнеса/домена.


person Matjaz Muhic    schedule 22.11.2011    source источник


Ответы (1)


Масштабы ECM огромны, и поэтому довольно сложно дать полностью общие рекомендации: вам действительно нужно придерживаться варианта использования, к которому вы должны обратиться, и найти для него лучшее решение. RM — отличный пример того, как внедрить решение для управления записями поверх Alfresco, но это абсолютно бесполезно, когда дело доходит до реализации процесса веб-публикации, для которого WCM QS вы хотите рассмотреть в качестве отправной точки.

Что касается всех API-интерфейсов, которые Alfresco предлагает разработчикам, их внутренние характеристики в конечном итоге являются лучшим ресурсом для понимания того, когда их использовать. Посмотрим, смогу ли я разобраться в них (по крайней мере, в наиболее важных из них).

Типы контента

Именно с этого всегда нужно начинать реализацию проекта Alfresco. Вам необходимо тесно сотрудничать с кем-то, кто хорошо разбирается в предметной области обработки документов, которую необходимо внедрить, и определить корневые элементы для различных жизненных циклов документов. В Alfresco вы должны назначить один и только один тип содержимого данному узлу. Это делается во время создания контента и не часто меняется в течение жизненного цикла контента. Таким образом, типы контента обычно используются для идентификации элементов контента с совершенно разными жизненными циклами (например, cm:document и ws:article), а определение типа контента означает извлечение основных свойств метаданных, которые будут использоваться или быть полезными на протяжении всего жизненного цикла документа.

Аспекты

В то время как типы контента в основном представляют собой статическую вертикальную классификацию и обогащение документов, аспекты являются их динамическими родственниками. В отличие от типов контента, вы можете динамически применять или удалять аспекты с минимальными разрушительными последствиями для узлов контента. Они могут или не могут обогатить документ дополнительными метаданными, и могут применяться к элементам независимо от их типов содержимого. Эти характеристики делают аспекты, возможно, наиболее гибкой функцией модели контента Alfresco: вы можете использовать их для маркировки контента или включения/отключения операций, общих для разных жизненных циклов контента (например, cm:versionable, rma:filePlanComponent). По своей природе аспекты предназначены для обработки сквозных концепций, которые встречаются в нескольких различных жизненных циклах или этапах жизненного цикла.

Поведение

Здесь мы начинаем обзор того, как добавить логику в ваше решение Alfresco. Поведения — это автоматические вычисления, запускаемые определенными триггерами, где триггеры определяются как пара [тип/аспект, политика] (например, [cm:versionable, onCreateNode]). Как правило, они выполняются в рамках той же транзакции события, которое запускает триггер, порядок выполнения не гарантируется, отсутствует координация или оркестровка. Это делает их идеальными для автоматического создания или обработки контента (например, создания эскиза или обновления некоторых метаданных), которые должны быть неотъемлемой частью жизненного цикла контента, но не являются строго частью формализованного процесса.

Это скорее вспомогательные или дополнительные операции для обычных операций или рабочих процессов. Они требуют Java-кодирования, таким образом, образуя довольно фиксированную часть вашего решения. Обычно вы определяете и проектируете поведение сразу после завершения этапа моделирования контента и до начала проектирования рабочих процессов.

Правила

Подобно поведению, правила срабатывают при определенных событиях, но они гораздо более общие и динамичные, чем они. Вы можете настраивать правила только для папок во время выполнения и привязывать их к событиям, происходящим в папке. Это делает их идеальными для создания специальных сегментов в вашем репозитории контента (например, для отправки электронного письма всякий раз, когда контент добавляется в определенную папку), где побочные эффекты возникают при работе с контентом внутри него. Они реализованы как скрытые узлы в папках, таким образом, являясь неотъемлемой частью экспорта: теоретически вы можете заимствовать их в различных реализациях Alfresco, при условии, что необходимые части доступны.

Обычно они используются, когда часть логики применяется к содержимому нескольких разных типов, но, возможно, не ко всем элементам затронутых типов, и только когда вы можете хранить все затронутые узлы содержимого в подветви репозитория. Даже если такое ограничение может показаться тяжелым, правила оказываются весьма удобным инструментом (например, создание эскиза для всех документов png с типом mime image/png в /images).

Действия

Действия — это связанные фрагменты логики, которые могут быть вызваны для узла по запросу. Они являются строительными блоками для правил и часто используются в рабочих процессах (например, при отправке электронного письма). Их также удобно напрямую связывать с компонентами/кнопками пользовательского интерфейса, чтобы пользователь мог напрямую ознакомиться с доступными функциями вашего приложения. Обычно вы заканчиваете тем, что разрабатываете действие, когда вам нужно (или вы хотите включить) повторное использование одной и той же части логики в разных контекстах, таких как рабочий процесс, правило и/или прямое взаимодействие с пользователем.

Рабочие процессы

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

Если вы занимаетесь управлением документами, проектирование и реализация рабочего процесса может начаться сразу после моделирования контента, что может повлечь за собой несколько других действий по разработке, таких как дополнительные действия и сценарии, и они, вероятно, будут продолжаться до тех пор, пока вы не завершите свою функцию кода. и вы начинаете возиться со всеми бесконечными запросами на изменение или остатками в пользовательском интерфейсе :-)

person Community    schedule 22.11.2011
comment
Что меня больше всего беспокоит в правилах, так это то, что они привязаны к ссылкам на узлы, а не к пути к репозиторию (company_home/test/test2). Это приносит проблемы, когда вы экспортируете вещи. Можете ли вы объявить их программно и применить при загрузке пакета усилителя или что-то в этом роде? В конце концов, я хочу, чтобы мое программное обеспечение было полностью упаковано в усилитель и когда усилитель загружен, готов к использованию (возможно, всего 1 клик для создания сайта пользовательского типа). - person Matjaz Muhic; 22.11.2011
comment
Импорта привязок UUID недостаточно для этого? - person skuro; 22.11.2011
comment
Да, вы можете применять правила как часть процесса начальной загрузки AMP. - person skuro; 22.11.2011
comment
Кстати, как лучше всего хранить параметры конфигурации и параметры для списков, таких как раскрывающиеся списки и тому подобное, динамически? В настоящее время мы используем собственный репозиторий alfresco для хранения списков. Например, мы храним деловых партнеров в виде пространств (название пространства = имя делового партнера). Мы также храним некоторую другую конфигурацию, подобную этой, или как контент с настраиваемыми метаданными. Также. Когда бы вы расширили sys:base и использовали бы его, как в случае пользовательского рейтинга, упомянутого в этой статье: ecmarchitect.com/images/articles/alfresco-behavior/… ? - person Matjaz Muhic; 23.11.2011
comment
Существуют фундаментальные действительные причины, почему динамические списки могут быть плохой идеей. Ассоциации и категоризация/маркировка, как правило, являются лучшим подходом (и обеспечивают те же или более степени контроля), а выбор расширения sys:base вызывает меньшую озабоченность: Джефф мог бы расширить cm:object или cm:folder, не отказываясь от функциональности. Как он утверждает, ему не нужны были какие-то причудливые функции для его узлов, только свойства, отсюда и sys:base. Для меня это выходит за рамки проблем жизненного цикла. - person skuro; 23.11.2011