Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Alfresco-自定义文档生命周期(Java?)的最佳实践_Java_Alfresco_Content Management_Ecm_Dm - Fatal编程技术网

Alfresco-自定义文档生命周期(Java?)的最佳实践

Alfresco-自定义文档生命周期(Java?)的最佳实践,java,alfresco,content-management,ecm,dm,Java,Alfresco,Content Management,Ecm,Dm,在与伦敦DevCon的一些人交谈之后,在查看记录管理源代码之后,我注意到实际上没有关于如何实现自定义文档生命周期的好例子。 我知道有一些规则和内容建模的例子,甚至还有工作流,但这些解决方案并不能真正用于实现像记录管理这样更严肃的事情 我想知道的是如何有效地将Java解决方案(我在OO和Java方面的经验比Alfresco多)映射到Alfresco。什么应该定义为Java类,什么应该是内容模型中的类型/方面。何时将行为置于规则之上,何时实际使用工作流。在我最初的几个项目中,我使用工作流来实现文档生

在与伦敦DevCon的一些人交谈之后,在查看记录管理源代码之后,我注意到实际上没有关于如何实现自定义文档生命周期的好例子。 我知道有一些规则和内容建模的例子,甚至还有工作流,但这些解决方案并不能真正用于实现像记录管理这样更严肃的事情

我想知道的是如何有效地将Java解决方案(我在OO和Java方面的经验比Alfresco多)映射到Alfresco。什么应该定义为Java类,什么应该是内容模型中的类型/方面。何时将行为置于规则之上,何时实际使用工作流。在我最初的几个项目中,我使用工作流来实现文档生命周期,我在工作流节点中编写了相当多的业务/域逻辑-作为操作(JS)。我后来发现,这很难维护,因为您在工作流中有一些代码,在存储库中有一些作为脚本(数据字典/脚本)的代码,还有一些Java

记录管理是一个很好的示例,可以从中学习并了解实施完整文档生命周期的一些最佳实践吗?还有其他资源吗


如何在java中实现完整的生命周期以及如何“集中”业务/领域逻辑是我最头疼的问题。

ECM的范围很大,因此很难制定出完全通用的指导原则:您确实需要坚持您必须解决的用例,并找到最佳的解决方案。是如何在Alfresco之上实现记录管理解决方案的一个很好的示例,但在实现web发布过程时,它是绝对无用的,而web发布过程正是您希望看到的起点

就Alfresco为开发人员提供的所有API而言,它们的内部特性最终是理解何时使用它们的最佳资源。让我们看看我是否能理解(至少是其中最重要的)

内容类型

这是您始终需要开始实施露天项目的地方。您需要与对需要实现的文档处理有深入领域知识的人密切合作,并为不同的文档生命周期定义根元素。在Alfresco中,必须将一种且仅一种内容类型指定给给定节点。这是在内容创建时完成的,并且在内容生命周期中不会经常更改。因此,内容类型通常用于识别生命周期完全不同的内容项(例如,
cm:document
ws:article
),定义内容类型意味着提取在整个文档生命周期中将使用或有用的基本元数据属性

方面

虽然内容类型基本上是静态的垂直分类和文档的丰富,但方面是它们的动态表亲。与内容类型不同,您可以动态应用或删除方面,对内容节点的破坏性较小或没有。它们可以或不可以使用更多元数据丰富文档,并且可以应用于项目,而不管其内容类型如何。这些特性使方面可能成为Alfresco内容模型最灵活的功能:您可以使用它们来标记内容或启用/禁用不同内容生命周期之间共享的操作(例如,
cm:versionable
rma:filePlanComponent
)。本质上,方面是用来处理在几个不同的生命周期或生命周期步骤中出现的交叉概念

行为

在这里,我们开始概述如何在Alfresco解决方案中添加逻辑。行为是由特定触发器触发的自动计算,其中触发器定义为[type/aspect,policy]对(例如。[
cm:versionable
onCreateNode
)。它们通常在触发触发器的事件的同一事务中执行,执行顺序没有保证,也没有协调或编排。这使得它们非常适合自动生成或处理内容(例如,创建缩略图或更新某些元数据),这些内容需要成为内容生命周期的组成部分,但严格来说并不是正式流程的一部分

它们是正常操作或工作流的辅助或补充操作。它们需要Java编码,从而形成解决方案中相当固定的一部分。通常,在完成内容建模阶段之后和开始设计工作流之前,您就可以识别和设计行为

规则

与行为类似,规则是在特定事件时触发的,但它们比它们更通用和动态。您只能在运行时对文件夹配置规则,并将其绑定到文件夹中发生的事件。这使它们非常适合在您的内容存储库中创建特殊的存储桶(例如,每当内容添加到特定文件夹时发送电子邮件),当您处理其中的内容时会产生副作用。它们被实现为文件夹中的隐藏节点,因此是导出的组成部分:理论上,您可以在不同的Alfresco实现中借用它们,只要所需的部分可用

当一段逻辑应用于几种不同类型的内容时,通常会使用它们,但可能不会应用于受影响类型的所有项目,并且仅当您可以将所有受影响的内容节点存储在存储库的一个子分支中时,才会使用它们。即使这样的约束听起来很重,但规则还是非常方便的工具(例如,为所有mime类型为
image/png
in/images的png文档生成缩略图)

行动

动作是捆绑的逻辑片段,可以根据需要对节点进行调用。它们是规则的构建块,通常在工作流中使用(例如发送电子邮件)