각 비교는 QueryFilterNode 오브젝트의 인스턴스인 필터로 구현됩니다. 필터를 사용하여 필드를 단일 값 또는 값 범위와 비교할 수 있습니다. 필터에 대해 선택하는 연산자는 수행할 비교 유형을 결정합니다. 올바른 연산자 목록은 CompOp 상수 열거형 유형을 참조하십시오. 필터 계층 구조 트리를 작성하려면 부울 연산자를 사용하여 필터를 함께 결합하고 기타 필터 내에 일부 필터를 중첩시키십시오. 각 필터는 단일 조건 또는 AND 또는 OR 연산자를 사용하여 함께 결합된 조건 그룹으로 구성됩니다. 필터를 빌드할 때 하나 이상의 복합 필터 그룹을 중첩시켜 검색 논리 복합 세트를 작성할 수 있습니다.
조회를 디자인할 때 다음과 같이 위에 나열된 메소드를 사용할 수 있습니다.
이 예제는 이전 주제에 있는 예제에 일부 조회 필터를 포함시켜서 확장한 것입니다.
use CQPerlExt;#Start a Rational ClearQuest session $SessionObj = CQSession::Build(); $dbsetname = "CQMS.SAMPL.HOME"; #Refresh list of accessible databases $databases = $SessionObj->GetAccessibleDatabases("MASTR", "", $dbsetname); #Log into a database $SessionObj->UserLogon("admin","","SAMPL",$dbsetname); #Create a Query $querydef = $SessionObj->BuildQuery("defect"); $querydef->BuildField("id"); $querydef->BuildField("headline"); $querydef->BuildField("owner.login_name"); $querydef->BuildField("submit_date"); #Create the queryfilternode object: # where (state is not Closed AND (id = 1 OR id = 2)) $where = $querydef->BuildFilterOperator($CQPerlExt::CQ_BOOL_OP_AND); # All filter values passed in as a reference to an array. @states = ("closed"); $where->BuildFilter("state", $CQPerlExt::CQ_COMP_OP_NEQ, \@states); # Another way to pass the array reference for simple values is using an anonymous array, like this: # $where->BuildFilter("state", $CQPerlExt::CQ_COMP_OP_EQ, ["closed"]); $subor = $where->BuildFilterOperator($CQPerlExt::CQ_BOOL_OP_OR); @id1 = ("SAMPL00000001"); $subor->BuildFilter("id", $CQPerlExt::CQ_COMP_OP_EQ, \@id1); @id2 = ("SAMPL00000002"); $subor->BuildFilter("id", $CQPerlExt::CQ_COMP_OP_EQ, \@id2); $resultset = $SessionObj->BuildResultSet($querydef); $ct = $resultset->ExecuteAndCountRecords(); for ($i = 0; $i < $ct; $i++) { $resultset->MoveNext(); print $resultset->GetColumnValue(1); print " "; print $resultset->GetColumnValue(2); print " "; print $resultset->GetColumnValue(3); print " "; print $resultset->GetColumnValue(4); print "\n"; } CQSession::Unbuild($SessionObj);