Extracting data about a field in a record
One of the most common API calls is to the FieldInfo Object. For example, the FieldInfo object has the GetValue method that enables you to get the value of a field in a record.
The following external application subroutine prints out the information stored in a FieldInfo object. The code invokes an external routine that is not shown here: StdOut, which prints its arguments to a message box.
VBScript
Sub DumpFieldInfo(info) ' The parameter is a FieldInfo object.
Dim temp ' a Long
Dim status ' a String
Dim validity ' a String
Dim valuechange ' a String
Dim validchange ' a String
Dim value ' a String
temp = info.GetValueStatus()
If temp = AD_VALUE_NOT_AVAILABLE Then
status = "VALUE_NOT_AVAILABLE"
ElseIf temp = AD_HAS_VALUE Then
status = "HAS_VALUE value ='" & info.GetValue() & "'"
ElseIf temp = AD_HAS_NO_VALUE Then
status = "NO_VALUE"
Else
status = "<invalid value status: " & temp & ">"
End If
temp = info.GetValidationStatus()
If temp = AD_KNOWN_INVALID Then
validity = "INVALID"
ElseIf temp = AD_KNOWN_VALID Then
validity = "VALID"
ElseIf temp = AD_NEEDS_VALIDATION Then
validity = "NEEDS_VALIDATION"
Else
validity = "<invalid validation status: " & temp & ">"
End If
valuechange = ""
If info.ValueChangedThisSetValue() Then
valuechange = valuechange & " setval=Y"
Else
valuechange = valuechange & " setval=N"
End If
If info.ValueChangedThisGroup() Then
valuechange = valuechange & " group=Y"
Else
valuechange = valuechange & " group=N"
End If
If info.ValueChangedThisAction() Then
valuechange = valuechange & " action=Y"
Else
valuechange = valuechange & " action=N"
End If
validchange = ""
If info.ValidityChangedThisSetValue() Then
validchange = validchange & " setval=Y"
Else
validchange = validchange & " setval=N"
End If
If info.ValidityChangedThisGroup() Then
validchange = validchange & " group=Y"
Else
validchange = validchange & " group=N"
End If
If info.ValidityChangedThisAction() Then
validchange = validchange & " action=Y"
Else
validchange = validchange & " action=N"
End If
StdOut "FieldInfo for field " & info.GetName()
StdOut " field's value = " & value
StdOut " value status = " & status
StdOut " value change =" & valuechange
StdOut " validity = " & validity
StdOut " validity change =" & validchange
StdOut " error = '" & info.GetMessageText() & "'"
End Sub
REM Start of Global Script StdOut
sub StdOut(Msg)
msgbox Msg
end sub
REM End of Global Script StdOut
Perl
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);