수정된 데이터 태그 및 수정된 특성

텍스트 양식의 각 필드에는 수정된 데이터 태그가 있습니다. 이는 양식이 마지막으로 표시될 때 사용자가 양식 필드를 변경했는지를 나타내는 상태 값입니다. CICS®와 관련하여 수정된 데이터 태그는 사용자로부터 프로그램으로의 데이터 전송에 수정된 필드만 포함되므로 네트워크 트래픽이 감소한다는 이점이 있습니다.

수정된 데이터 태그는 필드의 modified 특성과 구분됩니다(나중에 설명됨). 이 특성은 프로그램에서 설정되며 수정된 데이터 태그의 값을 표시합니다.

사용자와의 상호 작용

대부분의 경우, 프로그램이 사용자에게 양식을 표시할 때 수정된 데이터 태그는 NO로 사전 설정됩니다. 그런 다음 사용자가 양식 필드에서 데이터를 변경하면 수정된 데이터 태그가 YES로 설정되고 프로그램에서 다음 로직을 사용할 수 있습니다.
  • 데이터 테이블 또는 함수를 사용하여 수정된 데이터를 유효성 검증합니다(필드의 수정된 데이터 태그가 YES인 경우 자동으로 발생함).
  • 다음 구조를 가진 if 문에 필드 이름을 포함시켜 사용자가 이 필드를 수정했음을 발견합니다.
      if (field is modified)
        ;
      end
    세부사항은 텍스트 UI 양식의 논리식의 내용을 참조하십시오.

사용자가 필드에서 문자를 입력하거나 삭제하여 수정된 데이터 태그를 설정합니다. 양식을 제출하기 전에 사용자가 필드 내용을 표시된 값으로 리턴한 경우에도 수정된 데이터 태그가 설정된 채로 유지됩니다.

유효성 검증에는 두 단계가 있습니다. 단계 I에는 데이터 테이블과 관련된 유효성 검증을 비롯하여 InputRequired와 같은 특성이 포함됩니다. 단계 II는 유효성 검증기 함수를 실행합니다. 단계 I에서의 오류로 인해 양식이 다시 표시되는 경우 프로그램이 converse 또는 show를 실행한 후에 수정된 모든 필드에서 수정된 데이터 태그가 여전히 YES로 설정됩니다. 그러나 단계 II에서의 오류로 인해 양식이 다시 표시되는 경우에는, 유효성 검증기 함수가 태그를 재설정하지 않는 한 필드에서 수정된 데이터 태그가 사용되지 않습니다.

수정된 특성 설정

사용자가 특정한 필드를 수정했는지 여부에 상관 없이 프로그램이 태스크를 수행하도록 할 수 있습니다. 예를 들어 다음과 같습니다.
  • 사용자가 해당 필드에 데이터를 입력하지 않은 경우에도 비밀번호 필드의 유효성 검증을 강제 수행하려고 할 수 있습니다.
  • 프로그램이 항상 특정한 교차 필드 유효성 검증을 수행하도록 중요 필드(보호 필드인 경우에도)에 대한 유효성 검증 함수를 지정할 수 있습니다. 이는 프로그램 로직이 필드 그룹을 유효성 검증하고 한 필드 값이 다른 필드의 유효성에 영향을 미치는 방식을 고려함을 의미합니다.
앞의 경우를 처리하기 위해 프로그램 논리 또는 양식 선언에서 특정 필드에 대해 modified 특성을 설정할 수 있습니다.
  • 양식 프리젠테이션에 우선하는 로직에서 set field modified 명령문을 포함시키십시오. 이렇게 하면 양식이 표시될 때 필드의 수정된 데이터 태그가 YES로 사전 설정됩니다.
  • 양식 선언에서 필드의 modified 특성을 YES로 설정하십시오. 이 경우 다음 규칙이 적용됩니다.
    • 양식이 처음 표시될 때 필드의 수정된 데이터 태그가 YES로 사전 설정됩니다.
    • 양식이 표시되기 전에 다음 상황이 발생하면, 양식이 표시될 때 수정된 데이터 태그가 YES로 사전 설정됩니다.
      • 코드에서 set field initial 명령문을 실행합니다. 이는 필드에 대한 원본 컨텐츠와 특성 값을 재지정합니다. 또는,
      • 코드에서 set field initialAttributes 명령문을 실행합니다. 이는 양식의 각 필드에 대한 원본 특성 값(컨텐츠가 아님)을 재지정합니다. 또는,
      • 코드에서 set form initial 명령문을 실행합니다. 이는 양식의 각 필드에 대한 원본 컨텐츠와 특성 값을 재지정합니다. 또는,
      • 코드에서 set form initialAttributes 명령문을 실행합니다. 이는 양식의 각 필드에 대한 원본 특성 값(컨텐츠가 아님)을 재지정합니다.
set 문은 수정된 데이터 태그의 현재 설정이 아니라 modified 특성의 값에 영향을 줍니다. 다음 유형의 테스트는 양식 데이터가 마지막으로 프로그램에 리턴되었을 때 적용된 수정된 데이터 태그 값을 기반으로 합니다.
  if (field is modified)
    ;
  end
로직에서 처음으로 양식을 표시하기 전에 필드의 수정된 데이터 태그를 테스트하려고 하면, 런타임 시 오류가 발생합니다.
사용자(프로그램이 아님)가 필드를 수정했는지를 발견해야 하는 경우 필드의 수정된 데이터 태그 값이 NO로 사전 설정되었는지 확인하십시오.
  • 양식 선언에서 필드의 modified 특성이 NO로 설정된 경우 set field modified 명령문을 사용하지 마십시오. 해당 명령문이 없는 경우 양식이 프리젠테이션되기 전에 modified 특성이 자동으로 NO로 설정됩니다.
  • 양식 선언에서 필드의 modified 특성이 YES로 설정된 경우 양식 프리젠테이션에 우선하는 로직에서 set field normal 명령문을 사용하십시오. 해당 명령문은 modified 특성을 NO로 설정하고 두 번째 결과로 보통의 강도로 필드를 보호되지 않음으로 표시합니다.

양식 수정 여부 테스트

변수 양식 필드에 대해 수정된 데이터 태그가 YES로 설정되면 전체 양식이 수정된 것으로 인식됩니다. 아직 사용자에게 주어지지 않았던 양식의 수정된 상태를 테스트하면, 테스트 결과는 FALSE입니다.

양식 form01에서 다음 설정을 가정합니다.
  • field01 필드의 modified 특성은 NO으로 설정됩니다.
  • field02 필드의 modified 특성은 YES으로 설정됩니다.

다음 로직은 다양한 테스트 결과를 보여줍니다.

  // tests false because a converse statement 
  // was not run for the form
  if (form01 is modified)
    ;
  end

  // causes a runtime error because a converse 
  // statement was not run for the form
  if (field01 is modified)
    ;
  end

  // assume that the user modifies both fields
  converse form01;

  // tests true
  if (field01 is modified)
    ;
  end

  // tests true
  if (field02 is modified)
    ;
  end

  // sets the modified property to no 
  // at the next converse statement for the form 
  set field01 initialAttributes;
  
  // sets the modified property to yes 
  // at the next converse statement for the form 
  set field02 initialAttributes;

  // tests true 
  // (the previous set statement takes effect only
  // at the next converse statement for the form
  if (field01 is modified)
    ;
  end

  // assume that the user does not modify either field
  converse form01;

  // tests false because the program set the modified 
  // data tag to no, and the user entered no data 
  if (field01 is modified)
    ;
  end

  // tests true because the program set the modified 
  // data tag to yes
  if (field02 is modified)
    ;
  end
  
  // assume that the user does not modify either field
  converse form01;

  // tests false
  if (field01 is modified)
    ;
  end

  // tests false because the presentation was not
  // the first, and the program did not reset the
  // field properties to their initial values
  if (field02 is modified)
    ;
  end