< Précédent | Suivant >

Modification d'un enregistrement

Pour modifier le contenu d'un enregistrement, récupérez d'abord l'enregistrement en appelant la méthode GetEntity, puis la méthode EditEntity de l'objet Session.

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.

La syntaxe pour EditEntity est :
$session->EditEntity(entité, édition_nom_action); 
  • session - Objet Session qui représente la session d'accès à la base de données en cours.
  • entité - Objet Entity correspondant à l'enregistrement à éditer.
  • édition_nom_action - Chaîne contenant le nom de l'action à réaliser pour démarrer l'édition (par exemple, modify ou resolve).

    Pour obtenir la liste des valeurs admises pour le paramètre édition_nom_action, appelez la méthode GetActionDefNames de l'objet EntityDef approprié.

For example:
# 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.

Voici une liste (non exhaustive) des méthodes que vous pouvez utiliser pour éditer des enregistrements et des valeurs de zones :
  • Modifier les valeurs de zones : SetFieldValue, AddFieldValue, DeleteFieldValue
  • Ajouter/Supprimer des pièces jointes : AddAttachmentFieldValue, DeleteAttachmentFieldValue
  • Obtenir l'état des groupes de zones : GetInvalidFieldValues, GetFieldsUpdatedThisSetValue/Group/Action
  • Obtenir l'état d'une zone individuelle à partir de son objet FieldInfo : GetValidationStatus, GetMessageText

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.

La syntaxe pour SetFieldValue est :
$entity->SetFieldValue(nom_zone, nouvelle_valeur); 
  • entity - Objet Entity représentant un enregistrement de base de données utilisateur.
  • nom_zone - Chaîne contenant le nom de zone valide de cet objet Entity.
  • nouvelle_valeur - Chaîne contenant la nouvelle valeur.
S'il est possible de modifier la zone, cette méthode renvoie une chaîne vide ; sinon, elle renvoie une chaîne contenant une explication de l'erreur.

Pour éditer un enregistrement existant, procédez comme suit :

  1. Recherchez l'objet Entity que vous souhaitez éditer à l'aide des méthodes de l'objet Session. Vous pouvez utiliser les méthodes de l'objet Session pour rechercher les enregistrements correspondant aux critères que vous avez définis, puis utiliser les enregistrements de l'ensemble de résultats de la requête.
  2. Pour rendre un objet Entity existant éditable, appelez la méthode EditEntity de l'objet Session.
  3. Utilisez les méthodes de l'objet Entity pour modifier les données de l'enregistrement.
  4. Lorsque vous avez terminé de modifier l'enregistrement, validez-le et validez vos modifications dans la base de données en appelant les méthodes Validate et Commit de l'objet Entity.

Exemple

L'exemple suivant répertorie tous les enregistrements défectueux d'une base de données utilisateur Rational ClearQuest et modifie l'un des enregistrements. Le programme :
  • Répertorie tous les enregistrements défectueux de la base de données SAMPL et sélectionne id, Headline et State comme zones d'affichage.
  • Modifie la zone Description de l'enregistrement défectueux SAMPL00000012 avec "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); 
< Précédent | Suivant >

Commentaire