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.
$session->EditEntity(Entität, Name_der_Bearbeitungsaktion);
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.
# 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.
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.
$entity->SetFieldValue(Feldname, neuer_Wert);
Gehen Sie wie folgt vor, um einen vorhandenen Datensatz zu bearbeiten:
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);