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);