3

我想在Liferay 6.1.20 EE中创建我自己的默认文档类型和元数据集。

目前,Liferay 实现创建了自己的默认文档类型和元数据集,例如合同、在线培训等,它们是在 AddDefaultDocumentLibraryStructuresAction 类中创建的,该类从 AddDefaultDataAction 类调用,这是一个启动操作。

Liferay 论坛帖子中所述,如果我们想关闭此创建过程,我们需要在 AddDefaultDataAction 中注释掉相关行,或者我们可以在 application.startup.events中添加自定义 AddDefaultDataAction覆盖默认值。

这可以使用一个钩子来覆盖 application.startup.events 吗?如果是,我们如何覆盖 AddDefaultDataAction 类,因为它是一个portal-impl.jar类,我们无法从钩子中访问它?如果没有,是否应该为此目的使用ext 插件?或者有没有更直接的方法来实现我自己的默认文档类型和元数据集?

4

1 回答 1

6

如果您查看在 中找到的默认配置,portal.properties它会说

#
# Application startup event that runs once for every web site instance of
# the portal that initializes.
#
application.startup.events=com.liferay.portal.events.AddDefaultDataAction,\
     com.liferay.portal.events.AppStartupAction,\
     com.liferay.portal.events.ChannelHubAppStartupAction

因此,您可以com.liferay.portal.events.AddDefaultDataAction通过在您的portal-ext.properties:

application.startup.events=com.liferay.portal.events.AppStartupAction,\
     com.liferay.portal.events.ChannelHubAppStartupAction

如果要对所有新安装执行此操作,则必须在实例首次启动之前添加此更改。或者您应该编写一个开箱即用的 ext 插件。为什么需要分机?钩子只能添加另一个 StartupAction,不能更改现有的。ext可以更改或删除现有的启动操作或覆盖其代码。

在 ext 插件中,您还可以实现

application.startup.events=com.mariaioannidou.MyCustomAddDefaultDataAction,\
     com.liferay.portal.events.AppStartupAction,\
     com.liferay.portal.events.ChannelHubAppStartupAction

并实现MyCustomAddDefaultDataAction与默认操作相同的操作,无需创建文档类型。

另一方面,钩子可以找到所有您不想要的标准文档类型,检查它们是否确实未被使用,然后删除它们。如您所见,AddDefaultDataAction它所做的不仅仅是添加文档类型,因此您可能希望操作中的其余代码运行。

另一种选择是编写一个 ext 插件,它实际上改变了 的实现com.liferay.portal.events.AddDefaultDataAction,但是你又有了一个 ext - 如果你在第一次启动之前没有在每次安装中部署它,你最终会得到默认的内容,并且您可能需要一些代码来自动删除它。

我个人的建议是使用钩子,删除不需要的文档类型(如果它们未使用) - 原因是:

  1. 易于部署(可热部署),
  2. 如果你在第一次运行之前没有部署你的插件,你最终还是需要删除不需要的文档类型,
  3. 可维护性:比 ext 插件更容易维护钩子。
于 2013-05-24T15:38:40.937 回答