1

我有一个名为“BuildSheet”的记录类型的 ClearQuest 数据库。在 BuildSheet 记录上,您可以附加其他记录类型的任务。

我想我可以通过 Session 方法创建一个任务记录类型,然后在 BuildSheet 记录上BuildEntity执行一个Session 方法,并通过Entity 方法添加 Task Id 字段。EditEntityAddFieldValue

不幸的是,我创建类型记录的尝试失败了。它被以下eval语句绊倒:

#
# 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);
}

当我尝试创建TASK_RECORD_TYPE记录时,评估失败。我收到以下错误消息:

Error when attempting to create record type "Task"
Permission denied for user WeintraubH to perform action Create (of type SUBMIT)
at D:/Program Files/Rational/Common/lib/perl5/site_perl/5.8.6/CQPerlExt.pm line 43.
  at H:\svn\addTask.cqpl line 340
    main::createTask('TASK', 'cm', 'HEADLINE',
      'FMS-CWA_APP_B35_HF276', 'DESCRIPTION', 'FMS-CWA_APP_B35_HF276',
      'PRIORITY', 2, 'EFFORT', ...) called at H:\svn\addTask.cqpl line 236

现在,我可以调出一个 BuildSheet 记录,进入 Child Record 标签,单击 Create 并以这种方式构建我的任务记录,所以显然我确实有权限。

看起来我必须以某种方式将“任务”记录与“BuildSheet”相关联,然后再尝试创建它,但是如何?

4

2 回答 2

1

我找到了罪魁祸首。他们在BuildEntity方法上有一个钩子,以确保我尝试创建的任务记录连接到父记录。愚蠢的*#@#*$&@。

无论如何,我找到了钩子脚本(用 VB 编写)并找到了他们试图让我绊倒的地方:

Set oSession = GetSession   

pRequestIDValue = oSession.NameValue("ParentRequestID")
pTaskIDValue = oSession.NameValue("ParentTaskID")
pBuildSheetIDValue = oSession.NameValue("ParentBuildSheetID")
NewTaskPermittedValue = oSession.NameValue("NewTaskPermitted")     

curUser = oSession.GetUserLoginName

if (pBuildSheetIDValue <> "") or (pTaskIDValue <> "") _
    or ((pRequestIDValue <> "")  and (NewTaskPermittedValue = "Yes")) then  
    task_AccessControl = TRUE 
else 
    task_AccessControl = FALSE                    
end if

为了解决这个问题,我在尝试创建记录之前设置ParentBuildSheetID了该方法:SetNameValue

$cq->SetNameValue("ParentBuildSheetID", $buildsheetId);
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);
}

现在,这行得通!

于 2010-12-28T18:59:02.183 回答
0

不,我认为您不必在调用 BuildEntity 时将任务记录与 BuildSheet 相关联。

您能否调用 GetSubmitEntityDefNames 并验证“任务”是否在其结果中?

http://www.ibm.com/developerworks/forums/thread.jspa?threadID=179429有我看到的最接近你想要做的例子。如果是这样,一旦你解决了 BuildEntity 问题,而不是:

然后在 BuildSheet 记录上执行 EditEntity Session 方法,并通过 AddFieldValue Entity 方法添加 Task Id 字段。

您想在提交之前将新任务上的正确关系字段设置为 BuildSheet Id,而不是在 BuildSheet 记录上设置 Task Id。

我希望这有帮助; 十多年来我没有使用过 ClearQuest,所以我只是按照(太少的)文档所说的去做。

于 2010-12-23T20:59:36.800 回答