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

How can we override liferay module in liferay7?

我是 liferay 7 的新手,实际上我们正在将 liferay 6.2 迁移到 liferay-7,在 6.2 中我们使用 ext 来覆盖操作 class 但在 liferay-7 中我得到了一些cofusion,你能帮帮我吗

我的 ext 的主题是: 每当从控制面板在组织中创建新角色时,我们需要将角色信息和组织信息存储在我们的自定义中table 因为我们已经在 LR6.2 中覆盖了 EditRoleAction.java 所以我们试图在 LR7 中实现同样的事情。

Liferay 6.2 中的动作 class :

传送门路径: 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 中的动作 class:

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

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

Ext 从来都不是这个目的所必需的,一开始就不应该使用。事实上,使用 ext 与使用常规插件路线相比,您故意使维护和升级更加困难。在 Liferay 7 和 DXP 中,ext 的使用应该是极其罕见的绝对例外。事实上,它在迄今为止缺席之后才被重新引入(因为在一些罕见的例外情况下它仍然是唯一的方法)。但是,可以安全地假设您不需要它。

既然这个答案的评论中的描述比问题中的描述更进一步:您可能还需要一些 portlet 级别的自定义。为此:确定 portlet 当前在何处实施(例如,确定模块)并覆盖其操作(this article 很有可能会有所帮助)并且可能还有 UI。

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