수색…
필드 기호
필드 기호는 필드 기호가 항상 참조 해제된다는 점을 제외하고는 포인터와 동일한 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 추가를 지정할 수 있습니다. HANDLE 은 CL_ABAP_DATADESCR 에서 상속 한 객체를받습니다.
CREATE DATA dref TYPE HANDLE obj
objYPE 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