每条新记录会分配到一个可视标识字符串,该字符串由逻辑数据库名称和唯一序号组成。例如,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);