< 前へ | 次へ >

レコードの修正

レコードの内容を修正するには、まず GetEntity メソッドを呼び出して 対象のレコードを取り出してから、Session オブジェクトの EditEntity メソッドを 呼び出します。

EditEntity メソッドは、指定されたアクションをレコードに対して実行し、 レコードを編集可能にします。エンティティ パラメータに指定する Entity オブジェクトは、GetEntityByDbId または GetEntity を呼び出すかまたはクエリーを実行して、事前に取得されている必要があります。

EditEntity の構文は次のとおりです。
$session->EditEntity(entity, edit_action_name); 
  • session - 現在のデータベース アクセス セッションを表す Session オブジェクト。
  • entity - 編集するレコードに対応する Entity オブジェクト。
  • edit_action_name - 編集 (変更または解決など) を開始するアクションの名前を含む String。

    edit_action_name パラメータのリーガル値のリストを取得するには、該当する EntityDef オブジェクトの GetActionDefNames メソッドを呼び出します。

以下に例を示します。
# Build Session object...

# Edit the record whose ID is "BUGDB00000010" using the "modify" action 
$objtoedit = $sessionobj->GetEntity("defect", "BUGDB00000010"); 
$sessionobj->EditEntity($objtoedit,"modify"); 

EditEntity メソッドを呼び出すと、Entity オブジェクトのメソッドを呼び出して、対応するレコードのフィールドを変更できます。また、フィールド内の データのタイプや全体としてのレコードについての追加情報の取得や、 現行アクションの期間中のフィールド動作の変更も可能です。

以下に、レコードおよびフィールド値の 編集に使用できるいくつかのメソッドを示します。
  • フィールド値の修正: SetFieldValue、AddFieldValue、DeleteFieldValue
  • 添付の追加/削除: AddAttachmentFieldValue、DeleteAttachmentFieldValue
  • フィールド グループの状態を取得: GetInvalidFieldValues、GetFieldsUpdatedThisSetValue/Group/Action
  • 個別のフィールドの状態をフィールドの FieldInfo から取得: GetValidationStatus、 GetMessageText

SetFieldValue メソッドは、指定されたフィールドに指定値を 設定します。フィールドが変更可能な場合、新規の値が有効であるかどうかに関係なく、このメソッドによって新規の値が設定され、空の文字列が戻されます。

フィールドに有効な値が入っているかどうかを判別するには、そのフィールドの FieldInfo オブジェクトを取り出し、FieldInfo オブジェクトの ValidityChangedThisSetValue メソッドを呼び出して、フィールドを検証します。フィールドを変更できない場合、戻された文字列に、フィールドを変更できない理由が示されています。通常の値は、「no such field」、「record is not being edited」、「field is read-only」です。フィールドが 1 つでなく複数の値を持つことができる場合は、AddFieldValue メソッドを使用してそれぞれの新規の値を追加します。SetFieldValue を使用することも正しい方法です。しかし、すでに値のリストが含まれているフィールドに SetFieldValue を使用すると、リスト全体が新規の単一値で置換されます。このメソッドは、Entity オブジェクトが編集可能な場合にのみ呼び出すことができます。

SetFieldValue の構文は次のとおりです。
$entity->SetFieldValue(field_name, new_value); 
  • entity - Entity オブジェクトは、ユーザー データベース レコードを表します。
  • field_name - この Entity オブジェクトの有効なフィールド名を含む String。
  • new_value - 新規の値を含む String。
フィールドへの変更が許可されている場合、このメソッドは空の文字列を戻します。それ以外の場合、このメソッドは、エラーの説明を含む文字列を戻します。

既存のレコードを編集するには、次の手順に従います。

  1. Session オブジェクトのメソッドを使用して、編集したい Entity オブジェクトを取得します。 Session オブジェクトのメソッドは、定義した条件に一致するレコードをクエリーで検索し、次にそのクエリーの結果セットに表示されたレコードの操作を行う場合に使用できます。
  2. 既存の Entity オブジェクトを編集可能にするには、Session オブジェクトの EditEntity メソッドを呼び出します。
  3. Entity オブジェクトのメソッドを使用して、レコード内のデータを修正します。
  4. レコードの編集を完了した場合、データベースへの変更内容を Entity オブジェクトの Validate メソッドを呼び出して検証し、Commit メソッドを呼び出してコミットします。

以下の例では、Rational ClearQuest ユーザー データベース内の すべての障害レコードがリストされ、それらのレコードの 1 つが修正されています。 プログラムは次のとおりです。
  • SAMPL データベースのすべての障害レコードをリストし、表示フィールドとして、id、Headline、State を選択します。
  • 障害レコード SAMPL00000012 の Description フィールドを「This defect has been modified」に変更します。
use CQPerlExt; 
#Getting the session 
my $session = CQSession::Build(); 
CQSession::UserLogon ($session, "admin", "", "SAMPL", "Lab3"); 

my $querydef = $session->BuildQuery ("defect"); 
$querydef->BuildField ("id"); 
$querydef->BuildField ("headline"); 
my $resultset = $session->BuildResultSet ($querydef); 
$resultset->Execute(); 
while (($resultset->MoveNext()) == 1) { 
   $id = $resultset->GetColumnValue(1); 
   $rec = $session->GetEntity("Defect", $id); 
   $head = $rec->GetFieldValue("Headline")->GetValue(); 
   $state= $rec->GetFieldValue("State")->GetValue(); 
   print "$id, $head, $state. ¥n";
      if ($id eq "SAMPL00000012") { 
         $session->EditEntity($rec, "Modify"); 
         $rec->SetFieldValue("description", "This defect has been modified."); 
         $status = $rec->Validate();
         if ( $status ){
            $rec->Revert;
            die "Validation Error: $status \n"
          } else {
               # Only commit the changes if the validation is first successful. 
               $rec->Commit(); 
             }
      }
 } 
CQSession::Unbuild($session); 

フィードバック
< 前へ | 次へ >