< 이전 | 다음 >

검색 기준 정의

사용자 데이터베이스에 있는 각 레코드의 필드와의 비교를 기반으로 하는 조회 필터를 사용하여 조회 검색 기준을 정의합니다. 조회는 ResultSet 오브젝트의 검색 기준과 일치하는 데이터베이스의 각 레코드를 리턴합니다.

각 비교는 QueryFilterNode 오브젝트의 인스턴스인 필터로 구현됩니다. 필터를 사용하여 필드를 단일 값 또는 값 범위와 비교할 수 있습니다. 필터에 대해 선택하는 연산자는 수행할 비교 유형을 결정합니다. 올바른 연산자 목록은 CompOp 상수 열거형 유형을 참조하십시오. 필터 계층 구조 트리를 작성하려면 부울 연산자를 사용하여 필터를 함께 결합하고 기타 필터 내에 일부 필터를 중첩시키십시오. 각 필터는 단일 조건 또는 AND 또는 OR 연산자를 사용하여 함께 결합된 조건 그룹으로 구성됩니다. 필터를 빌드할 때 하나 이상의 복합 필터 그룹을 중첩시켜 검색 논리 복합 세트를 작성할 수 있습니다.

조회를 디자인하는 경우, 다음은 조회에 대해 작업하기 위해 공통적으로 사용되는 일부 오브젝트 및 해당 메소드입니다.
  • QueryDef 오브젝트:
    • BuildQuery(레코드 유형) - 제공된 레코드 유형에 대한 새 조회인 경우.
    • BuildField(표시할 필드를 지정하기 위해).
    • BuildFilterOperator 메소드에는 열거형 상수 - BoolOpConstant(And/Or)가 필요합니다.
  • Session 오브젝트:
    • BuildResultSet 메소드(조회에서 페치된 데이터의 플레이스홀더).
  • ResultSet 오브젝트:
    • BuildResultSet 메소드(조회에서 페치된 데이터의 플레이스홀더).
    • 메소드 실행(조회 실행 및 결과 데이터 페치).
    • MoveNext 메소드(커서를 데이터 세트의 다음 레코드로 이동).
    • GetColumnLabel 메소드(필드 레이블 텍스트 획득) - 예: "Headline", "id", "State"
    • GetColumnValue 메소드(필드 특정 데이터 획득) - 예: "SAMPL00000014", "This is my headline", "Submitted"
  • QueryFilterNode 오브젝트:
    • BuildFilter(필터 매개변수)에는 CompOpConstant 열거형 상수(예: EQ, NEQ, GT, GTE, LT, LTE)인 비교 연산자(예: In, Equal, Less Than, Greater Than, Is Null)와 비교할 값(예: State EQ Submitted), 그리고 지정된 필드의 값과 비교할 값을 포함하는 Perl 문자열 배열이 필요합니다.
    • BuildFilterOperator 메소드에는 열거형 상수 - BoolOpConstant가 필요합니다.

조회를 디자인할 때 다음과 같이 위에 나열된 메소드를 사용할 수 있습니다.

  1. BuildQueryDef 메소드를 사용하여 QueryDef 오브젝트 빌드: $QueryDef = $Session->BuildQueryDef(entity-def-name)
  2. BuildField 메소드에서 선택될 필드 추가: $QueryDef->BuildField(field-name)
  3. 조회 필터를 And/Or 트리로 빌드. And/Or 노드는 QueryFilterNode 오브젝트입니다. BuildFilterOperator 메소드를 사용하여 트리의 맨 위 노드를 생성하십시오($QueryFilterNode = $QueryDef.BuildFilterOperator(bool)).
  4. 다음 메소드를 사용하여 QueryFilterNode 오브젝트의 하위로 And/Or 비교 노드 추가: QueryFilterNode = $QueryFilterNode->BuildFilter(field,CompOp,value) and $QueryFilterNode->BuildFilterOperator(bool) 예를 들어, priority = 1 및 (component = gui 또는 owner = joe)에 대해 필터하는 경우 다음과 같습니다.
    $and_node = $querydef->BuildFilterOperator(And); 
    $and_node->BuildFilter("priority",eq,1); 
    $or_node = $and_node->BuildFilterOperator(Or); 
    # The third argument of the BuildFilter method must be a reference to an array:
    # Here we first build the array @comp, then pass 
    # the reference \@comp into the BuildFilter method.
    @comp = ("gui");
    $or_node->BuildFilter("component", $CQPerlExt::CQ_COMP_OP_EQ, \@comp); 
    @name = ("Joe"); 
    $or_node->BuildFilter("owner", $CQPerlExt::CQ_COMP_OP_EQ, \@name);
    
    # Another way to pass the array reference for simple values is using anonymous arrays. For example:
    $or_node->BuildFilter("owner", $CQPerlExt::CQ_COMP_OP_EQ, ["Joe"]);

예제

이 예제는 이전 주제에 있는 예제에 일부 조회 필터를 포함시켜서 확장한 것입니다.

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); 
< 이전 | 다음 >

피드백