2015-01-29 2 views
1

나는 liferay에서 특정 조직의 사용자를 검색해야합니다. 현재 우리는 회사 ID를 기반으로Liferay의 조직에서 사용자 검색

UserLocalService.search()

사용할 검색이 있습니다. DynamicQueryFactoryUtil을 사용하여 조직 필터와 함께 가져 오는 다른 방법이 있는지 궁금합니다.

답변

3

동적 쿼리는 좋아 보이지만 다른 방법을 찾았습니다. 지도를 사용하여 조직 ID를 전달할 수 있습니다.

params.put("usersOrgs", orgId); 
List<User> searchResult = liferayUserLocalService.search(companyId, keyword, WorkflowConstants.STATUS_APPROVED, params, 0, -1, ""); 

조직을 기반으로 사용자를 필터링합니다.

+0

동일한 문제가있었습니다. 여러 조직을 기반으로 필터링하고 싶다면 어떻게해야합니까? param Map에 orgId 배열을 전달할 수 있습니까? 'usersOrgs'의 문서화 방향을 가르쳐 주시겠습니까? –

0

물론 이것을 달성하기 위해 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, 다음과 같이 보일 것이다. 그러나 이것이 이것을하는 방법입니다.

나는 그것이 당신을 돕길 바랍니다.

+0

답장을 보내 주셔서 감사합니다. 동적 쿼리는 좋아 보이지만 다른 방법을 찾았습니다. 'params.put ("usersOrgs", orgId); List searchResult = liferayUserLocalService.search (companyId, keyword, WorkflowConstants.STATUS_APPROVED, params, 0, -1, obc); – vamsi

관련 문제