수색…


필드 기호

필드 기호는 필드 기호가 항상 참조 해제된다는 점을 제외하고는 포인터와 동일한 ABAP입니다 (메모리의 실제 주소를 변경할 수 없음).

선언

필드 심볼을 선언하려면 FIELD-SYMBOLS 키워드를 사용해야합니다. 유형은 다양한 변수를 처리하기 위해 일반 ( ANY [... TABLE] ) 일 수 있습니다.

FIELD-SYMBOLS: <fs_line>     TYPE any,    "generic
               <fs_struct>   TYPE kna1.   "non-generic

배정

필드 기호는 선언시 unassigned 아무 것도 가리 키지 않습니다. 할당되지 않은 필드 기호에 액세스하면 예외가 발생하고 catch되지 않으면 짧은 덤프가 발생합니다. 따라서 주정부는 IS ASSIGNED

IF <fs> IS ASSIGNED.
*... symbol is assigned
ENDIF.

참조 용이므로 실제 데이터를 내부에 저장할 수 없습니다. 따라서 모든 사용 사례에서 DATA 로 선언해야합니다.

DATA: w_name  TYPE string VALUE `Max`,
      w_index TYPE i      VALUE 1.
 
FIELD-SYMBOLS <fs_name> TYPE any.

ASSIGN w_name TO <fs_name>. "<fs_name> now gets w_name
<fs_name> = 'Manni'.        "Changes to <fs_name> now also affect w_name

* As <fs_name> is generic, it can also be used for numbers

ASSIGN w_index TO <fs_name>. "<fs_name> now refers to w_index.    
ADD 1 TO <fs_name>.          "w_index gets incremented by one

할당 해제

때로는 필드 심볼을 재설정하는 것이 유용 할 수 있습니다. 이것은 UNASSIGN 사용하여 수행 할 수 있습니다.

UNASSIGN <fs>.
* Access on <fs> now leads to an exception again

내부 테이블에 사용

필드 기호는 내부 테이블을 수정하는 데 사용될 수 있습니다.

LOOP AT itab INTO DATA(wa).
* Only modifies wa_line
    wa-name1 = 'Max'. 
ENDLOOP.    

LOOP AT itab ASSIGNING FIELD-SYMBOL(<fs>).
* Directly refers to a line of itab and modifies its values
    <fs>-name1 = 'Max'. 
ENDLOOP.

주의! 필드 기호는 루프를 벗어난 후에도 그대로 유지됩니다. 안전하게 재사용하려면 즉시 할당을 해제하십시오.

데이터 참조

데이터 참조에 필수적으로 TYPE 다음에 REF TO 가 추가됩니다.

구조의 동적 생성

런타임에 구조체의 유형을 결정해야하는 경우 대상 구조체를 제네릭 형식 data 대한 참조로 정의 할 수 있습니다.

DATA wa TYPE REF TO data.

wa 에 유형을 지정하려면 CREATE DATA 문을 사용합니다. 추가 TYPE 은 다음과 같이 지정할 수 있습니다.

참고:

CREATE DATA wa TYPE kna1

  • 정적 검사가 활성화되어 있으므로 알 수없는 유형을 만들 수 없습니다.

이름:

CREATE DATA wa TYPE (lw_name_as_string)

  • 괄호가 필요하며 lw_name_as_string 은 유형 이름을 문자열로 포함합니다.
  • 형식을 찾을 수없는 경우 CX_SY_CREATE_DATA_ERROR 형식의 예외가 throw됩니다.

동적으로 생성 된 유형을 인스턴스화하려면 HANDLE 추가를 지정할 수 있습니다. HANDLECL_ABAP_DATADESCR 에서 상속 한 객체를받습니다.

CREATE DATA dref TYPE HANDLE obj

  • obj YPE ervices S는 R 않은 T의 T 입력기를 이용하여 생성 될 수있다
  • 때문에 dref (a의 DataReference 여전히, 그것은 역 참조한다 ->* ) (일반적으로 필드 - 심볼을 통해 이루어) datacontainer로서 사용

런타임 유형 서비스

런타임 유형 서비스 ( 짧은 : RTTS )는 다음 용도로 사용됩니다.

  • 유형 생성 (RunTime Type Creation, 짧은 : RTTC )
  • 유형 분석 (런타임 유형 식별, 짧은 : RTTI )

수업

CL_ABAP_TYPEDESCR 
  | 
  |--CL_ABAP_DATADESCR 
  |   | 
  |   |--CL_ABAP_ELEMDESCR 
  |   |--CL_ABAP_REFDESCR 
  |   |--CL_ABAP_COMPLEXDESCR 
  |       | 
  |       |--CL_ABAP_STRUCTDESCR 
  |       |--CL_ABAP_TABLEDESCR 
  | 
  |--CL_ABAP_OBJECTDESCR 
     | 
     |--CL_ABAP_CLASSDESCR 
     |--CL_ABAP_INTFDESCR

CL_ABAP_TYPEDESCR 은 기본 클래스입니다. 다음을 설명하는 데 필요한 메소드를 구현합니다.

  • DESCRIBE_BY_DATA
  • DESCRIBE_BY_NAME
  • DESCRIBE_BY_OBJECT_REF
  • DESCRIBE_BY_DATA_REF


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow