我们如何在 liferay7 中覆盖 liferay 模块?

Posted

技术标签:

【中文标题】我们如何在 liferay7 中覆盖 liferay 模块?【英文标题】:How can we override liferay module in liferay7? 【发布时间】:2017-12-14 07:55:44 【问题描述】:

我对 liferay 7 非常陌生,实际上我们正在将 liferay 6.2 迁移到 liferay-7,在 6.2 中我们使用 ext 来覆盖动作类,但在 liferay-7 中我有些困惑,请你帮忙我出去。

我的分机的主题是:每当从控制面板在组织中创建新角色时,我们需要将角色信息和组织信息存储在我们拥有的自定义表中在 LR6.2 中覆盖了 EditRoleAction.java,所以我们试图在 LR7 中实现相同的目标。

Liferay 6.2 中的动作类:

传送门路径: D:\Liferay6.2workspace\portal\portal-impl\src\com\liferay\portlet\rolesadmin\action\EditRoleAction.java

外部路径: CutomRoles-ext/docroot/WEB-INF/ext-impl/src/com/liferay/portlet/rolesadmin/action/EditRoleAction.java

Liferay 7.0GA4 中的动作类:

D:\Liferay7GA4\portal\modules\apps\foundation\roles\roles-admin-web\src\main\java\com\liferay\roles\admin\web\internal\portlet*RolesAdminPortlet.java *

【问题讨论】:

我们是来“帮忙”的,但是您只描述了一些文件,而不是您真正想要实现的目标。你在被覆盖的动作中做什么 - 或者你正在添加一个新动作?请用代码和商业术语描述(不要评论这些细节,而是编辑你的问题) 你好@OlafKock 你能检查更新的问题吗 【参考方案1】:

这听起来真的像覆盖 Action 不是正确的去处。查找ServiceWrappers - 这些将在业务层上运行,您可以将附加代码添加到(从内存中)RoleLocalService.addRole(...) 和其他相关方法。

Ext 从来没有必要用于此目的,也不应该首先使用。事实上,使用 ext 时,您故意使维护和升级比使用常规插件路线更难。对于 Liferay 7 和 DXP,使用 ext 应该是非常罕见的绝对例外。事实上,它只是在迄今为止缺席后才重新引入(因为在少数罕见的例外情况下,它仍然是唯一的方法)。但是,可以肯定地假设您不需要它。

现在这个答案的 cmets 中的描述比问题中的描述更进一步:您可能还需要一些 portlet 级别的自定义。为此:确定当前实现 portlet 的位置(例如,识别模块)并覆盖其操作(this article 很有可能可以提供帮助)以及可能还有 UI。

还有另一种选择:您也许可以通过在组织的站点中使用 Teams 来实现相同的目的:它们的行为几乎类似于角色,但仅适用于单个站点(虽然没有组织,但您声明您的组织有站点无论如何)

【讨论】:

谢谢@Olaf Kock,但我怎么能在 addRole() 方法中获得组织 ID 角色没有组织ID,不确定您要实现的目标:创建角色时,它只是一个角色。仅当您将组织范围的角色分配给某人时,才会涉及组织 ID。但这远不是您创建角色的地方 感谢@Oalf Kock 的宝贵回复,是的,您说的绝对正确,但我们想存储角色 ID 和 组织 ID(来自哪个站点(组织)创建的角色)在我们的自定义表中,即使我们没有请求对象所以我怎么能得到组织ID,有没有可能从服务上下文中获取组织ID对象 我不明白:角色是从控制面板创建的,而不是从组织内部创建的。即便如此,它也可以在任何组织中使用。您可能会从请求中得到一些东西,但我看不出这些附加信息在现实生活中的哪些方面具有一定的相关性。 是的,该角色可以在任何组织中使用,但在我的情况下,组织角色特定于该组织,您从中访问(例如:我创建了一个名为“org1”的组织及其有一个站点,现在我访问了作为测试登录的 org1 站点,并且在控制面板中我试图创建组织角色,所以这个 orgRole 应该自动映射到 org1 组织,并且这个 orgRole 不应该对任何其他组织可见,这就是我们的原因正在将 organizationId 及其 roleId 存储在我们的自定义表中)

以上是关于我们如何在 liferay7 中覆盖 liferay 模块?的主要内容,如果未能解决你的问题,请参考以下文章

Liferay7 BPM门户开发之37: Liferay7下的OSGi Hook集成开发

liferay7中如何Hiding the default Success Message

如何获得可重复的文本字段 liferay7 Freemarker 之一

如何在网络表单 Liferay 7 中支持文件上传?

Liferay 7 - 创建经典主题的子主题

Liferay7 BPM门户开发之8: Activiti实用问题集合