La méthode EditEntity réalise l'action spécifiée sur un enregistrement et rend l'enregistrement disponible pour l'édition. L'objet Entity que vous avez spécifié dans le paramètre entité doit déjà être obtenu grâce à l'appel de GetEntityByDbId ou de GetEntity, ou à l'exécution d'une requête.
$session->EditEntity(entité, édition_nom_action);
Pour obtenir la liste des valeurs admises pour le paramètre édition_nom_action, appelez la méthode GetActionDefNames de l'objet EntityDef approprié.
# Build Session object... # Edit the record whose ID is "BUGDB00000010" using the "modify" action $objtoedit = $sessionobj->GetEntity("defect", "BUGDB00000010"); $sessionobj->EditEntity($objtoedit,"modify");
Après avoir appelé la méthode EditEntity, vous pouvez appeler les méthodes de l'objet Entity pour modifier les zones de l'enregistrement correspondant. Vous pouvez également obtenir des informations supplémentaires sur le type de données présentes dans les zones ou sur l'ensemble de l'enregistrement, ou modifier le comportement d'une zone pendant la durée de l'action en cours.
La méthode SetFieldValue place la valeur spécifiée dans la zone indiquée. Si la zone peut être modifiée, cette méthode définit sa nouvelle valeur, valide ou non, et renvoie la chaîne vide.
Pour déterminer si une zone contient une valeur valide, récupérez l'objet FieldInfo pour cette zone et appelez la méthode ValidityChangedThisSetValue de l'objet FieldInfo pour valider la zone. Si la zone ne peut être modifiée, la chaîne renvoyée en indique la raison. Les valeurs type incluent "no such field", "record is not being edited" et "field is read-only". Si la zone peut avoir plusieurs valeurs, utilisez la méthode AddFieldValue pour ajouter chaque nouvelle valeur. Vous pouvez toujours utiliser SetFieldValue ; toutefois, si vous utilisez cette méthode dans une zone qui contient déjà une liste de valeurs, toute la liste est remplacée par la nouvelle valeur. Vous pouvez uniquement appeler cette méthode si l'objet Entity est éditable.
$entity->SetFieldValue(nom_zone, nouvelle_valeur);
Pour éditer un enregistrement existant, procédez comme suit :
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);