Mat*_*hic 1 java content-management alfresco dm ecm
在与伦敦DevCon的一些人交谈之后,在查看了记录管理源代码之后,我注意到实际上并没有如何实现自定义文档生命周期的好例子.我知道有规则和内容建模甚至工作流程的例子,但这些解决方案不能真正用于实现像Records Management这样更严肃的事情.
我想知道的是如何有效地将Java解决方案(我对OO和Java的经验比Alfresco更多)映射到Alfresco.什么应该定义为Java类,什么应该是内容模型中的类型/方面.何时支持行为优先于规则以及何时实际使用工作流程.在我的前几个项目中,我使用工作流来实现文档生命周期,我在工作流节点中编写了很多bussines/domain逻辑 - 作为动作(JS).我后来发现这很难维护,因为你在工作流程中有一些代码,一些在存储库中作为脚本(数据字典/脚本),一些Java,...
Records Management是一个很好的例子,可以开始学习并查看实现完整文档生命周期的一些最佳实践吗?还有其他资源吗?
我对如何在java中实现完整生命周期以及如何"集中"bussines/domain逻辑感到非常困惑.
ECM的范围很广,因此很难提出完整的通用指南:您确实需要坚持使用必须解决的用例并找到最佳解决方案.RM是如何在Alfresco之上实现记录管理解决方案的一个很好的例子,但是在实现Web发布过程时它绝对没用,因为WCM QS是你想要作为起点的.
在Alfresco为开发人员提供的整个API中,他们的内在特征最终是了解何时使用它们的最佳资源.让我们看看我是否能理解(至少最重要的)他们.
内容类型
这是您始终需要开始实施Alfresco项目的地方.您需要与具有您需要实施的文档处理的深层领域知识的人密切合作,并为不同的文档生命周期定义根元素.在Alfresco中,您必须为给定节点分配一种且仅一种内容类型.这是在内容创建时完成的,并且通常不会在内容生命周期中进行更改.因此,内容类型通常用于标识具有完全不同的生命周期(例如cm:document和ws:article)的内容项,并且定义内容类型意味着提取将在整个文档生命周期中使用或有用的基本元数据属性.
方面
虽然内容类型基本上是静态的垂直分类和文档的丰富,但方面是它们的动态表兄弟.与内容类型相反,您可以动态地应用或删除方面,对内容节点具有较小的破坏性后果.它们可以使用更多元数据来丰富文档,也可以将其应用于项目,而不管其内容类型如何.这些特性使得方面可能是Alfresco内容模型中最灵活的特性:您可以使用它们来标记内容或启用/禁用在不同内容生命周期之间共享的操作(例如cm:versionable,rma:filePlanComponent).从本质上讲,方面旨在处理在几个不同的生命周期或生命周期步骤中发生的交叉概念.
行为
在这里,我们将概述如何在Alfresco解决方案中添加逻辑.行为是由特定触发器触发的自动计算,其中触发器被定义为[类型/方面,策略]对(例如[ cm:versionable,onCreateNode]).它们通常在触发触发器的事件的同一事务中执行,不能保证执行顺序,也没有协调或编排.这使得它们非常适合自动内容生成或处理(例如,创建缩略图或更新某些元数据),这些内容需要是内容生命周期的组成部分,但这并不是正式流程的严格组成部分.
它们是正常操作或工作流程的辅助或补充操作.它们需要Java编码,因此形成了一个相当固定的解决方案部分.您通常在完成内容建模阶段之后和开始设计工作流程之前识别和设计行为.
规则
与行为类似,规则在特定事件时触发,但它们比它们更通用和动态.您可以在运行时仅在文件夹上配置规则,并将它们绑定到文件夹中发生的事件.这使得它们非常适合在内容存储库中创建特殊存储桶(例如,每当将内容添加到特定文件夹时发送电子邮件),当您处理其中的内容时会发生副作用.它们被实现为文件夹中的隐藏节点,因此是导出的组成部分:理论上,您可以在不同的Alfresco实现中借用它们,前提是所需的部分可用.
它们通常在一段逻辑应用于多种不同类型的内容时使用,但可能不是所有受影响类型的项目,并且只有当您可以将所有受影响的内容节点存储在存储库的子分支中时.即使这样的约束可能听起来很重,规则也是一个非常方便的工具(例如,image/png在/ images中为mime类型生成所有png文档的缩略图).
操作
操作是捆绑的逻辑片段,可以根据需要针对节点调用.它们是规则的构建块,通常在工作流程中使用(例如发送电子邮件).它们也可以直接绑定到UI组件/按钮,以便允许用户直接暴露给应用程序的可用功能.当您需要(想要启用)在不同的上下文中重用相同的逻辑时,通常最终会开发一个操作,例如工作流,规则和/或直接用户交互.
工作流程
这可能是文档管理的核心业务:工作流允许您构建一个协调的流程,引导用户完成定义的步骤,基本上实现人工算法.工作流允许您编写自定义代码,但为了可维护性,您可能希望将此类代码限制为工作流本身执行所需的最低限度,并将更复杂的操作外部化为操作或脚本.
如果您正在进行文档管理,工作流的设计和实现可以在内容建模之后立即开始,可能会产生其他几个开发活动,例如附件操作和脚本,并且它们可能会持续到您调用代码功能完成为止,你开始摆弄UI上的所有无限变更请求或剩菜:-)