< Indietro | Avanti >

Creazione di un nuovo record

Per creare un nuovo record, utilizzare il metodo BuildEntity dell'oggetto Session.

Il metodo BuildEntity crea un nuovo oggetto Entity con un ID univoco per un database utente specifico e avvia un'azione di inoltro per il record. Durante l'azione di inoltro, il record è disponibile per la modifica dei valori predefiniti nell'oggetto Entity.

Se un oggetto Entity è stato creato utilizzando BuildEntity e non ne è ancora stato eseguito il commit nel database, l'oggetto è disponibile per la modifica.

Il metodo BuildEntity crea un nuovo record del tipo specificato e inizia un'azione di inoltro, che consente all'utente di modificare il contenuto del record. (Non è necessario richiamare EditEntity per rendere il record modificabile.) È possibile assegnare i valori ai campi del nuovo record utilizzando il metodo SetFieldValue dell'oggetto Entity restituito. Una volta terminato l'aggiornamento del record, utilizzare i metodi Validate e Commit dell'oggetto Entity per rispettivamente convalidare ed eseguire il commit delle modifiche apportate al record. Il nome specificato nel parametro entitydef_name deve inoltre corrispondere a un tipo di record appropriato nello schema. Per ottenere un elenco di nomi validi per entitydef_name, utilizzare il metodo GetSubmitEntityDefNames.

La sintassi per BuildEntity è la seguente:
$session->BuildEntity(entity_def_name); 
  • session - L'oggetto Session che rappresenta la sessione di accesso al database corrente.
  • entity_def_name - Una stringa che contiene il nome dell'oggetto EntityDef da utilizzare come modello durante la creazione del record.
Il valore di ritorno è un nuovo oggetto Entity creato utilizzando il detto oggetto EntityDef come modello.
Ad esempio:
# Creare l'oggetto Session...

# Creare un nuovo record "defect" 
$entityobj = $sessionobj->BuildEntity("defect"); 

Una volta richiamato il metodo BuildEntity, è possibile richiamare i metodi dell'oggetto Entity per impostare i valori dei campi nel record come descritto nella precedente lezione di questa esercitazione.

Per creare un nuovo record:

  1. Determinare i tipi di record che è possibile creare richiamando il metodo GetSubmitEntityDefNames dell'oggetto Session.
  2. Richiamare il metodo BuildEntity dell'oggetto Session.
  3. Utilizzare i metodi dell'oggetto Entity per impostare i valori per i campi nel record.
  4. Una volta terminata la modifica del record, convalidarlo ed eseguire il commit delle modifiche sul database richiamando rispettivamente i metodi Validate e Commit dell'oggetto Entity.

Esempio

L'esempio che segue illustra come utilizzare i tipi di record stateful e stateless.

Lo schema dispone di record stateless, ad esempio Project, e di record stateful che passano di stato in stato, ad esempio Defect. L'API Rational ClearQuest consente di acquisire e impostare valori campo per entrambi i tipi di record. L'esempio che segue contiene due routine secondarie: No_state per i record stateless e Has_state per i record che dispongono di stati.

L'esempio di codice:
  1. Utilizza il metodo BuildEntity dell'oggetto Session per creare un oggetto Entity.
  2. Imposta i valori in uno o più campi.
  3. Convalida ed esegue il commit dell'entità.
  4. Richiama e modifica l'entità.
  5. Ripristina l'entità.
Il codice in queste due routine secondarie richiama due routine esterne non visualizzate qui - DumpFields, che stampa i campi di un'entità nell'output standard e myValidateCommit, che prima convalida le modifiche e poi ne esegue il commit se la convalida riesce o ripristina i valori iniziali se la convalida non riesce. Di seguito viene indicato il codice che può essere utilizzato per myValidateCommit:
 sub myValidateCommit( $entity ){
  $status = $entity->Validate;
  if ( $status ) {
    $entity->Revert;
    # per semplicità, si esegue l'arresto a ogni errore, eseguire quanto appropriato
    # all'applicazione in uso, se è possibile il ripristino.
    die "Error validating: $status \n";
  }
  else {
    $entity->Commit;
  }
 }
sub No_state { 
   my($session) = @_; 
   my($entity); 
   my($failure); 
   print "Test for stateless entities is starting"; 
   print "submit a stateless entity"; 
   $entity = $session->BuildEntity("project"); 
   # ignorare l'errore $failure = $entity->SetFieldValue("name", "initial project name");
   DumpFields($entity); 
   myValidateCommit( $entity ); 
   $entity = ""; 
   print "Reload, show values before modification"; 
   # Notare che il metodo Entity->Reload si può usare per forzare l'aggiornamento dell'entità dal database.
   $entity = $session->GetEntity("project", "initial project name"); 
   DumpFields($entity); 
   print "Modify, then show new values"; 
   $session->EditEntity($entity, "modify"); 

   # ignorare l'errore 
   $failure = $entity->SetFieldValue("name", "modified     project name"); 
   DumpFields($entity); 

   print "revert, then show restored values"; 
   $entity->Revert(); 
   DumpFields($entity); 

   print "Modify again, and commit"; 

   $session->EditEntity($entity, "modify"); 

   # ignorare l'errore 
   $failure = $entity->SetFieldValue("name", "final project name"); 
   myValidateCommit( $entity ); 
   $entity = ""; 
   print "Reload, and show final result"; 
   $entity = $session->GetEntity("project", "final project name"); 
   DumpFields($entity); 
   $entity = ""; 
   print "Test for stateless entities is done"; 
} 
Di seguito viene riportato un'esempio di verifica delle entità stateful:
sub Has_states {
 my($session) = @_;
 my($entity);
 # l'entità stateful
 # messasggio di errore da funzioni che restituiscono stringhe 
 my($failure);
 my($id);
 # ID database defect Rational ClearQuest 
 print "Test for stateful entities is starting";
 print "submit a stateful entity";
 $entity = $session->BuildEntity("defect");
 # ignorare gli errori
 $failure = $entity->SetFieldValue("headline", "man bites dog!");
 $failure = $entity->SetFieldValue("project", "final project name");
 $failure = $entity->SetFieldValue("submit_date", "03/18/2000 10:09:08");
 $id = $entity->GetDbId();
 open(FILE, ">>XXStdout");
 print FILE, "Entity id is", $id, "\n";
 close FILE;
 DumpFields($entity);
 myValidateCommit( $entity ); 

 $entity = "";
 print "Reload, show values before modification";
 # Notare che il metodo Entity->Reload si può usare per forzare l'aggiornamento dell'entità dal database.
 $entity = $session->GetEntityByDbId("defect", $id);
 DumpFields($entity);
 print "Modify then show new values";
 $session->EditEntity($entity, "modify"); 

 # ignorare l'errore
$failure = $entity->SetFieldValue("headline", "man bites tree!");
 DumpFields($entity);
 print "revert, then show restored values";
 $entity->Revert();
 DumpFields($entity);
 print "Modify again and commit";
 $session->EditEntity($entity, "modify");
 # ignorare l'errore
 $failure = $entity->SetFieldValue("headline", "tree bites man!");
 myValidateCommit( $entity ); 
 $entity = "";
 print "Reload and show before changing state";
 $entity = $session->GetEntityByDbId("defect", $id);
 DumpFields($entity);
 print "Change to new state, then show new values";
 $session->EditEntity($entity, "close");
 $failure = $entity->SetFieldValue("description", "looked like an oak tree");
 # ignorare l'errore
 DumpFields($entity);
 print "revert then show restored values";
 $entity->Revert();
 DumpFields($entity);
 print "Change to new state again then commit";
 $session->EditEntity($entity, "close");
 $failure = $entity->SetFieldValue("description", "man of steel, tree of maple");
 # ignorare l'errore
 myValidateCommit( $entity ); 

 $entity = "";
 print "Reload, show final values";
 $entity = $session->GetEntityByDbId("defect", $id);
 DumpFields($entity);
 $entity = "";
 print "Test of stateful entities is done";
 }
< Indietro | Avanti >

Feedback