マルチレコード更新編集操作の制御

ClearQuest® 管理者またはスキーマ デザイナとして、マルチレコード更新状況情報を使用してマルチレコード更新制御を実装するフック コードを作成することができます。

例えば、スキーマによって、変更できるレコードもしくはレコード タイプ、変更できるフィールド、またはマルチレコード更新操作を実行できるユーザーが制限されていたり、エラー件数が制限に達すると変更できないようになっていたりする場合があります。 また、レコード タイプ、関連する Project レコード、現在のユーザー、またはグループ メンバーシップに基づく制限がある可能性があります。

マルチレコード更新状況情報は、ratl_MultiModifyBatchStatus セッション変数でスキーマに提供されます。ratl_MultiModifyBatchStatus セッション変数の値は、以下に示されている順序で以下の数値によって構成されます。各値は数値で、改行で区切られます。
  • テンプレート レコードを含む、レコードの総数
  • 現行レコードの序数。1 からレコードの総数まで。テンプレート レコードの序数値は 1 です。
  • 失敗した更新の数
レコードの序数は、マルチレコード更新テンプレート レコードがいつ編集されているかを判別するために使用できます。 2 以上の序数値は、再生が行われており、その序数値に対応するレコードがマルチレコード更新によって現在処理中であることを示します。 例えば、マルチレコード更新を 13 のレコードに行うとします。テンプレート レコードが編集中である場合、ratl_MultiModifyBatchStatus セッション変数の値は「13 1 0」(スペースには改行を使用) になります。マルチレコード更新が失敗せずに 5 番目のレコードを再生中である場合、ratl_MultiModifyBatchStatus の値は「13 5 0」になります。マルチレコード更新が、前の 2 つのレコードで失敗した後 9 番目のレコードをプレイバック中である場合、ratl_MultiModifyBatchStatus の値は「13 9 2」になります。

ratl_MultiModifyBatchStatus セッション変数および ratl_MultiModifyBatchMode セッション変数は、マルチレコード更新が、フックを起動するレコードの操作を行うときに設定されます。このような操作の例としては、すべてのアクション フェーズ、レコード スクリプト別名アクション、フィールド変更、選択リストのフック、レコードの編集処理のために実行される可能性があるフック、あるいはマルチレコード更新に組み込まれていないフックなどがあります。

以下の例は、現行レコードが、マルチレコード更新が行われているレコードであるかをチェックする方法を示しています。 この例は、アクション アクセス制御フックで使用されることを想定しています。 アクション制御フックは、マルチレコード更新が進行中であるかどうかをチェックした後、失敗カウントをチェックします。 10 以上の失敗がある場合、フックは Perl die () ステートメントを使用してエラーを起こします。マルチレコード更新は、引き続きマルチレコード更新結果セット内のすべてのレコードを処理します。このフック例では、引き続き、後続の各レコードを失敗としてマークします。

$result = 1;
# If doing multirecord update, check if it has too many errors.
   #
   my $mru_id = $session->GetNameValue("ratl_MultiModifyBatchMode");
   if ($mru_id ne "") {
      my $me = $entity->GetDisplayName();
      if ($mru_id eq $me) {
         # Yes, currently doing Multi-Record Update on the current record.

         my $status = $session->GetNameValue("ratl_MultiModifyBatchStatus");
         my ($count, $ordinal, $failures, $ignore) = split('変更依頼n', $status, 4);

         if ($failures > 10) {
            die("This multirecord update has encountered too many errors ($failures). No more updates are allowed.")
         }
      }
   }

フィードバック