< Anterior | Siguiente >

Modificación de un registro

Para modificar el contenido de un registro, recupere primero el registro llamando a los métodos GetEntity y EditEntity del objeto Session.

El método EditEntity realiza la acción especificada en un registro y hace que el registro esté disponible para la edición. El objeto Entity que se especifica en el parámetro entidad se debe haber obtenido previamente llamando a GetEntityByDbId o GetEntity, o bien, ejecutando una consulta.

Sintaxis para EditEntity:
$session->EditEntity(entity, edit_action_name); 
  • session: el objeto Session que representa la sesión de acceso a la base de datos actual.
  • entity: el objeto Entity correspondiente al registro que se va a editar.
  • edit_action_name: un valor String que contiene el nombre de la acción que iniciar para la edición (por ejemplo, modify o resolve).

    Para obtener la lista de valores permitidos para el parámetro edit_action_name, llame al método GetActionDefNames del objeto EntityDef adecuado.

Por ejemplo:
# Build Session object...

# Edit the record whose ID is "BUGDB00000010" using the "modify" action 
$objtoedit = $sessionobj->GetEntity("defect", "BUGDB00000010"); 
$sessionobj->EditEntity($objtoedit,"modify"); 

Después de llamar al método EditEntity, puede llamar a los métodos del objeto Entity para modificar los campos del registro correspondiente. También puede obtener información adicional sobre el tipo de datos de los campos o sobre el registro en conjunto, o bien cambiar el comportamiento de un campo mientras tiene lugar la acción actual.

Estos son algunos de los métodos que puede utilizar al editar registros y valores de campos:
  • Modificar valores de campo: SetFieldValue, AddFieldValue, DeleteFieldValue
  • Añadir/Suprimir archivos de datos adjuntos: AddAttachmentFieldValue, DeleteAttachmentFieldValue
  • Obtener estado de grupos de campos: GetInvalidFieldValues, GetFieldsUpdatedThisSetValue/Group/Action
  • Obtener estado de campo individual desde su FieldInfo: GetValidationStatus, GetMessageText

El método SetFieldValue coloca el valor especificado en el campo denominado. Si el campo se puede cambiar, este método establece el nuevo valor, a pesar de que el valor sea válido, y devuelve un valor String vacío.

Para determinar si un campo contiene un valor válido, obtenga el objeto FieldInfo para el campo y llame al método ValidityChangedThisSetValue del objeto FieldInfo para validar el campo. Si el campo no se puede cambiar, el valor String devuelto indica el motivo por el que no se puede cambiar el campo. Los valores típicos incluyen, por ejemplo, "no existe tal campo", "el registro no se está editando" y "el campo es de sólo lectura". Si el campo puede tener varios valores en lugar de sólo uno, utilice el método AddFieldValue para añadir cada nuevo valor. Aún se permite utilizar SetFieldValue; sin embargo, la utilización de SetFieldValue en un campo que ya contiene una lista de valores, reemplaza la lista completa con el único nuevo valor. Sólo se puede llamar a este método si el objeto Entity se puede editar.

Sintaxis para SetFieldValue:
$entity->SetFieldValue(field_name, new_value); 
  • entity: un objeto Entity que representa un registro de base de datos de usuario.
  • field_name: un valor String que contiene un nombre de campo válido de este objeto Entity.
  • new_value: un valor String que contiene el nuevo valor.
Si se permiten cambios en el campo, este método devuelve un valor String vacío; de lo contrario, este método devuelve un String que contiene una explicación del error.

Para editar un registro existente, siga los pasos que se indican a continuación:

  1. Obtenga el objeto Entity que desea editar utilizando los métodos del objeto Session. Puede utilizar métodos del objeto Session para que una consulta encuentre registros que coincidan con los criterios que define y, a continuación, trabajar con los registros del conjunto de resultados de la consulta.
  2. Para convertir un objeto Entity existente en editable, llame al método EditEntity del objeto Session.
  3. Utilice métodos del objeto Entity para modificar datos 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 lista todos los registros de defectos de una base de datos de usuario de Rational ClearQuest y modifica uno de los registros. El programa:
  • Lista todos los registros de defectos de la base de datos SAMPL y selecciona ID, Headline y State como campos de visualización.
  • Modifica el campo Description del registro de defecto SAMPL00000012 por "This defect has been modified."
use CQPerlExt; 
#Obtención de la sesión 
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); 
< Anterior | Siguiente >

Comentarios