在 Liferay 中搜索组织下的用户

Search users under organization in Liferay

我必须在 liferay 中搜索特定组织下的用户。目前我们有

可用的搜索

UserLocalService.search()

这是基于 companyId 。我想知道即使使用 DynamicQueryFactoryUtil do fetch 和组织过滤器是否还有其他方法。

当然你可以使用DynamicQuery来实现这个。

这可以分两个阶段完成,

  1. 获取与给定组织关联的用户 ID。
  2. 将搜索条件与第一阶段收到的 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, "");

这将根据组织过滤用户。