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.
$session->BuildEntity(entity_def_name);
# 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:
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.
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"; }
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"; }