perl - ClearQuest Perl API - 值未设置,除非我打印它?

标签 perl clearquest

我有一个用 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.

我跟踪了此错误消息(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);

同样,除非我打印出变量 $buildsheetId,否则 GetEntity 会失败。

为什么在执行 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 行长,因此子例程错误不是来 self 的程序。但是,这两行 DEBUG: 是。一个是在创建 BuildEntity 方法之前,另一个是在 GetEntity 方法之前。我必须追踪这些 Subroutine redefine 行的来源。我认为它们是某种正在运行的 VB CQ 钩子(Hook)。

最佳答案

看看这样做是否有帮助(删除调试打印):

$cq->SetNameValue("ParentBuildSheetID", $buildsheetId . "");

$cq->SetNameValue("ParentBuildSheetID", "$buildsheetId");

如果它有效,你的问题是,你的 API 会以某种方式检查一个值是 int 还是 string(我假设 ClearQuest 内部结构是 C 语言,而不是纯 Perl 语言,所以在你的值已创建 - 请参阅 http://www.sdsc.edu/~moreland/courses/IntroPerl/docs/manual/pod/perlguts.html#Working_with_SVs )。

通过引用变量或附加空字符串,您可以将其转换为预期的字符串。

关于perl - ClearQuest Perl API - 值未设置,除非我打印它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4548751/

相关文章:

perl - 在Dancer应用程序下运行AnyEvent

api - 我可以远程使用 Rational Clearquest API(没有本地客户端位)

tfs - 有没有人能够使用 TFS Team Web Access 并将其成功公开给客户?

sql - 在 ClearQuest 中,如何在 SQL 编辑器中生成查询以提示用户输入值?

windows - ActivePerl。 .pl 文件不再执行,而是在记事本中打开

mysql - 如何确定 Perl 中的 Mysql 连接 ID?

perl - 为什么我的 Perl 系统调用失败并出现点?

clearquest - 在 ClearQuest 中有没有办法查询包含在文档中的列表?

clearquest - 将 ClearQuest 用于库存管理应用程序

perl - 为什么我会在 Perl 中返回散列或散列引用?