특성

특성은 EGL이 파트, 변수 또는 명령문에 대한 특정 정보를 인코딩하는 데 사용하는 이름 - 값 쌍입니다. EGL은 이러한 특성을 내부에서 여러 방법으로 정의합니다. EGL 프로그래머는 몇 가지 중요한 차이점만 알면 됩니다.
  • 단순 특성은 생성 시 EGL에 정보를 전달하며 동적으로(즉, 런타임 시) 변경될 수 없습니다. 단순 특성에는 단일 필드 만 있습니다. 속기를 사용하여 값 설정 블록(값 설정 블록 참조)에서 특성 이름을 해당 값으로 동등화하기만 하면 이 필드를 설정할 수 있습니다. 다음 예제에서 displayName은 단순 특성입니다.
    DataItem socSecNum INT {
       displayName = "Social Security Number"} 
    end
  • 복합 특성도 생성 시 EGL에 정보를 전달하며 런타임 시 변경될 수 없습니다. 복합 특성은 하나의 필드 대신 여러 필드가 있다는 점만 단순 특성과 다릅니다. 이와 같은 각 이름 - 값 쌍을 특성 필드라고 합니다. 종종 복합 특성 앞에 단항 @ 연산자가 표시되는데 이는 피연산자가 필드가 아니라 특성임을 표시합니다(@ 연산자 참조). 이 주제의 "복합 특성"도 참조하십시오.
  • 암시적 필드는 특성과 비슷한 이름 - 값 쌍이지만 빌드 시 컴파일러에 표시되지 않습니다. 일반적으로 이 암시적 필드는 런타임 시 변경 가능합니다. EGL은 이 필드를 예외 레코드와 같은 특정 스테레오타입의 파트에 자동으로 추가합니다(예외 스테레오타입 참조).
  • 콘솔 UI에 "의사 특성"도 있습니다. 단순 특성과 마찬가지로 의사 특성은 ConsoleField와 같은 변수의 특정 유형을 선언할 때 지정할 수 있는 이름 - 값 쌍입니다. 단순 특성과는 달리 생성에 아무 영향도 주지 않습니다. 이러한 의사 특성은 종종 런타임 시 변경 가능하지만 일부는 읽기 전용으로 선언됩니다. 자세한 정보는 특정 UI 기술에 대한 주제를 참조하십시오.

이 문서에서는 "특성"이라는 용어를 느슨한 의미로 사용하여 위의 모든 변수를 가리킵니다.

값 설정 블록에 자세히 설명되어 있는 값 설정 블록에서 이들 특성을 설정할 수 있습니다. 특정 파트 또는 명령문에 사용 가능한 특성과 값에 대한 자세한 정보는 해당 파트와 명령문의 특정 특성 주제를 참조하십시오.

올바른 특성 세트는 컨텍스트에 따라 다릅니다.
  • 각 파트 유형이 특성 세트를 정의하며 이러한 특성을 변경하여 파트의 특성을 수정할 수 있습니다. 각 프로그램 파트에 예를 들어 컴파일 가능 단위의 이름을 식별하는 alias 특성이 있습니다.

    파트에 스테레오타입 지정된 경우 파트뿐 아니라 파트 내의 필드에서도 추가 특성을 사용할 수 있습니다(스테레오타입 참조). 자세한 정보는 스테레오타입이 해당 파트를 특화하는 UI 기술 또는 특정 데이터 액세스를 참조하십시오.

  • 일부 변수 선언에서 관련 파트 정의에 지정된 특성을 대체할 수 있지만 해당 컨텍스트에서 특성이 의미가 있는 경우에만 대체할 수 있습니다.
    • DataItem 파트(DataItem 파트 참조)를 기반으로 하는 변수를 선언할 때 특성을 대체할 수 있습니다. 다음 정의를 검토합니다.
        DataItem IDNumber CHAR(9) 
        {
          minimumInput = 9,         // requires 9 input characters
          isDecimalDigit = yes, // requires digits
          column = "SSN"    // is related to a column
        }
        end
      다음 명령문은 IDNumber 유형의 UI 필드를 선언하지만 명령문에 사용자가 숫자를 입력하지 않아도 됩니다.
        myID IDNumber { isDecimalDigit = no }; 

      이 예제에서 대체는 minimumInput 특성과 column 특성에 영향을 주지 않습니다.

    • 레코드 파트와 같은 복합 파트의 특성을 대체할 수 있습니다. 다음 예제에서는 단일 필드로 레코드를 정의합니다.
      Record TestRecord
        y int {color = red};
      end
      이 정의를 기반으로 변수를 선언하는 경우 color 특성의 값을 대체할 수 있습니다.
      myRec TestRecord {y{color = black}};
  • 기본 유형 변수를 선언할 때 변수 선언의 컨텍스트에서 유용한 필드 레벨 특성을 설정할 수 있습니다.
  • 레코드 변수를 선언하는 경우 파트를 정의할 때 설정할 수 없는 redefines 특성을 지정할 수 있습니다. 이 특성에 대한 세부사항은 "다른 변수를 재정의하는 레코드 변수 선언"을 참조하십시오.

런타임 시 단순 또는 복합 특성에 액세스할 수 없습니다. (암시적 필드에는 액세스할 수 있습니다.) 예를 들어, 관계형 데이터베이스 레코드에 대해 스테레오타입 지정된 변수를 작성하는 경우 사용자가 쓰는 논리는 tableNames 특성에 지정된 이름을 검색하거나 변경할 수 없습니다. 이 특성은 레코드에서 액세스하는 데이터베이스 테이블을 식별합니다. 변수 선언에서 특성 값을 대체해도 프로그램 논리는 사용자가 개발 시 지정한 값을 변경할 수 없습니다.

이와 같은 특성 값에 대한 런타임 액세스가 없는 것은 변수의 컨텐츠를 지정하거나 변수를 매개변수로 사용할 때 특성 값이 컨텐츠와 함께 전송되지 않음을 의미합니다. 마찬가지로 EGL 함수에 레코드를 전달하는 경우 매개변수는 필드 컨텐츠를 수신하지만 개발 시 지정된 특성을 유지합니다. 다시 말해 함수에서는 프로그램이 작성한 레코드 특성의 대체를 볼 수 없습닌다.

변수 이름 및 특성

특성에 EGL 변수의 이름을 지정하는 경우 변수 이름을 직접 사용하십시오. (이름을 따옴표로 묶지 마십시오. 따옴표는 리터럴 문자열을 표시합니다.) 다음 특성에서 이 규칙을 준수하십시오.
기본 프로그램
inputRecord
JSF 핸들러 스테레오타입
onConstructionFunction, initialUI 배열 요소입니다.
Rich UI 핸들러 스테레오타입
onConstructionFunction, validationByPassFunctions, validatorFunction, viewRootVar.
SQLRecord 스테레오타입
keyItems
기타 특성
msgField, numElementsItem, selectedIndexItem, selectedRowItem, selectedValueItem , selectFromListItem, validatorDataTable, validatorFunction, redefines

복합 특성

일부 경우 복합 특성(특성 필드의 세트로 구성됨)을 지정하여 생성 특성을 지정할 수 있습니다. 다음 예제에서는 EGL 서비스를 선언하고 서비스에 대한 액세스를 제공하는 데 필요한 세부사항이 포함된 xml 복합 특성을 정의합니다.
myService ExampleService {
   @xml {
      name="HelloWorld",
      namespace="http://my.website/services"} }
...
end

런타임 시 복합 특성 또는 해당 특성 필드에 액세스할 수 없습니다.

지정 및 특성

하나의 값 변수를 다른 값 변수에 지정하는 경우 특성은 전송하지 않습니다. 다음 시나리오를 검토합니다.
  myVar1 INT {color = red} = 5;
  myVar2 INT {color = blue} = 2;

  myVar1 = myVar2;

지정 후 myVar1의 값은 2이고 색상은 빨간색입니다.

변수를 함수에 인수로 전달하는 경우 동일한 결과가 발생합니다. 함수는 변수의 값을 수신하지만 변수의 특성은 수신하지 않습니다.

참조 변수는 다르게 작동합니다. 참조 변수에 특성을 지정하는 경우 이는 변수가 가리키는 오브젝트에 지정하는 것입니다. 지정 후 두 번째 참조 변수가 동일한 오브젝트를 가리킵니다. 다음 예제는 참조 변수 지정을 표시합니다.
myDictionary1 Dictionary { caseSensitive=NO };
myDictionary2 Dictionary { caseSensitive=YES };

myDictionary1 = myDictionary2;

지정 후 myDictionary1myDictionary2와 동일한 사전 파트를 가리키므로 이제 myDictionary1은 대소문자를 구분합니다.