ClearQuest Perl API - добавление дочерней записи в другую запись - PullRequest
1 голос
/ 23 декабря 2010

У меня есть база данных ClearQuest с типом записи «BuildSheet».К записи BuildSheet вы можете прикрепить задачи, относящиеся к записи другого типа.

Я подумал, что могу создать тип записи задачи с помощью метода BuildEntity Session, а затем выполнить метод EditEntity Session в BuildSheet.запись и добавьте поле Task Id с помощью метода AddFieldValue Entity.

К сожалению, моя попытка создать запись типа не удалась.Он отключается оператором 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.Я получаю следующее сообщение об ошибке:

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», прежде чем пытаться ее создать, но как?

Ответы [ 2 ]

1 голос
/ 28 декабря 2010

Я нашел виновника. У них есть хук на методе 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);
}

Теперь это сработало!

0 голосов
/ 23 декабря 2010

Нет, я не думаю, что вам нужно связывать запись Задачи с BuildSheet при вызове BuildEntity.

Можете ли вы вызвать GetSubmitEntityDefNames и убедиться, что «Задача» присутствует в ее результатах?

http://www.ibm.com/developerworks/forums/thread.jspa?threadID=179429 имеет самый близкий пример того, что вы пытаетесь сделать. Если так, то как только вы преодолеете проблему BuildEntity, а не:

затем выполните метод сеанса EditEntity для записи BuildSheet и добавьте поле Task Id через метод Entity AddFieldValue.

вы хотите установить правильное поле отношения в новой задаче для идентификатора BuildSheet перед фиксацией, а не устанавливать идентификатор задачи для записи BuildSheet.

Надеюсь, это поможет; Мне не приходилось использовать ClearQuest более десяти лет, поэтому я просто придерживаюсь того, что (слишком скудная) документация говорит.

...