在 Liferay 中搜索组织下的用户
Search users under organization in Liferay
我必须在 liferay 中搜索特定组织下的用户。目前我们有
可用的搜索
UserLocalService.search()
这是基于 companyId 。我想知道即使使用 DynamicQueryFactoryUtil do fetch 和组织过滤器是否还有其他方法。
当然你可以使用DynamicQuery
来实现这个。
这可以分两个阶段完成,
- 获取与给定组织关联的用户 ID。
- 将搜索条件与第一阶段收到的
id
一起使用。
因此,代码将如下所示,
// Fetch userId List form Organization id
long[] organiztionIds = UserLocalServiceUtil.getOrganizationUserIds(orgId);
DynamicQuery searchQuery = DynamicQueryFactoryUtil.forClass(User.class, UserLocalServiceUtil.class.getClassLoader());
Criterion searchCriteria = PropertyFactoryUtil.forName("companyId").eq(companyid);
//Add Organization Id in Criterion
if (organiztionIds.length != 0) {
searchCriteria =
RestrictionsFactoryUtil.and(RestrictionsFactoryUtil.in("userId", ArrayUtils.toObject(organiztionIds)), searchCriteria);
}
if (!firstName.isEmpty()) {
searchCriteria = RestrictionsFactoryUtil.or(RestrictionsFactoryUtil.eq("firstName", firstName), searchCriteria);
}
if (!middleName.isEmpty()) {
searchCriteria = RestrictionsFactoryUtil.or(RestrictionsFactoryUtil.eq("middleName", middleName), searchCriteria);
}
if (!lastName.isEmpty()) {
searchCriteria = RestrictionsFactoryUtil.or(RestrictionsFactoryUtil.eq("lastName", lastName), searchCriteria);
}
if (!screenName.isEmpty()) {
searchCriteria = RestrictionsFactoryUtil.or(RestrictionsFactoryUtil.eq("screenName", screenName), searchCriteria);
}
searchQuery.add(searchCriteria);
UserLocalServiceUtil.dynamicQuery(searchQuery);
P.S
我还没有测试过这段代码。但这是做到这一点的方法。
希望对你有帮助。
动态查询看起来不错,但我找到了另一种方法。我们可以使用 Map 传递组织 ID。
params.put("usersOrgs", orgId);
List<User> searchResult = liferayUserLocalService.search(companyId, keyword, WorkflowConstants.STATUS_APPROVED, params, 0, -1, "");
这将根据组织过滤用户。
我必须在 liferay 中搜索特定组织下的用户。目前我们有
可用的搜索UserLocalService.search()
这是基于 companyId 。我想知道即使使用 DynamicQueryFactoryUtil do fetch 和组织过滤器是否还有其他方法。
当然你可以使用DynamicQuery
来实现这个。
这可以分两个阶段完成,
- 获取与给定组织关联的用户 ID。
- 将搜索条件与第一阶段收到的
id
一起使用。
因此,代码将如下所示,
// Fetch userId List form Organization id
long[] organiztionIds = UserLocalServiceUtil.getOrganizationUserIds(orgId);
DynamicQuery searchQuery = DynamicQueryFactoryUtil.forClass(User.class, UserLocalServiceUtil.class.getClassLoader());
Criterion searchCriteria = PropertyFactoryUtil.forName("companyId").eq(companyid);
//Add Organization Id in Criterion
if (organiztionIds.length != 0) {
searchCriteria =
RestrictionsFactoryUtil.and(RestrictionsFactoryUtil.in("userId", ArrayUtils.toObject(organiztionIds)), searchCriteria);
}
if (!firstName.isEmpty()) {
searchCriteria = RestrictionsFactoryUtil.or(RestrictionsFactoryUtil.eq("firstName", firstName), searchCriteria);
}
if (!middleName.isEmpty()) {
searchCriteria = RestrictionsFactoryUtil.or(RestrictionsFactoryUtil.eq("middleName", middleName), searchCriteria);
}
if (!lastName.isEmpty()) {
searchCriteria = RestrictionsFactoryUtil.or(RestrictionsFactoryUtil.eq("lastName", lastName), searchCriteria);
}
if (!screenName.isEmpty()) {
searchCriteria = RestrictionsFactoryUtil.or(RestrictionsFactoryUtil.eq("screenName", screenName), searchCriteria);
}
searchQuery.add(searchCriteria);
UserLocalServiceUtil.dynamicQuery(searchQuery);
P.S
我还没有测试过这段代码。但这是做到这一点的方法。
希望对你有帮助。
动态查询看起来不错,但我找到了另一种方法。我们可以使用 Map 传递组织 ID。
params.put("usersOrgs", orgId);
List<User> searchResult = liferayUserLocalService.search(companyId, keyword, WorkflowConstants.STATUS_APPROVED, params, 0, -1, "");
这将根据组织过滤用户。