< Indietro | Avanti >

Modifica di un record

Per modificare il contenuto di un record, prima richiamarlo utilizzando il metodo GetEntity, quindi richiamare il metodo EditEntity dell'oggetto Session.

Il metodo EditEntity esegue l'azione specificata su un record e rende il record disponibile alla modifica. L'oggetto Entity specificato nel parametro di entità deve essere stato precedentemente ottenuto richiamando GetEntityByDbId o GetEntity oppure eseguendo una query.

La sintassi per EditEntity è la seguente:
$session->EditEntity(entity, edit_action_name); 
  • session - L'oggetto Session che rappresenta la sessione di accesso al database corrente.
  • entity - L'oggetto Entity che corrisponde al record da modificare.
  • edit_action_name - Una stringa contenente il nome dell'azione da avviare per la modifica (ad esempio, modify o resolve).

    È possibile ottenere l'elenco di valori validi per il parametro edit_action_name, richiamando il metodo GetActionDefNames dell'oggetto EntityDef appropriato.

Ad esempio:
# Creare l'oggetto Session...

# Modificare il record il cui ID è "BUGDB00000010" usando l'azione "modify" 
$objtoedit = $sessionobj->GetEntity("defect", "BUGDB00000010"); 
$sessionobj->EditEntity($objtoedit,"modify"); 

Una volta richiamato il metodo EditEntity, è possibile richiamare i metodi dell'oggetto Entity per modificare i campi del record corrispondente. È anche possibile ottenere ulteriori informazioni relative al tipo di dati nei campi o all'intero record, oppure modificare il comportamento di un campo per la durata dell'azione corrente.

Di seguito vengono riportati alcuni di metodi che è possibile utilizzare durante la modifica di record e di valori di campi:
  • Modificare i valori dei campi: SetFieldValue, AddFieldValue, DeleteFieldValue
  • Aggiungere/Eliminare allegati: AddAttachmentFieldValue, DeleteAttachmentFieldValue
  • Conoscere lo stato di gruppi di campi: GetInvalidFieldValues, GetFieldsUpdatedThisSetValue/Group/Action
  • Conoscere lo stato di un singolo campo dal relativo FieldInfo: GetValidationStatus, GetMessageText

Il metodo SetFieldValue colloca il valore specificato nel campo denominato. Se il campo può essere modificato, questo metodo imposta il relativo nuovo valore, a prescindere dal fatto che tale valore sia valido o meno, e restituisce la stringa vuota.

Per determinare se un campo contiene un valore valido, acquisire l'oggetto FieldInfo per tale campo e richiamare il metodo ValidityChangedThisSetValue dell'oggetto FieldInfo per convalidare il campo. Se il campo non può essere modificato, la stringa restituita ne indica i motivi. I valori soliti includono "no such field", "record is not being edited" e "field is read-only". Se il campo può disporre di più valori anziché di uno soltanto, utilizzare il metodo AddFieldValue per aggiungere ogni valore nuovo. È ancora possibile utilizzare SetFieldValue; tuttavia, l'utilizzo di SetFieldValue su un campo che contiene già un elenco di valori sostituisce l'intero elenco con il nuovo valore singolo. È possibile richiamare questo metodo solo se l'oggetto Entity è modificabile.

La sintassi per SetFieldValue è la seguente:
$entity->SetFieldValue(field_name, new_value); 
  • entity - Un oggetto Entity che rappresenta un record del database utente.
  • field_name - Una stringa contenente un nome del campo valido di questo oggetto Entity.
  • new_value - Una stringa contenente il nuovo valore.
Se le modifiche al campo sono consentite, questo metodo restituisce una stringa vuota; in caso contrario, questo metodo restituisce una stringa contenente una spiegazione dell'errore.

Per modificare un record esistente, effettuare quanto segue:

  1. Acquisire l'oggetto Entity che si desidera modificare utilizzando i metodi dell'oggetto Session. È possibile utilizzare i metodi dell'oggetto Session per far sì che una query trovi i record che corrispondono ai criteri definiti e quindi gestire i record nella serie di risultati della query.
  2. Per rendere un oggetto Entity esistente modificabile, richiamare il metodo EditEntity dell'oggetto Session.
  3. Utilizzare i metodi dell'oggetto Entity per modificare i dati 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

Il seguente esempio elenca tutti i record defect in un database utente Rational ClearQuest e modifica uno dei record. Il programma:
  • Elenca tutti i record defect nel database SAMPL e seleziona i campi id, intestazione e stato (id, Headline e State) come campi di visualizzazione.
  • Modifica il campo della descrizione del record defect SAMPL00000012 in "This defect has been modified."
use CQPerlExt; 
#Chiamare la sessione 
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 {
               # Eseguire il commit delle modifiche solo se la convalida è riuscita. 
               $rec->Commit(); 
             }
      }
 } 
CQSession::Unbuild($session); 
< Indietro | Avanti >

Feedback