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";
}