2012-12-27 3 views
3

Tridion.ContentDelivery.DynamicContent.Query를 사용하고 있습니다. 내 코드, 구성 요소를 필터링하고 분류 키워드에 의해 그 중 일부를 제외하기 위해 노력하고있어 : 결과에 난 단지 TaxonomyKeywordCriteria 중 하나에 의해 필터링 된 목록을 가지고 그Tridion Query : 키워드 목록을 기반으로 구성 요소 필터링/제외

List<Criteria> excludeCriteria = new List<Criteria>(); 
foreach (string keywordUri in excludeKeywords) 
{ 
    excludeCriteria.Add(new TaxonomyKeywordCriteria(categoryUri, keywordUri, false));         
} 
Criteria criteria = new NotInCriteria(new AndCriteria(excludeCriteria.ToArray()))); 
Query query = new Query(criteria); 

문제입니다. excludeKeywords 목록의 첫 번째 기준이 적용되고 다른 모든 기준은 무시됩니다.

+0

안녕 @Vitaliy. TRACE 로깅을 켜고, 웹 애플리케이션을 다시 시작하고, 페이지를로드하고, BrokerQuery에 대해 JPQL 쿼리가 생성되었는지 확인할 수 있습니까? "TRACE JPAQueryDAO - 생성 된 브로커 쿼리 :"와 같은 항목을 볼 수 있어야합니다. 진행 상황을 더 자세히 보려면 ​​복사/붙여 넣기를하십시오. –

답변

2

필자는 확신 할 수 없지만이 기준을 추가하면 OR 목록을 어떻게 든 얻을 수 있습니다 (브로커의 디버그 로그를 확인할 수 있으며 쿼리가 실행되어야 함).

다른 방법으로 시도해보십시오. TaxonomyKeywordCriteria를 NotInCriteria에 랩핑하고 AndCriteria에 추가 할 수 있습니까? 이렇게 뭔가가 :

List<Criteria> excludeCriteria = new List<Criteria>(); 
foreach (string keywordUri in excludeKeywords) 
{ 
    excludeCriteria.Add(new NotInCriteria(new TaxonomyKeywordCriteria(categoryUri, keywordUri, false)));         
} 
Criteria criteria = new AndCriteria(excludeCriteria.ToArray())); 
Query query = new Query(criteria); 
+0

이 경우 excludeKeywords 목록의 마지막 기준 만 적용됩니다. – beardeddev

+0

그러면 실제로 @sea_gull이 제안 된대로 추적을 위해 가고 더 많은 정보를 제공하십시오. –