EditEntity 메소드는 레코드에 대해 지정된 조치를 수행하고 레코드를 편집할 수 있게 만듭니다. 엔티티 매개변수에 지정하는 Entity 오브젝트는 GetEntityByDbId 또는 GetEntity를 호출하거나 조회를 실행하여 미리 가져와야 합니다.
$session->EditEntity(entity, edit_action_name);
edit_action_name 매개변수에 적합한 값의 목록을 가져오려면 적절한 EntityDef 오브젝트의 GetActionDefNames 메소드를 호출하십시오.
# Build Session object... # Edit the record whose ID is "BUGDB00000010" using the "modify" action $objtoedit = $sessionobj->GetEntity("defect", "BUGDB00000010"); $sessionobj->EditEntity($objtoedit,"modify");
EditEntity 메소드를 호출한 뒤에는 Entity 오브젝트의 메소드를 호출하여 해당 레코드의 필드를 수정할 수 있습니다. 필드의 데이터 유형 또는 전체 레코드에 대한 추가 정보를 가져오거나 현재 조치 지속 기간 동안 필드 동작을 변경할 수도 있습니다.
SetFieldValue 메소드는 이름 지정된 필드에 지정된 값을 놓습니다. 필드가 변경될 경우, 값이 올바른지 여부에 관계 없이 이 메소드는 새 값을 설정하고 빈 문자열을 설정합니다.
필드가 올바른 값을 포함하는지 판별하려면 해당 필드에 대한 FieldInfo 오브젝트를 확보한 후 FieldInfo 오브젝트의 ValidityChangedThisSetValue 메소드를 호출하여 필드의 유효성을 검증하십시오. 필드를 변경할 수 없는 경우, 리턴된 문자열에 필드를 변경할 수 없는 이유가 표시됩니다. 일반적인 값에는 "변경할 수 있는 필드가 아님", "레코드가 편집 중이지 않음" 및 "필드가 읽기 전용임"이 포함됩니다. 필드가 하나가 아닌 여러 개의 값을 가질 수 있는 경우, AddFieldValue 메소드를 사용하여 새 값을 하나씩 추가하십시오. 여전히 SetFieldValue를 사용할 수 있지만, 이미 값 목록을 포함하는 필드에서 SetFieldValue를 사용하면 전체 목록이 하나의 새 값으로 바뀝니다. Entity 오브젝트가 편집 가능한 경우에만 이 메소드를 호출할 수 있습니다.
$entity->SetFieldValue(field_name, new_value);
기존 레코드를 편집하려면 다음 단계를 수행하십시오.
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);