Question

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?

Was it helpful?

Solution

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!

OTHER TIPS

No, I don't think you have to associate the Task record with the BuildSheet as you call BuildEntity.

Can you call GetSubmitEntityDefNames and verify that "Task" is in its results?

http://www.ibm.com/developerworks/forums/thread.jspa?threadID=179429 has the closest example I see to what you are trying to do. If so, once you get past the BuildEntity problem, rather than:

then do a EditEntity Session method on the BuildSheet record, and add the Task Id field via the AddFieldValue Entity method.

you want to set the correct relation field on your new Task to the BuildSheet Id before Commit rather than set the Task Id on the BuildSheet record.

I hope this helps; I haven't had to use ClearQuest in more than a decade, so I'm just going by what the (way too scant) documentation says.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top