У меня есть сценарий ClearQuest API, написанный на Perl.Если я делаю это:
#print qq(DEBUG: Buildsheet ID is "$buildsheetId"\n);
$cq->SetNameValue("ParentBuildSheetID", $buildsheetId);
#
# Now Create the Record Type and Fill in the Fields
#
my $record;
eval { $record = $cq->BuildEntity(TASK_RECORD_TYPE); };
if ($@) {
croak qq(Error when attempting to create record type ")
. TASK_RECORD_TYPE . qq("\n$@\n);
}
if (not $record) {
die qq(Cannot create entity ") . TASK_RECORD_TYPE . qq("\n);
}
Я получаю следующую ошибку:
ST(2) does not contain a string. at D:/Program Files/Rational/Common/lib/perl5/site_perl/5.8.6/CQPerlExt.pm line 43.
Я проследил это сообщение об ошибке (THX CQ за не упоминание, где в MY скриптгде произошла ошибка) в эту строку:
$cq->SetNameValue("ParentBuildSheetID", $buildsheetId);
Хммм ... Может быть, я не установил $buildsheetId
.Позвольте мне проверить, распечатав оператор DEBUG, предшествующий тому, где я его установил:
print qq(DEBUG: Buildsheet ID is "$buildsheetId"\n);
$cq->SetNameValue("ParentBuildSheetID", $buildsheetId);
#
# Now Create the Record Type and Fill in the Fields
#
my $record;
eval { $record = $cq->BuildEntity(TASK_RECORD_TYPE); };
if ($@) {
croak qq(Error when attempting to create record type ")
. TASK_RECORD_TYPE . qq("\n$@\n);
}
if (not $record) {
die qq(Cannot create entity ") . TASK_RECORD_TYPE . qq("\n);
}
( ПРИМЕЧАНИЕ : тот же код, что и выше, но с включенным предыдущим оператором отладки print
.)
Теперь это работает!
Почему это работает, просто распечатывая значение?Это не единственное место, где у меня возникает эта проблема:
print qq(DEBUG: \$buildsheetId = "$buildsheetId"\n);
my $record = $cq->GetEntity(BSHEET_RECORD_TYPE, $buildsheetId);
Опять же, GetEntity
завершается ошибкой, если я не распечатываю переменную $buildsheetId
.
Почему это важно, если явывести значение Perl переменной до того, как я выполню вызов ClearQuest API?
UPDATE
Вот весь вывод моего скрипта:
H:\>addTask.cqpl -user WeintraubH -pass Cape01may -buildsheet 5618 -task cm
DEBUG: Buildsheet ID is "5618"
Subroutine NoteEntryInit redefined at (eval 1) line 850.
Subroutine SetLog redefined at (eval 1) line 1084.
DEBUG: $buildsheetId = "5618"
Примечаниечто мой скрипт имеет длину всего 559 строк, поэтому ошибки подпрограммы не из моей программы.Тем не менее, две DEBUG:
строки.Один перед созданием метода BuildEntity
, а другой перед методом GetEntity
.Мне придется проследить, откуда исходят эти Subroutine redefined
строки.Я так понимаю, это какой-то хук VB CQ.