每条新记录会分配到一个可视标识字符串,该字符串由逻辑数据库名称和唯一序号组成。例如,BUGID 数据库中的第十条记录具有可视标识 BUGID00000010。如果您不知道记录的标识,那么可以使用 Session 对象的 BuildQuery 方法来创建查询,搜索符合一组期望的条件的记录。
要使用数据库标识而非可视标识来请求记录,请使用 GetEntityByDbId 方法。Rational ClearQuest 数据库标识(DBID)是用于唯一标识 Rational ClearQuest 数据库中对象的整数值。 DBID 对于一类记录、有状态记录以及无状态记录都是唯一的。
$session->GetEntity(entity_def_name, display_name);
# Build Session object...
$sessionObj->UserLogon("admin","","SAMPL","");
#Get record DEF00013323
$record1 = $sessionObj->GetEntity( "defect", "DEF00013323" );
$record1 = $sessionobj->GetEntity("defect", "DEF00013323");
die "Error getting Defect DEF00013323" unless $record1;
要查看记录的内容,请执行以下步骤:
使用以上技术找到的 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);
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);