1

「BuildSheet」というレコードタイプのClearQuestデータベースがあります。BuildSheetレコードでは、別のレコードタイプであるタスクを添付できます。

BuildEntitySessionメソッドを使用してタスクレコードタイプを作成EditEntityし、BuildSheetレコードでSessionメソッドを実行し、Entityメソッドを使用してタスクIDフィールドを追加できると思いましたAddFieldValue

残念ながら、Typeレコードを作成しようとして失敗しました。それは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]をクリックして、その方法でタスクレコードを作成できるので、どうやら私には権限があります。

作成する前に、どういうわけか「タスク」レコードを「ビルドシート」に関連付ける必要があるようですが、どうすればよいでしょうか。

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メソッドを実行し、AddFieldValueEntityメソッドを介してタスクIDフィールドを追加します。

BuildSheetレコードにタスクIDを設定するのではなく、新しいタスクの正しいリレーションフィールドをコミット前にBuildSheetIDに設定する必要があります。

これがお役に立てば幸いです。私は10年以上ClearQuestを使用する必要がなかったので、(あまりにも乏しい)ドキュメントに書かれていることだけを行っています。

于 2010-12-23T20:59:36.800 に答える