I have a ClearQuest database with a record type called "BuildSheet". On a BuildSheet record, you can attach tasks which are another record type.
I thought I could create a task record type, via the BuildEntity
Session method, then do a EditEntity
Session method on the BuildSheet record, and add the Task Id field via the AddFieldValue
Entity method.
Unfortunately, my attempt to create the Type record fails. It gets tripped by the eval
statement:
#
# 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);
}
The eval is failing when I attempt to create the TASK_RECORD_TYPE
record. I get the following error message:
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
Now, I can bring up a BuildSheet record, go into the Child Record tag, click Create and build my task record that way, so apparently I do have permission.
What it seems is that I must somehow associate the "Task" record with a "BuildSheet" before I try to create it, but how?
I found the culprit. They have a hook on the BuildEntity
method in order to ensure that the Task record I'm trying to create is connected to a parent record. Stupid *#@#*$&@.
Anyway I found the hook script (written in VB) and found where they were trying to trip me up:
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
To get around this, I set ParentBuildSheetID
with the SetNameValue
method before I attempted to create the record:
$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);
}
Now, that worked!