Perl で記述された ClearQuest API スクリプトがあります。私がこれを行う場合:
#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.
このエラー メッセージ ( MYスクリプトのどこでエラーが発生したかを言及していないための THX CQ) を次の行までたどりました。
$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
ますが、 variable を出力しないと失敗します$buildsheetId
。
ClearQuest API 呼び出しを実行する前に変数の Perl 値を出力することが問題になるのはなぜですか?
アップデート
私のスクリプトの出力全体は次のとおりです。
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 行しかないので、サブルーチン エラーは私のプログラムによるものではないことに注意してください。ただし、2DEBUG:
行はあります。1 つはメソッドを作成するBuildEntity
前で、もう 1 つはメソッドを作成する前GetEntity
です。Subroutine redefined
それらの線がどこから来ているのか追跡する必要があります。私は、それらがある種の VB CQ フックを実行していると考えています。