Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Liferay中搜索组织下的用户_Java_Search_Liferay - Fatal编程技术网

Java 在Liferay中搜索组织下的用户

Java 在Liferay中搜索组织下的用户,java,search,liferay,Java,Search,Liferay,我必须在liferay中搜索特定组织下的用户。目前,我们有一个可用的搜索 UserLocalService.search() 这是基于公司ID的。我想知道是否还有其他方法,甚至可以使用DynamicQueryFactoryUtil do fetch with organization filter。当然,您可以使用DynamicQuery来实现这一点 这可以分两个阶段完成 获取与给定组织关联的用户Id 将搜索条件与第一阶段接收到的id一起使用 代码如下所示 // Fetch userId

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

UserLocalService.search()


这是基于公司ID的。我想知道是否还有其他方法,甚至可以使用DynamicQueryFactoryUtil do fetch with organization filter。

当然,您可以使用
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);
    
    附言

    我还没有测试过这段代码。但这是解决问题的方法


    我希望它能帮助您。

    动态查询看起来不错,但我找到了另一种方法。我们可以使用Map传递组织id

    params.put("usersOrgs", orgId); 
    List<User> searchResult = liferayUserLocalService.search(companyId, keyword, WorkflowConstants.STATUS_APPROVED, params, 0, -1, "");
    
    params.put(“usersOrgs”,orgId);
    List searchResult=liferayUserLocalService.search(公司ID,关键字,WorkflowConstants.STATUS\u APPROVED,参数,0,-1,”);
    

    这将根据组织过滤用户。

    感谢您的回复。动态查询看起来不错,但我找到了另一种方法<代码>参数put(“usersOrgs”,orgId);List searchResult=liferayUserLocalService.search(公司ID,关键字,WorkflowConstants.STATUS\u APPROVED,参数,0,-1,obc)我也有同样的问题。如果我想基于多个组织进行筛选,该怎么办?我可以在param Map中传递Orgid数组吗?。你能告诉我“用户”文档的方向吗?