REPORT y_test_xml MESSAGE-ID zmc_qm001.


PARAMETERSp_filnam TYPE localfile OBLIGATORY

DEFAULT 'C:\test_xml4.xml'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_filnam.

  DATAl_v_fieldname TYPE dynfnam.

  l_v_fieldname p_filnam.

  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      program_name  syst-cprog
      dynpro_number syst-dynnr
      field_name    l_v_fieldname
    IMPORTING
      file_name     p_filnam.

START-OF-SELECTION.

  TYPES:
    BEGIN OF ty_tab,
      name  TYPE string,
      value TYPE string,
      depth TYPE i,
    END OF ty_tab.

  DATA:
    lcl_xml_doc  TYPE REF TO cl_xml_document,
    v_subrc      TYPE sysubrc,
    v_node       TYPE REF TO if_ixml_node,
    v_child_node TYPE REF TO if_ixml_node,
    v_root       TYPE REF TO if_ixml_node,
    v_iterator   TYPE REF TO if_ixml_node_iterator,
    v_nodemap    TYPE REF TO if_ixml_named_node_map,
    v_count      TYPE i,
    v_index      TYPE i,
    v_attr       TYPE REF TO if_ixml_node,
    v_name       TYPE string,
    v_prefix     TYPE string,
    v_value      TYPE string,
    v_depth      TYPE i,
    v_char       TYPE char2.

  DATA:
    itab TYPE STANDARD TABLE OF ty_tab,
    wa   TYPE ty_tab.

  CREATE OBJECT lcl_xml_doc.

  CALL METHOD lcl_xml_doc->import_from_file
    EXPORTING
      filename p_filnam
    RECEIVING
      retcode  v_subrc.

  CHECK v_subrc 0.

  v_node lcl_xml_doc->m_document.

  CHECK NOT v_node IS INITIAL.

  v_iterator v_node->create_iterator).
  v_node v_iterator->get_next).

  WHILE NOT v_node IS INITIAL.

    CASE v_node->get_type).

      WHEN if_ixml_node=>co_node_element.
        v_name v_node->get_name).
        v_nodemap v_node->get_attributes).
        v_depth v_node->get_depth).

        IF NOT v_nodemap IS INITIAL.
* attributes
          v_count v_nodemap->get_length).

          DO v_count TIMES.
            v_index   sy-index 1.
            v_attr    v_nodemap->get_itemv_index ).
            v_name    v_attr->get_name).
            v_prefix  v_attr->get_namespace_prefix).
            v_value   v_attr->get_value).

*            v_depth   = v_node->get_depth( ).
          ENDDO.

        ENDIF.

      WHEN  if_ixml_node=>co_node_text OR
            if_ixml_node=>co_node_cdata_section.
* text node
        v_value v_node->get_value).
*        v_depth   = v_node->get_depth( ).

        MOVE v_value TO v_char.

        IF v_char <> cl_abap_char_utilities=>cr_lf.
          wa-name   v_name.
          wa-value  v_value.
          wa-depth  v_depth.

          APPEND wa TO itab.
          CLEAR wa.
        ENDIF.

    ENDCASE.
* advance to next node
    v_node v_iterator->get_next).
  ENDWHILE.

  LOOP AT itab INTO wa.
    WRITE/  'Name :'wa-name,  AT 30 'Valeu:'wa-valueAT 60 'Depth:'wa-depth.
  ENDLOOP.

'SAP Program > ABAP' 카테고리의 다른 글

Internal table에서 중복 데이타 찾기  (0) 2017.11.23
Internal table data to xml  (0) 2017.11.22
GUI Status 생성시 덤프 발생하는 경우  (0) 2017.11.20
BADI 생성/조회 t-code  (0) 2017.11.03
BP Relation Table  (0) 2017.11.02

설정

트랙백

댓글

Non Unicode System에서 한글(2Byte 한글)이 포함된 Text File을

Unicode SAP System에서 읽을때 한글을 1Byte 씩 읽게되면 문제가 발생하는데

이를 해결하는 방법



DATA: BEGIN OF  GT_DATA OCCURS 0,

                PONO(6) TYPE C,

                ZEVT_DTTM(19) TYPE C,

                ZBFEVT(3) TYPE C,

                ZAFEVT(3) TYPE C,

                EVT(3) TYPE C,

                ZFAULT(630) TYPE C,

END OF GT_DATA.



DATA: BEGIN OF GT_REC OCCURS 0,

  TDATA(999)    TYPE C,

END OF GT_REC.


DATA:GT_TEST LIKE TABLE OF GT_REC WITH HEADER LINE.


DATA: W_DSN(500)      TYPE C,

      W_FILEPATH(500) TYPE C,

      W_REC(999)      TYPE C,

      W_CNV(999)      TYPE C.




FORM DATA_UPLOAD USING U_FILENM.


  DATA: LW_FILENM TYPE STRING.

  DATA: W_STR TYPE STRING.

  DATA: CP_TAB  TYPE         NLS_LANGU_CP_TAB,

        L_WA    TYPE         NLS_LANGU_CP_LINE,

        CC      TYPE REF TO  CL_NLS_STRUC_CONTAINER.


  DATA:  BEGIN OF HEAD OCCURS 0,

         H_STR(1056),

  END OF HEAD.


  W_DSN = U_FILENM.


  PERFORM OPEN_DATASET.


  IF G_ERR2 IS INITIAL.

    PERFORM READ_DATASET.

  ENDIF.


  PERFORM CLOSE_DATASET.


  IF SY-SUBRC <> 0.

    MESSAGE ID SY-MSGID TYPE 'S' NUMBER SY-MSGNO

            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

  ENDIF.


ENDFORM.                    " DATA_UPLOAD




FORM OPEN_DATASET .


  DATA MESS TYPE STRING.

  CLEAR : G_ERR2.


  OPEN DATASET W_DSN FOR INPUT IN LEGACY TEXT MODE CODE PAGE '8500'.


  IF SY-SUBRC = 8.

    MESSAGE S000 WITH 'File not exists'.

    G_ERR2 = 'X'.

    EXIT.

  ENDIF.


  IF SY-SUBRC <> 0.

    MESSAGE S000 WITH 'File not exists'.

    G_ERR2 = 'X'.

    EXIT.

  ENDIF.


ENDFORM.                    " OPEN_DATASET



FORM READ_DATASET .


  DATA:  CP_TAB      TYPE NLS_LANGU_CP_TAB,

         L_WA        TYPE NLS_LANGU_CP_LINE,

         L_CODEPAGE  TYPE CPCODEPAGE,

         CC          TYPE REF TO CL_NLS_STRUC_CONTAINER,

         L_BUF(999)  TYPE C.


  CLEAR : GT_DATA, GT_DATA[].


* NON UNICODE(한글 2바이트로 인식)

  DO.

    CLEAR W_REC.

    READ DATASET W_DSN INTO W_REC.

    IF SY-SUBRC <> 0.

      EXIT.

    ENDIF.


    GT_REC = W_REC.

    APPEND GT_REC.

  ENDDO.


  LOOP AT GT_REC.

    L_WA-LANGU = '3'.

    L_WA-CODEPAGE = '8500'.

    INSERT L_WA INTO TABLE CP_TAB.

    CC = CL_NLS_STRUC_CONTAINER=>CREATE( CP_TAB = CP_TAB ).

    TRY.

        CALL METHOD CC->STRUC_TO_CONT

          EXPORTING

            STRUC = GT_REC

            LANGU = '3'

          IMPORTING

            CONT  = GT_TEST-TDATA.

      CATCH CX_SY_CONVERSION_CODEPAGE .

      CATCH CX_PARAMETER_INVALID_RANGE .

    ENDTRY.


    CC = CL_NLS_STRUC_CONTAINER=>CREATE( CP_TAB = CP_TAB ).

    TRY.

        CALL METHOD CC->CONT_TO_STRUC

          EXPORTING

            CONT  = GT_TEST-TDATA

            LANGU = '3'

          IMPORTING

            STRUC = GT_DATA.

      CATCH CX_SY_CONVERSION_CODEPAGE .

      CATCH CX_PARAMETER_INVALID_RANGE .

    ENDTRY.


    APPEND GT_DATA.

  ENDLOOP.



ENDFORM.                    " READ_DATASET

설정

트랙백

댓글

GUI Status 생성시 덤프 발생하는 경우 조치 방법


LSMPEF30의 847 Line의


new_adm-actcode 에 X 값을 지워준다.




'SAP Program > ABAP' 카테고리의 다른 글

Internal table data to xml  (0) 2017.11.22
XML을 Internal table로 보내기  (0) 2017.11.22
BADI 생성/조회 t-code  (0) 2017.11.03
BP Relation Table  (0) 2017.11.02
MCHBH LFGJA LFMON Max 값 select  (0) 2017.10.26

설정

트랙백

댓글