< Anterior | Siguiente >

Creación de un nuevo registro

Para crear un nuevo registro, utilice el método BuildEntity del objeto Session.

El método BuildEntity crea un nuevo objeto Entity con un único ID para la base de datos de usuario determinada e inicia una acción de enviar para el registro. Durante la acción de enviar, el registro está disponible para editar los valores predeterminados en el objeto Entity.

Si crea un objeto Entity utilizando BuildEntity y aún no lo ha confirmado en la base de datos, el objeto está disponible para la edición.

El método BuildEntity crea un nuevo registro del tipo especificado e inicia una acción de enviar, que permite empezar a editar el contenido del registro (no es necesario llamar a EditEntity para convertir el registro en editable). Puede asignar valores a los campos del nuevo registro gracias al método SetFieldValue del objeto Entity devuelto. Cuando haya terminado de actualizar el registro, utilice los métodos Validate y Commit del objeto Entity para validar y confirmar todos los cambios que ha llevado a cabo en el registro, respectivamente. El nombre que especifica en el parámetro entitydef_name también debe corresponder a un tipo de registro adecuado en el esquema. Para obtener una lista de nombres permitidos para entitydef_name, utilice el método GetSubmitEntityDefNames.

Sintaxis para BuildEntity:
$session->BuildEntity(entity_def_name); 
  • session: el objeto Session que representa la sesión de acceso a la base de datos actual.
  • entity_def_name: un valor String que contienen el nombre del objeto EntityDef que se va a utilizar como una plantilla al crear el registro.
El valor de retorno es un nuevo objeto Entity que se compila utilizando el objeto EntityDef denominado como una plantilla.
Por ejemplo:
# Build Session object...

# Create a new "defect" record 
$entityobj = $sessionobj->BuildEntity("defect"); 

Después de llamar al método BuildEntity, puede llamar a los métodos del objeto Entity para establecer los valores de campo del registro tal como se describe en la lección anterior de esta guía de aprendizaje.

Para crear un registro nuevo, efectúe lo siguiente:

  1. Determine qué tipos de registro puede crear llamando al método GetSubmitEntityDefNames del objeto Session.
  2. Llame al método BuildEntity del objeto Session.
  3. Utilice métodos del objeto Entity para establecer valores para campos del registro.
  4. Una vez que haya terminado de editar el registro, valídelo y confirme los cambios en la base de datos llamando a los métodos Validate y Commit del objeto Entity, respectivamente.

Ejemplo

El ejemplo siguiente ilustra cómo trabajar con tipos de registro con estado y sin estado.

El esquema tiene registros sin estado como, por ejemplo, Project y registros con estado que se mueven de un estado a otro. La API de Rational ClearQuest le permite obtener y establecer valores de campo para ambos tipos de registro. El ejemplo siguiente contiene dos subrutinas: No_state para registros sin estado y Has_state para registros que tienen estados.

Ejemplo de código:
  1. Utiliza el método BuildEntity de Session para crear un objeto Entity.
  2. Establece los valores en uno o más campos.
  3. Valida y confirma la entidad.
  4. Recupera y modifica la entidad.
  5. Revierte la entidad.
El código de estas dos subrutinas llama a dos rutinas externas que no se muestran aquí: DumpFields, que imprime los campos de una entidad en salida estándar, y myValidateCommit, que primero valida los cambios y confirma el cambio si la validación es satisfactoria o revierte el cambio si la validación presenta alguna anomalía. Este es el código que se podría utilizar para myValidateCommit:
 sub myValidateCommit( $entity ){
  $status = $entity->Validate;
  if ( $status ) {
    $entity->Revert;
    # for simplicity, we die on any error, you should do what makes sense in your
    # application if recovery is possible.
    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"); 
   # ignore failure $failure = $entity->SetFieldValue("name", "initial project name");
   DumpFields($entity); 
   myValidateCommit( $entity ); 
   $entity = ""; 
   print "Reload, show values before modification"; 
   # Note that the Entity->Reload method can be used to force a refresh of the entity from the database.
   $entity = $session->GetEntity("project", "initial project name"); 
   DumpFields($entity); 
   print "Modify, then show new values"; 
   $session->EditEntity($entity, "modify"); 

   # ignore the failure 
   $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"); 

   # ignore failure 
   $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"; 
} 
Lo siguiente es un ejemplo de prueba de entidades con estado:
sub Has_states {
 my($session) = @_;
 my($entity);
 # the entity that is stateful
 # failure message from functions that return strings 
 my($failure);
 my($id);
 # Rational ClearQuest defect database ID 
 print "Test for stateful entities is starting";
 print "submit a stateful entity";
 $entity = $session->BuildEntity("defect");
 # ignore failures
 $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";
 # Note that the Entity->Reload method can be used to force a refresh of the entity from the database.
 $entity = $session->GetEntityByDbId("defect", $id);
 DumpFields($entity);
 print "Modify then show new values";
 $session->EditEntity($entity, "modify"); 

 # ignore failure
$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");
 # ignore failure
 $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");
 # ignore failure
 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");
 # ignore failure
 myValidateCommit( $entity ); 

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

Comentarios