
*&---------------------------------------------------------------------*
*& Report Z_UNICODE1
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT Z_UNICODE1.
TYPES :
BEGIN OF PERSON,
FIRSTNAME(20) TYPE C,
LASTNAME(20) TYPE C,
AGE TYPE I,
END OF PERSON,
BEGIN OF ADDRESS,
STREET(20) TYPE C,
CITY(30) TYPE C,
CODE(6) TYPE C,
COUNTRY(20) TYPE C,
END OF ADDRESS,
BEGIN OF CONTAINER,
TAG(1) TYPE C,
* CONTENTS(100) TYPE C,
CONTENTS TYPE XSTRING,
END OF CONTAINER.
DATA : CONTAINER_TAB TYPE STANDARD TABLE OF CONTAINER.
PERFORM FILL_TABLE CHANGING CONTAINER_TAB.
PERFORM WRITE_TABLE USING CONTAINER_TAB.
*&---------------------------------------------------------------------*
*& Form fill_table
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_CONTAINER_TAB text
*----------------------------------------------------------------------*
FORM FILL_TABLE CHANGING DATA_TAB LIKE CONTAINER_TAB.
DATA : PERS TYPE PERSON,
ADDR TYPE ADDRESS,
ENTRY TYPE CONTAINER.
PERS-FIRSTNAME = 'Max'.
PERS-LASTNAME = 'Meier'.
PERS-AGE = 33.
ENTRY-TAG = 'P'.
* ENTRY-CONTENTS = PERS.
EXPORT VALUE = PERS TO DATA BUFFER ENTRY-CONTENTS.
APPEND ENTRY TO DATA_TAB.
ADDR-STREET = '송파'.
ADDR-CITY = '서울'.
ADDR-CODE = '123456'.
ADDR-COUNTRY = '대한민국'.
ENTRY-TAG = 'A'.
ENTRY-CONTENTS = ADDR.
APPEND ENTRY TO DATA_TAB.
PERS-FIRSTNAME = 'Fred'.
PERS-LASTNAME = 'smith'.
PERS-AGE = '23'.
ENTRY-TAG = 'P'.
* ENTRY-CONTENTS = PERS.
EXPORT VALUE = PERS TO DATA BUFFER ENTRY-CONTENTS.
APPEND ENTRY TO DATA_TAB.
ENDFORM. " fill_table
*&---------------------------------------------------------------------*
*& Form WRITE_TABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_CONTAINER_TAB text
*----------------------------------------------------------------------*
FORM WRITE_TABLE USING DATA_TAB LIKE CONTAINER_TAB.
DATA : CONTAINER_LINE TYPE CONTAINER,
PERS TYPE PERSON,
ADDR TYPE ADDRESS.
LOOP AT DATA_TAB INTO CONTAINER_LINE.
CASE CONTAINER_LINE-TAG.
WHEN 'P'.
* PERS = CONTAINER_LINE-CONTENTS.
IMPORT VALUE = PERS FROM DATA BUFFER CONTAINER_LINE-CONTENTS.
WRITE : / 'FIRST NAME', PERS-FIRSTNAME,
/ 'LAST NAME', PERS-LASTNAME,
/ 'AGE' , PERS-AGE.
ULINE.
WHEN 'A'.
ADDR = CONTAINER_LINE-CONTENTS.
WRITE : / 'Street' , ADDR-STREET,
/ 'city', ADDR-CITY,
/ 'postal code', ADDR-CODE,
/ 'country', ADDR-COUNTRY.
ULINE.
ENDCASE.
ENDLOOP.
ENDFORM. " WRITE_TABLE
수정한 부분은 주석 처리 바루 아래 한줄 입니다.
한글이 안나오는 이유가 데이터 선언부에서
* CONTENTS(100) TYPE C,
CONTENTS TYPE XSTRING,
기존에 Character type 이 Byte type인 xstring 로 변경이되어서 안나오는것 같은대용..
나오게 할수 있는 방법이 없을까용???
결과 화면 같이 올려 드림니다.
힌트좀 부탁 드림니다. 선배님들.. ^^
아래 코드 추가 합니다. 유니코드 상에서는 필드변수 = 구조변수 하면 컴파일 에러 발생합니다. 쩝 그런데 소스에서 보면 값이 한글로 시작하는거는 또 에러가 안나네요.
새로운거를 알았네요 필드변수 와 구조변수간의 변환은 CL_ABAP_CONTAINER_UTILITIES 클래스의 클래스 메소드를 사용하시기 바랍니다. 저도 이문제로 고민 많이 했었습니다. 아래 수정된 코드 추가합니다.
REPORT Z_UNICODE1.
TYPES :
BEGIN OF PERSON,
FIRSTNAME(20) TYPE C,
LASTNAME(20) TYPE C,
AGE TYPE I,
END OF PERSON,
BEGIN OF ADDRESS,
STREET(20) TYPE C,
CITY(30) TYPE C,
CODE(6) TYPE C,
COUNTRY(20) TYPE C,
END OF ADDRESS,
BEGIN OF CONTAINER,
TAG(1) TYPE C,
CONTENTS(100) TYPE C,
END OF CONTAINER.
DATA : CONTAINER_TAB TYPE STANDARD TABLE OF CONTAINER.
PERFORM FILL_TABLE CHANGING CONTAINER_TAB.
PERFORM WRITE_TABLE USING CONTAINER_TAB.
*&---------------------------------------------------------------------*
*& Form fill_table
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_CONTAINER_TAB text
*----------------------------------------------------------------------*
FORM FILL_TABLE CHANGING DATA_TAB LIKE CONTAINER_TAB.
DATA : PERS TYPE PERSON,
ADDR TYPE ADDRESS,
ENTRY TYPE CONTAINER.
PERS-FIRSTNAME = 'Max'.
PERS-LASTNAME = 'Meier'.
PERS-AGE = 33.
ENTRY-TAG = 'P'.
CALL METHOD CL_ABAP_CONTAINER_UTILITIES=>FILL_CONTAINER_C
EXPORTING
IM_VALUE = PERS
IMPORTING
EX_CONTAINER = ENTRY-CONTENTS.
APPEND ENTRY TO DATA_TAB.
ADDR-STREET = '송파'.
ADDR-CITY = '서울'.
ADDR-CODE = '123456'.
ADDR-COUNTRY = '대한민국'.
ENTRY-TAG = 'A'.
ENTRY-CONTENTS = ADDR.
APPEND ENTRY TO DATA_TAB.
PERS-FIRSTNAME = 'Fred'.
PERS-LASTNAME = 'smith'.
PERS-AGE = '23'.
ENTRY-TAG = 'P'.
CALL METHOD CL_ABAP_CONTAINER_UTILITIES=>FILL_CONTAINER_C
EXPORTING
IM_VALUE = PERS
IMPORTING
EX_CONTAINER = ENTRY-CONTENTS.
APPEND ENTRY TO DATA_TAB.
ENDFORM. " fill_table
*&---------------------------------------------------------------------*
*& Form WRITE_TABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_CONTAINER_TAB text
*----------------------------------------------------------------------*
FORM WRITE_TABLE USING DATA_TAB LIKE CONTAINER_TAB.
DATA : CONTAINER_LINE TYPE CONTAINER,
PERS TYPE PERSON,
ADDR TYPE ADDRESS.
LOOP AT DATA_TAB INTO CONTAINER_LINE.
CASE CONTAINER_LINE-TAG.
WHEN 'P'.
CALL METHOD CL_ABAP_CONTAINER_UTILITIES=>READ_CONTAINER_C
EXPORTING
IM_CONTAINER = CONTAINER_LINE-CONTENTS
IMPORTING
EX_VALUE = PERS.
WRITE : / 'FIRST NAME', PERS-FIRSTNAME,
/ 'LAST NAME', PERS-LASTNAME,
/ 'AGE' , PERS-AGE.
ULINE.
WHEN 'A'.
CALL METHOD CL_ABAP_CONTAINER_UTILITIES=>READ_CONTAINER_C
EXPORTING
IM_CONTAINER = CONTAINER_LINE-CONTENTS
IMPORTING
EX_VALUE = ADDR.
WRITE : / 'Street' , ADDR-STREET,
/ 'city', ADDR-CITY,
/ 'postal code', ADDR-CODE,
/ 'country', ADDR-COUNTRY.
ULINE.
ENDCASE.
ENDLOOP.
ENDFORM. " WRITE_TABLE