Liferay 如何在life ray现有用户表中添加自定义字段?

Liferay 如何在life ray现有用户表中添加自定义字段?,liferay,hook,liferay-6,liferay-aui,expando,Liferay,Hook,Liferay 6,Liferay Aui,Expando,我有一个要求,即网站所有者拥有创建用户的权限,并且能够查看仅由他创建的用户列表 为了实现同样的目的,我创建了一个portlet,它的表单包含基本的用户详细信息。在我的action类中提交表单时,我通过调用以下方法在user_uu表中插入用户详细信息: try{ UserLocalServiceUtil.addUser(creatorUserId, companyId, autoPassword, password1, password2, autoScreenName, scr

我有一个要求,即网站所有者拥有创建用户的权限,并且能够查看仅由他创建的用户列表

为了实现同样的目的,我创建了一个portlet,它的表单包含基本的用户详细信息。在我的action类中提交表单时,我通过调用以下方法在user_uu表中插入用户详细信息:

    try{
    UserLocalServiceUtil.addUser(creatorUserId, companyId, autoPassword, password1, password2, 
autoScreenName, screenName, emailAddress, facebookId, openId, locale, firstName, middleName, lastName, 
prefixId, suffixId, male, birthdayMonth,birthdayDay, birthdayYear, jobTitle, groupIds, 
organizationsIds, roleIds, userGroupIds, sendEmail, serviceContext);
    }
    catch(Exception e)
    {
    }

    int userCount = UserLocalServiceUtil.getUsersCount();
现在用户正在用户表中创建。但是,在显示用户列表时,我只需要显示该网站所有者创建的用户

因此,我想在用户表中再插入一列,如
siteId
,在基于
siteId
获取时,我想优化列表并在UI上显示

因此,我已经经历了Expando的概念,但我没有得到正确的想法如何使用它根据我的要求

因此,任何人请建议我如何在调用
addUser
方法和基于此
siteId
获取用户列表时插入'siteId'

提前谢谢

物理添加列的唯一(也是非常不推荐的)方法是通过EXT环境修改Liferay core

除此之外,实现您需要的第一个操作是不要使用liferay“站点”,而是使用liferay“门户实例”。。。这有点像不同的Liferay安装:它们都将共享相同的软件基础架构,但逻辑上它们是不同的Liferay安装。 了解更多信息

如果这种方法不适用,第二种方法是使用Expando桥。 通过使用它,您可以将一个“virtual”字段添加到包含相关groupId的“User\”表中

您可以使用serviceutil的公共get()方法来访问expando值。 有两种不同的方式访问Expando值

第一个是执行user.getExpandoBridge().get。。。但它需要一个用户对象。。。因此,在返回列表之前,您应该迭代任何用户

后者是直接使用ExpandoTableLocalService、ExpandoColumnLocalService和ExpandoValueLocalService直接获取包含您的groupId值的所有expando行

…但在这一点上,为什么不直接使用自定义映射表呢

您只需要创建一个包含userId和groupId对的表。。。获取按groupId筛选的所有userId,然后对User_uu表执行动态查询。这不是最好的数据库形式,但您可以实现您的目标

您只需要向portlet添加一个服务层:了解Liferay最强大的功能之一


这是一个干净的方式来达到您的要求。。。但请记住,网站并不是为了这个目的而设计的。。。整个LR许可系统将忽略您以这种方式强制执行的抽象。

谢谢您的建议。我想用Expando桥。那么,如何将站点ID与UserLocalServiceUtil.addUser()一起插入。您需要addUser返回的user对象,才能获得expando桥,如我的注释所示。在这种情况下,您可以直接获得对象上的桥,然后添加您需要的值,即一个特定的“(expando)列”。非常抱歉。我是新来的,雷。你能再解释一下吗。或者如果可能的话给我一些参考。提前感谢Google search是最好的起点:它可以建议像或这样的链接,或者很容易找到新的示例(请注意,因为访问expandoBridge的方法在不同的LR版本中更改了签名,但您的行为是相同的)。顺便说一句,我的《生命之光》这本书是最有用的资源之一。