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.
$session->EditEntity(entity, edit_action_name);
È possibile ottenere l'elenco di valori validi per il parametro edit_action_name, richiamando il metodo GetActionDefNames dell'oggetto EntityDef appropriato.
# 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.
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.
$entity->SetFieldValue(field_name, new_value);
Per modificare un record esistente, effettuare quanto segue:
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);