O método EditEntity executa a ação especificada em um registro e torna o registro disponível para edição. O objeto Entity especificado por você no parâmetro da entidade deve ter sido obtido previamente chamando o GetEntityByDbId ou GetEntity, ou pela execução de uma consulta.
$session->EditEntity(entity, edit_action_name);
Você pode obter a lista dos valores permitidos para o parâmetro edit_action_name, chamando o método GetActionDefNames do objeto EntityDef adequado.
# Build Session object...
# Edit the record whose ID is "BUGDB00000010" using the "modify" action
$objtoedit = $sessionobj->GetEntity("defect", "BUGDB00000010");
$sessionobj->EditEntity($objtoedit,"modify");
Depois de chamar o método EditEntity, você pode chamar os métodos do objeto Entity para modificar os campos do registro correspondente. Você pode também obter informações adicionais sobre o tipo de dados nos campos ou sobre o registro como um todo ou alterar o comportamento de um campo para a duração da ação atual.
O método SetFieldValue posiciona o valor especificado no campo nomeado. Se o campo pode ser alterado, esse método configura seu novo valor, independente de o valor ser válido e retorna a Cadeia vazia.
Para determinar se um campo contém um valor válido, obtenha o objeto FieldInfo para aquele campo e chame o método ValidityChangedThisSetValue do objeto FieldInfo para validar o campo. Se o campo não pode ser alterado, a Cadeia retornada indica por que o campo não pode ser alterado. Os valores típicos incluem "no such field", "record is not being edited" e "field is read-only". Se o campo pode ter múltiplos valores em vez de apenas um, use o método AddFieldValue para incluir cada novo valor. Ainda é permitido usar SetFieldValue; no entanto, usar SetFieldValue em um valor que já contém uma lista de valores substitui a lista inteira com o novo valor único. Você pode chamar esse método somente se o objeto Entity for editável.
$entity->SetFieldValue(field_name, new_value);
Para editar um registro existente, siga estas etapas:
use CQPerlExt;
#Getting the session
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);