如何在 life ray 现有用户 table 中添加自定义字段?
How to add a custom field in life ray existing user table?
我有一个要求,网站所有者有权创建用户,并且能够查看仅由他创建的用户列表。
为了达到同样的目的,我创建了一个 portlet,它具有包含基本用户详细信息的表单。在我的操作 class 中提交表单时,我通过调用以下方法在 USER_ table 中插入用户详细信息:
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();
现在用户正在 USER_table 中创建。但是在显示用户列表时,我只需要显示由该站点所有者创建的用户。
所以我想再插入一列,例如 siteId
以及用户 table 并且在基于 siteId
获取时我想优化列表并显示在 UI.
所以我已经了解了 Expando 的概念,但我没有正确地了解如何根据我的要求使用它。
所以任何人都请建议我如何在调用 addUser
方法时插入 'siteId' 并根据此 siteID
获取用户列表。
提前致谢。
物理上添加列的唯一(强烈不推荐)方法是通过 EXT 环境修改 Liferay 核心。
排除这个,实现你需要的第一个选项是不要使用liferay "site",但是Liferay "portal instances"...有点像有不同的Liferay安装:它们都将共享相同的软件基础设施,但它们在逻辑上是不同的 Liferay 安装。
See here 获取更多信息。
如果这种方式不适用,第二种是使用Expando bridge。
通过使用它,您可以将 "virtual" 字段添加到 "User_" table 中,其中包含相关的 groupId。
您可以使用 serviceutil 的通用 get() 方法访问 expando 值。
您有两种不同的方式来访问 Expando 值。
第一个是执行 user.getExpandoBridge().get...但它需要一个用户对象...因此您应该在返回列表之前迭代任何用户。
后者是直接使用ExpandoTableLocalService、ExpandoColumnLocalService和ExpandoValueLocalService直接获取所有包含你的groupId值的expando行...
...
...但是在这一点上,为什么不直接使用自定义映射table?
您只需创建一个包含 userId 和 groupId 对的 table...获取所有按 groupId 过滤的 userId,然后对 User_ table 执行 DynamicQuery。这不是数据库的最佳形式,但您可以实现您的目标。
您只需向您的 portlet 添加一个服务层:read here 以了解 Liferay 最强大的功能之一。
这是达到您的要求的一种简洁方式...但请记住,网站不是为此目的而构思的...并且整个 LR 许可系统将忽略您以这种方式强制执行的抽象。
我有一个要求,网站所有者有权创建用户,并且能够查看仅由他创建的用户列表。
为了达到同样的目的,我创建了一个 portlet,它具有包含基本用户详细信息的表单。在我的操作 class 中提交表单时,我通过调用以下方法在 USER_ table 中插入用户详细信息:
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();
现在用户正在 USER_table 中创建。但是在显示用户列表时,我只需要显示由该站点所有者创建的用户。
所以我想再插入一列,例如 siteId
以及用户 table 并且在基于 siteId
获取时我想优化列表并显示在 UI.
所以我已经了解了 Expando 的概念,但我没有正确地了解如何根据我的要求使用它。
所以任何人都请建议我如何在调用 addUser
方法时插入 'siteId' 并根据此 siteID
获取用户列表。
提前致谢。
物理上添加列的唯一(强烈不推荐)方法是通过 EXT 环境修改 Liferay 核心。
排除这个,实现你需要的第一个选项是不要使用liferay "site",但是Liferay "portal instances"...有点像有不同的Liferay安装:它们都将共享相同的软件基础设施,但它们在逻辑上是不同的 Liferay 安装。 See here 获取更多信息。
如果这种方式不适用,第二种是使用Expando bridge。 通过使用它,您可以将 "virtual" 字段添加到 "User_" table 中,其中包含相关的 groupId。
您可以使用 serviceutil 的通用 get() 方法访问 expando 值。 您有两种不同的方式来访问 Expando 值。
第一个是执行 user.getExpandoBridge().get...但它需要一个用户对象...因此您应该在返回列表之前迭代任何用户。
后者是直接使用ExpandoTableLocalService、ExpandoColumnLocalService和ExpandoValueLocalService直接获取所有包含你的groupId值的expando行...
...
...但是在这一点上,为什么不直接使用自定义映射table?
您只需创建一个包含 userId 和 groupId 对的 table...获取所有按 groupId 过滤的 userId,然后对 User_ table 执行 DynamicQuery。这不是数据库的最佳形式,但您可以实现您的目标。
您只需向您的 portlet 添加一个服务层:read here 以了解 Liferay 最强大的功能之一。
这是达到您的要求的一种简洁方式...但请记住,网站不是为此目的而构思的...并且整个 LR 许可系统将忽略您以这种方式强制执行的抽象。