我有一个名为“BuildSheet”的记录类型的ClearQuest数据库。在BuildSheet记录中,您可以附加另一种记录类型的任务。
我以为我可以通过BuildEntity
会话方法创建任务记录类型,然后在BuildSheet记录上执行EditEntity
会话方法,并通过{{1}添加任务ID字段实体方法。
不幸的是,我尝试创建Type记录失败了。它会被AddFieldValue
语句绊倒:
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);
}
记录时,eval失败。我收到以下错误消息:
TASK_RECORD_TYPE
现在,我可以打开一个BuildSheet记录,进入Child Record标签,单击Create并以这种方式构建我的任务记录,所以显然我有权限。
在我尝试创建它之前,我必须以某种方式将“任务”记录与“BuildSheet”相关联,但是如何?
答案 0 :(得分: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);
}
现在,这很有效!
答案 1 :(得分:0)
不,我认为您在调用BuildEntity时不必将Task记录与BuildSheet相关联。
您是否可以调用GetSubmitEntityDefNames并验证其结果中是否包含“任务”?
http://www.ibm.com/developerworks/forums/thread.jspa?threadID=179429是我看到的最接近的例子。如果是这样,一旦你超越了BuildEntity问题,而不是:
然后在BuildSheet记录上执行EditEntity Session方法,并通过AddFieldValue Entity方法添加Task Id字段。
您希望在提交之前将新任务上的正确关系字段设置为BuildSheet Id,而不是在BuildSheet记录上设置任务ID。
我希望这会有所帮助;十多年来我一直没有使用过ClearQuest,所以我只是按照文件所说的那样去做。