A ciascun nuovo record viene assegnata una stringa ID visibile composta dal nome del database logico e un numero sequenziale univoco. Ad esempio, il decimo record nel database BUGID può disporre dell'ID visibile BUGID00000010. Se non si conosce l'ID del record, è possibile utilizzare il metodo BuildQuery dell'oggetto Session per creare una query e ricercare i record che corrispondono a una serie di criteri desiderati.
Per richiedere un record utilizzando il relativo ID database invece del relativo ID visibile, utilizzare il metodo GetEntityByDbId. Un DBID (Database Identifier/identificativo database) Rational ClearQuest è un numero intero utilizzato per identificare in modo univoco un oggetto in un database Rational ClearQuest. I DBID sono univoci per una classe di record, univoci all'interno dei record stateful ed univoci all'interno dei record stateless.
$session->GetEntity(entity_def_name, display_name);
# Creare l'oggetto Session... $sessionObj->UserLogon("admin","","SAMPL",""); #Chiamare il record DEF00013323 $record1 = $sessionObj->GetEntity( "defect", "DEF00013323" );
$record1 = $sessionobj->GetEntity("defect", "DEF00013323"); die "Error getting Defect DEF00013323" unless $record1;
Per visualizzare il contenuto di un record, effettuare quanto segue:
Gli oggetti entità trovati utilizzando queste tecniche sono di sola lettura. (Per modificare un oggetto Entity, è necessario richiamare il metodo EditEntity dell'oggetto Session, come descritto nella successiva lezione di questa esercitazione.)
Una delle più comuni chiamate API viene effettuata verso l'oggetto FieldInfo. Ad esempio, l'oggetto FieldInfo dispone del metodo GetValue che consente di acquisire il valore di un campo in un record. La seguente routine secondaria dell'applicazione esterna stampa le informazioni memorizzate in un oggetto 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);
use strict; use CQPerlExt; my $sessionObj = CQSession::Build(); $sessionObj->UserLogon("admin","","SAMPL",""); my $entityDefNames = $sessionObj->GetEntityDefNames(); # Spostarsi sui tipi di record foreach my $edef_name (@$entityDefNames) { my $entityDefObj = $sessionObj->GetEntityDef($edef_name); print_edef($entityDefObj); } sub print_edef { my($edef)=@_; # Il parametro è un oggetto EntityDef. 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) { # tipo record con stato print "\nEntityDef is a REQ entity def"; print "\nStateDefs:"; $names = $edef->GetStateDefNames; foreach $name (@$names) { print " " , $name; } } else { # tipo record stateless print "\nEntityDef is an AUX entity def"; } print "\n\n"; } CQSession::Unbuild($sessionObj);