< 이전 | 다음 >

레코드 검색

레코드 컨텐츠를 보려면 Session 오브젝트의 GetEntity 메소드를 호출하여 레코드를 검색합니다.
GetEntity 메소드는 지정된 레코드를 리턴합니다. 상태 기반 레코드 유형을 요청할 경우 display_name 매개변수에는 레코드의 볼 수 있는 ID(예: DEF00013323)가 포함되어야 합니다. Stateless 레코드 유형의 경우, 이 매개변수에는 레코드의 고유 키 필드의 값이 포함되어야 합니다.

각각의 새 레코드에는 논리 데이터베이스 이름과 고유한 순차 번호로 구성된 볼 수 있는 ID 문자열이 지정됩니다. 예를 들어, BUGID 데이터베이스의 10번째 레코드는 볼 수 있는 ID BUGID00000010을 가질 수 있습니다. 레코드 ID를 모를 경우, Session 오브젝트의 BuildQuery 메소드를 사용하여 조회를 작성하고 원하는 기준 세트와 일치하는 레코드를 검색할 수 있습니다.

볼 수 있는 ID 대신 데이터베이스 ID를 사용하여 레코드를 요청하려면 GetEntityByDbId 메소드를 사용하십시오. Rational ClearQuest 데이터베이스 ID(DBID)는 Rational ClearQuest 데이터베이스 내에서 오브젝트를 고유하게 식별하는 데 사용되는 정수 값입니다. DBID는 레코드 클래스에 고유하며 Stateful 레코드 내에서 고유하고 Stateless 레코드 내에서도 고유합니다.

GetEntity의 구문은 다음과 같습니다.
$session->GetEntity(entity_def_name, display_name); 
  • session - 현재 database-access 세션을 나타내는 Session 오브젝트입니다.
  • entity_def_name - 레코드가 속하는 레코드 유형의 이름을 식별하는 문자열입니다.
  • display_name - 레코드의 표시 이름을 식별하는 문자열입니다. 표시 이름은 요청 엔티티에 대한 볼 수 있는 ID(123@SITE) 또는 보조 엔티티에 대한 고유 키 필드여야 합니다. 리턴값은 요청된 레코드에 해당하는 Entity 오브젝트를 리턴합니다.
예를 들어, 다음과 같습니다.
# Build Session object...
$sessionObj->UserLogon("admin","","SAMPL","");
#Get record DEF00013323
$record1 = $sessionObj->GetEntity( "defect", "DEF00013323" ); 
또한 Entity가 존재하거나 올바르게 리턴됨을 검증하기 위해 확인해야 합니다. GetEntity를 호출하기 전에 Session 오브젝트의 EntityExists 또는 EntityVisible 메소드를 사용하여 Entity가 존재하고 볼 수 있음을 검증할 수 있습니다. GetEntity 메소드의 리턴값을 테스트하여 추가 메소드를 호출하기 전에 Entity 오브젝트를 가지고 있는지 검증할 수도 있습니다. 다음과 같이 널(null)이 아닌 지에 대해 테스트할 수 있습니다.
$record1 = $sessionobj->GetEntity("defect", "DEF00013323");
die "Error getting Defect DEF00013323" unless $record1;

레코드의 컨텐츠를 보려면 다음 단계를 수행하십시오.

  1. GetEntity 메소드를 사용하여 레코드를 확보하십시오.
    Entity 오브젝트가 리턴되는지 검증하십시오.
  2. 리턴된 Entity 오브젝트의 메소드를 사용하여 레코드의 필드에 액세스하십시오.
    Entity 오브젝트를 확보하고 나면 해당 메소드를 호출하여 다음 태스크를 수행할 수 있습니다.
    • 필드의 값과 상태를 조사하십시오(GetFieldValue, GetValue).

      GetFieldValue(fieldname) 메소드는 FieldInfo 오브젝트를 리턴합니다. 이 오브젝트는 필드 값이 아니라 필드를 표시합니다. FieldInfo 오브젝트는 값과 값의 상태를 포함합니다. FieldInfo 오브젝트의 다음 메소드를 사용하여 실제 값(GetType, GetRequiredness, GetValueStatus, GetValue)을 가져올 수 있습니다.

    • 레코드 유효성 검증 및 확약: Validate, Commit
    • 사용자가 채워야 하는 필드 판별: GetFieldRequiredness
    • 각 필드에 허용 가능한 값 및 올바르지 않은 값을 가진 필드 판별: GetFieldType, GetInvalidFieldValues
    • 업데이트된 필드 판별: GetFieldsUpdatedThisAction, GetFieldsUpdatedThisGroup, GetFieldsUpdatedThisSetValue
    • 해당 레코드의 중복으로 간주되는 기타 데이터 레코드 찾기: GetDuplicates
    • 원래의 데이터 레코드 찾기(레코드가 중복일 경우): GetFieldOriginalValueEntities
    이름순으로 레코드 유형 목록을 가져오려면 Session 오브젝트의 다음 메소드를 사용하십시오.
    • 모든 레코드 유형: GetEntityDefNames
    • 상태를 가지고 있는 레코드 유형: GetReqEntityDefNames
    • Stateless 레코드 유형: GetAuxEntityDefNames
    • 레코드 유형 패밀리에 속하는 레코드 유형: GetQueryEntityDefNames 새 레코드를 작성하기 위해 사용할 수 있는 레코드 유형: GetSubmitEntityDefNames
    특정 레코드 유형과 연관된 EntityDef 오브젝트를 가져오려면 GetEntityDef 메소드를 사용하십시오.
    다음 메소드를 사용하여 레코드 세부사항을 가져올 수 있습니다.
    • 필드 특성 가져오기:

      Entity->GetFieldNames, Entity->GetFieldChoiceType(fieldName), Entity->GetFieldMaxLength(fieldName), Entity->GetFieldChoiceList(fieldName), Entity->GetFieldType(fieldName), Entity->GetFieldRequiredness(fieldName)

    • 특수 필드 가져오기: Entity->GetAttachmentFields, Entity->GetHistoryFields
    • 첨부 가져오기:

      AttachmentField->GetDisplayNameHeader, AttachmentField->GetAttachments, Attachment->GetDisplayName, Attachment->GetDescription, Attachment->GetFileSize Attachment->GetFileName, Attachment->Load(temp-file-name)

    • 히스토리 가져오기: HistoryField->GetDisplayNameHeader, HistoryField->GetHistories, History->GetValue
    • 레코드의 현재 상태에 적합한 조치 가져오기: Entity->GetLegalActionDefNames

이런 기법을 사용하여 찾은 Entity 오브젝트는 읽기 전용입니다. (Entity 오브젝트를 편집하려면 Session 오브젝트의 EditEntity 메소드를 호출해야 합니다. 이 학습서의 다음 단원에 설명되어 있습니다.)

예제

이 절에는 다음의 두 예제가 포함되어 있습니다.
  • 레코드에서 필드에 대한 데이터 검색
  • 레코드 유형에 대한 데이터 검색

가장 공통적인 API 호출 중 하나는 FieldInfo 오브젝트에 대한 호출입니다. 예를 들어, FieldInfo 오브젝트에는 레코드의 필드 값을 가져오는 데 사용할 수 있는 GetValue 메소드가 있습니다. 다음 외부 애플리케이션 서브루틴은 FieldInfo 오브젝트에 저장된 정보를 인쇄합니다.

use CQPerlExt;$CQsession = CQSession::Build();
$CQsession->UserLogon("admin", "", "perl", "");
$record = $CQsession->GetEntity("Defect", "perl00000001");
$fieldInfo = $record->GetFieldValue("id");        
$temp = $fieldInfo->GetValueStatus();
if ($temp == $CQPerlExt::CQ_VALUE_NOT_AVAILABLE) {
   $status = "VALUE_NOT_AVAILABLE";
} elsif ($temp == $CQPerlExt::CQ_HAS_VALUE) {
   $status = "HAS_VALUE";
   $value = "'" & fieldinfo.GetValue() & "'";
} elsif ($temp == $CQPerlExt::CQ_HAS_NO_VALUE) {
   $status = "NO_VALUE";
} else {   
   $status = "<invalid value status: "& temp & ">"; 
} 
   $temp = $fieldInfo->GetValidationStatus();
if ($temp == $CQPerlExt::CQ_KNOWN_INVALID) {
   $validity = "INVALID";
 } elsif ($temp == $CQPerlExt::CQ_KNOWN_VALID) {
   $validity = "VALID";
} elsif ($temp == $CQPerlExt::CQ_NEEDS_VALIDATION) {
   $validity = "NEEDS_VALIDATION";
} else { $validity = "<invalid validation status: " & temp & ">"; 
} 
$valuechange = "";
if ($fieldInfo->ValueChangedThisSetValue()) {   
   $valuechange = $valuechange & " setval=Y";
} else {   
   $valuechange = $valuechange & " setval=N";
} 
if ($fieldInfo->ValueChangedThisGroup()) {
   $valuechange = $valuechange & " group=Y";
} else {   
$valuechange = $valuechange & " group=N";
} 
if ($fieldInfo->ValueChangedThisAction()) {
 $valuechange = $valuechange & " action=Y";
} else {   
   $valuechange = $valuechange & " action=N";
} 
$validchange = "";
if ($fieldInfo->ValidityChangedThisSetValue()) {
   $validchange = $validchange & " setval=Y";
} else {   
   $validchange = $validchange & " setval=N";
} 
if ($fieldInfo->ValidityChangedThisGroup()) {
   $validchange = $validchange & " group=Y";
} else {   
   $validchange = $validchange & " group=N";
} 
if ($fieldInfo->ValidityChangedThisAction()) {
   $validchange = $validchange & " action=Y";
} else {   
   $validchange = $validchange & " action=N";
}
print "FieldInfo for field = ", $fieldInfo->GetName(), "\n";
print "Field's value       = ", $value, "\n";
print "Value status        = ", $status, "\n";
print "Value change        = ", $valuechange, "\n";
print "Validity            = ", $validity, "\n";
print "Validity change     = ", $validchange, "\n";
print "Error = ", $fieldInfo->GetMessageText(), "'"; 
CQSession::Unbuild($CQsession); 
메타데이터를 조작할 수 있음을 보여 주기 위해 다음 예제는 다음의 EntityDef 정보를 인쇄합니다.
  • EntityDef의 이름
  • 각 필드의 이름과 유형 및 포함된 조치
  • 포함된 각 상태의 이름
use strict;
use CQPerlExt;my $sessionObj = CQSession::Build();
$sessionObj->UserLogon("admin", "", "SAMPL", "");
my $entityDefNames = $sessionObj->GetEntityDefNames();

# Iterate over the record types 
foreach my $edef_name (@$entityDefNames) {
my $entityDefObj = $sessionObj->GetEntityDef($edef_name);
     print_edef($entityDefObj);
   }
 
sub print_edef {
   my($edef)=@_;
   #  The parameter is an EntityDef object.
   my($names, $name);
   print "Dumping EntityDef ", $edef->GetName; print "\nFieldDefs:"; 
   $names = $edef->GetFieldDefNames;
   foreach $name (@$names) {
      print " " , $name , " type=" , $edef->GetFieldDefType($name);
      } 
   print "\nActionDefs: ";
   $names = $edef->GetActionDefNames;
   foreach $name (@$names) {
      print " " , $name , " type=" , $edef->GetActionDefType($name);
      } 
   if ($edef->GetType == $CQPerlExt::CQ_REQ_ENTITY) {
      #  stated record type
      print "\nEntityDef is a REQ entity def";
      print "\nStateDefs:";
      $names = $edef->GetStateDefNames;
      foreach $name (@$names) {
         print " " , $name;
         } 
      }
else {
      #  stateless record type
      print "\nEntityDef is an AUX entity def";
      } 
   print "\n\n";
   } 
CQSession::Unbuild($sessionObj);
< 이전 | 다음 >

피드백