< 이전 | 다음 >

레코드 수정

레코드 컨텐츠를 수정하려면 먼저 GetEntity 메소드를 호출한 후 Session 오브젝트의 EditEntity 메소드를 호출하여 레코드를 검색합니다.

EditEntity 메소드는 레코드에 대해 지정된 조치를 수행하고 레코드를 편집할 수 있게 만듭니다. 엔티티 매개변수에 지정하는 Entity 오브젝트는 GetEntityByDbId 또는 GetEntity를 호출하거나 조회를 실행하여 미리 가져와야 합니다.

EditEntity의 구문은 다음과 같습니다.
$session->EditEntity(entity, edit_action_name); 
  • session - 현재 database-access 세션을 나타내는 Session 오브젝트입니다.
  • entity - 삭제할 레코드에 해당하는 Entity 오브젝트입니다.
  • edit_action_name - 편집을 위해 시작할 조치 이름을 포함하는 문자열입니다(예: modify 또는 resolve).

    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, AddFieldValue, DeleteFieldValue
  • 첨부 추가/삭제: AddAttachmentFieldValue, DeleteAttachmentFieldValue
  • 필드 그룹의 상태 가져오기: GetInvalidFieldValues, GetFieldsUpdatedThisSetValue/Group/Action
  • 해당 FieldInfo에서 개별 필드 상태 가져오기: GetValidationStatus, GetMessageText

SetFieldValue 메소드는 이름 지정된 필드에 지정된 값을 놓습니다. 필드가 변경될 경우, 값이 올바른지 여부에 관계 없이 이 메소드는 새 값을 설정하고 빈 문자열을 설정합니다.

필드가 올바른 값을 포함하는지 판별하려면 해당 필드에 대한 FieldInfo 오브젝트를 확보한 후 FieldInfo 오브젝트의 ValidityChangedThisSetValue 메소드를 호출하여 필드의 유효성을 검증하십시오. 필드를 변경할 수 없는 경우, 리턴된 문자열에 필드를 변경할 수 없는 이유가 표시됩니다. 일반적인 값에는 "변경할 수 있는 필드가 아님", "레코드가 편집 중이지 않음" 및 "필드가 읽기 전용임"이 포함됩니다. 필드가 하나가 아닌 여러 개의 값을 가질 수 있는 경우, AddFieldValue 메소드를 사용하여 새 값을 하나씩 추가하십시오. 여전히 SetFieldValue를 사용할 수 있지만, 이미 값 목록을 포함하는 필드에서 SetFieldValue를 사용하면 전체 목록이 하나의 새 값으로 바뀝니다. Entity 오브젝트가 편집 가능한 경우에만 이 메소드를 호출할 수 있습니다.

SetFieldValue의 구문은 다음과 같습니다.
$entity->SetFieldValue(field_name, new_value); 
  • entity - 사용자 데이터 레코드를 나타내는 Entity 오브젝트입니다.
  • field_name - Entity 오브젝트의 올바른 필드 이름을 포함하는 문자열입니다.
  • new_value - 새 값을 포함하는 문자열입니다.
필드 변경이 허용될 경우 이 메소드는 빈 문자열을 리턴합니다. 허용되지 않으면 오류에 대한 설명이 들어 있는 문자열을 리턴합니다.

기존 레코드를 편집하려면 다음 단계를 수행하십시오.

  1. Session 오브젝트의 메소드를 사용하여 편집할 Entity 오브젝트를 가져오십시오. Session 오브젝트의 메소드를 사용하여 사용자가 정의하는 기준과 일치하는 레코드를 찾는 조회를 정의한 후 조회 결과 세트에서 레코드에 대해 작업할 수 있습니다.
  2. 기존의 Entity 오브젝트를 편집 가능하게 만들려면 Session 오브젝트의 EditEntity 메소드를 호출하십시오.
  3. Entity 오브젝트의 메소드를 사용하여 레코드의 데이터를 수정하십시오.
  4. 레코드 편집을 완료한 경우에는 Entity 오브젝트의 ValidateCommit 메소드를 각각 호출하여 유효성을 검증하고 변경사항을 데이터베이스로 확약하십시오.

예제

다음 예제는 Rational ClearQuest 사용자 데이터베이스의 모든 결함 레코드를 나열하고 레코드 중 하나를 수정합니다. 프로그램은 다음을 수행합니다.
  • SAMPL 데이터베이스의 모든 결함 레코드를 나열하고 id, Headline 및 State를 표시 필드로 선택합니다.
  • 결함 레코드 SAMPL00000012의 Description 필드를 "This defect has been modified"가 되도록 수정합니다.
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); 
< 이전 | 다음 >

피드백