< Vorherige Lektion | Nächste Lektion >

Datensatz ändern

Wenn Sie den Inhalt eines Datensatzes ändern möchten, rufen Sie den Datensatz zunächst mit der Methode GetEntity des Sitzungsobjekts ab. Rufen Sie anschließend die Methode EditEntity des Sitzungsobjekts auf.

Die Methode EditEntity führt die angegebene Aktion für einen Datensatz aus und macht den Datensatz für den Editiervorgang verfügbar. Das Entitätsobjekt, das Sie im Entitätsparameter angeben, muss zuvor durch Aufrufen von GetEntityByDbId bzw. GetEntity oder durch das Ausführen einer Abfrage abgerufen worden sein.

Die Syntax für EditEntity lautet wie folgt:
$session->EditEntity(Entität, Name_der_Bearbeitungsaktion); 
  • session - Das Sitzungsobjekt, das die aktuelle Sitzung für den Datenbankzugriff repräsentiert.
  • Entität - Das Entitätsobjekt, das dem zu bearbeitenden Datensatz entspricht.
  • Name_der_Bearbeitungsaktion - Eine Zeichenfolge, die den Namen der Aktion enthält, die zur Bearbeitung des Datensatz eingeleitet werden soll (z. B. Modify oder Resolve).

    Sie können die Liste der gültigen Werte für den Parameter "edit_action_name parameter" abrufen, indem Sie die Methode "GetActionDefNames" des entsprechenden EntityDef-Objekts aufrufen.

Beispiel:
# Sitzungsobjekt erstellen...

# Den Datensatz mit der ID "BUGDB00000010" mit der Aktion "Modify" bearbeiten
$objtoedit = $sessionobj->GetEntity("defect", "BUGDB00000010"); 
$sessionobj->EditEntity($objtoedit,"modify"); 

Nach dem Aufrufen der Methode EditEntity können Sie die Methoden des Entitätsobjekts aufrufen, um die Felder des entsprechenden Datensatzes zu ändern. Sie können auch zusätzliche Informationen zum Datentyp in den Feldern bzw. zum Datensatz insgesamt abrufen oder das Verhalten eines Felds für die Dauer der aktuellen Aktion ändern.

Es folgen ein paar Methoden, die Sie verwenden können, wenn Sie Datensätze und Feldwerte bearbeiten:
  • Feldwerte ändern: SetFieldValue, AddFieldValue, DeleteFieldValue
  • Anhänge hinzufügen bzw. löschen: AddAttachmentFieldValue, DeleteAttachmentFieldValue
  • Status von Feldgruppen abrufen: GetInvalidFieldValues, GetFieldsUpdatedThisSetValue/Group/Action
  • Status einzelner Felder über das entsprechende FieldInfo-Objekt abrufen: GetValidationStatus, GetMessageText

Die Methode SetFieldValue stellt den angegebenen Wert in das benannte Feld. Wenn das Feld geändert werden kann, setzt diese Methode den neuen Wert, unabhängig davon, ob dieser Wert gültig ist, und gibt die leere Zeichenfolge zurück.

Um festzustellen, ob ein Feld einen gültigen Wert enthält, müssen Sie das FieldInfo-Objekt für dieses Feld abrufen und die Methode ValidityChangedThisSetValue des FieldInfo-Objekts abrufen, um das Feld zu validieren. Wenn das Feld nicht geändert werden kann, gibt die zurückgegebene Zeichenfolge den Grund dafür an. Typische Werte sind "no such field" (Feld nicht vorhanden), "record is not being edited" (Datensatz wird nicht bearbeitet) und "field is read-only" (Feld ist schreibgeschützt). Wenn das Feld mehrere Werte anstelle eines Werts haben kann, verwenden Sie die Methode AddFieldValue, um jeden neuen Wert hinzuzufügen. Sie haben zwar immer noch die Möglichkeit, SetFieldValue zu verwenden, wenn Sie das aber für ein Feld tun, das bereits eine Liste von Werten enthält, wird die gesamte Liste durch den einzelnen neuen Wert ersetzt. Sie können diese Methode nur aufrufen, wenn das Entitätsobjekt editierbar ist.

Die Syntax für SetFieldValue lautet wie folgt:
$entity->SetFieldValue(Feldname, neuer_Wert); 
  • entity - Ein Entitätsobjekt, das den Datensatz einer Benutzerdatenbank darstellt.
  • Feldname - Eine Zeichenfolge, die einen gültigen Feldnamen dieses Entitätsobjekts enthält.
  • neuer_Wert - Eine Zeichenfolge, die den neuen Wert enthält.
Wenn die Änderungen am Feld zulässig sind, wird eine leere Zeichenfolge zurückgegeben. Schlägt die Operation fehl, wird eine Zeichenfolge mit einer Erläuterung des Fehlers zurückgegeben.

Gehen Sie wie folgt vor, um einen vorhandenen Datensatz zu bearbeiten:

  1. Rufen Sie das gewünschte Entitätsobjekt mit den Methoden des Sitzungsobjekts ab. Mit den Methoden des Sitzungsobjekts können Sie über eine Abfrage Datensätze suchen, die mit den definierten Kriterien übereinstimmen, und dann mit den in der Ergebnisliste der Abfrage enthaltenen Datensätzen arbeiten.
  2. Rufen Sie die Methode EditEntity des Sitzungsobjekts auf, um ein vorhandenes Entitätsobjekt editierbar zu machen.
  3. Verwenden Sie die Methoden des Entitätsobjekts, um Daten im Datensatz zu ändern.
  4. Wenn Sie mit dem Bearbeiten des Datensatzes fertig sind, validieren Sie ihn, und schreiben Sie Ihre Änderungen in der Datenbank fest. Verwenden Sie dazu die Methode Validate bzw. Commit des Entitätsobjekts.

Beispiel

Im folgenden Beispiel werden alle Fehlerdatensätze in Rational-ClearQuest-Benutzerdatenbank aufgelistet, und einer der Datensätze wird geändert. Das Programm führt folgende Aktionen aus:
  • Es listet alle Fehlerdatensätze in der Datenbank SAMPL auf und wählt "id" (ID), "Headline" (Titel) und "State" (Status) als Anzeigefelder aus.
  • Es ändert das Feld "Description" (Beschreibung) des Fehlerdatensatzes "SAMPL00000012" in "This defect has been modified."
use CQPerlExt; 
#Sitzung abrufen
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 {
               # Schreiben Sie die Änderungen nur fest, wenn die Validierung zuvor erfolgreich war.
               $rec->Commit(); 
             }
      }
 } 
CQSession::Unbuild($session); 
< Vorherige Lektion | Nächste Lektion >

Feedback