İlk yazımızda veriyi call transformation kullanarak xml’e dönüştürtürmüştük. ikinci yazımızda ise xml’i xslt_tool işlem kodu kullanarak nasıl tasarlarız buna basit olarak değindik. Bu yazımızda ise veriyi cluster tabloya sıkıştırılmış halde nasıl yazarız; yazılan bu veriyi cluster tablodan nasıl okur ve görüntüleriz, buna yine basit bir örnekle bakacağız.

Serinin son yazısı olan bu örneği incelemeden önceki iki yazıya göz atmakta fayda var. Sonrasında cluster tablomuzu oluşturup, daha önce kullandığımız abap programını buna uygun revize ederek tekrardan kullanacağız.

ilk adım olarak se11 işlem kodundan aşağıdaki cluster tablo yapımızı oluşturuyoruz.

program giriş ekranı

Z_STLOG_NET_008

*&---------------------------------------------------------------------*
*& Report Z_STLOG_NET_008
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT z_stlog_net_008.

INCLUDE z_stlog_net_008_def.
INCLUDE z_stlog_net_008_imp.

START-OF-SELECTION .

  NEW lcl_main( )->get_data( )->serialization( ) .

Z_STLOG_NET_008_DEF

*&---------------------------------------------------------------------*
*&  Include           Z_STLOG_NET_008_DEF
*&---------------------------------------------------------------------*
CLASS lcl_main DEFINITION CREATE PUBLIC .

  PUBLIC SECTION .

    DATA          :
      gs_stlognet_s3 TYPE zstlognet_s3,
      gv_xml_out     TYPE xstring,
      gv_clusid      TYPE char100 .
      .

    METHODS       :
      constructor   ,
      get_data      RETURNING VALUE(rv_ref) TYPE REF TO lcl_main,
      serialization RETURNING VALUE(rv_ref) TYPE REF TO lcl_main,
      disp_xml_data RETURNING VALUE(rv_ref) TYPE REF TO lcl_main,
      set,
      get
      .

ENDCLASS .


SELECTION-SCREEN BEGIN OF BLOCK blck0 WITH FRAME TITLE TEXT-001  .
PARAMETERS : rdbx RADIOBUTTON GROUP rgx USER-COMMAND usr,
             rdby RADIOBUTTON GROUP rgx.
SELECTION-SCREEN END OF BLOCK  blck0 .

Z_STLOG_NET_008_IMP

*&---------------------------------------------------------------------*
*&  Include           Z_STLOG_NET_008_IMP
*&---------------------------------------------------------------------*

CLASS lcl_main IMPLEMENTATION.

  METHOD constructor .
    gv_clusid = |ID0001| .
  ENDMETHOD .

  METHOD get_data .

    gs_stlognet_s3 = VALUE #( header-personid = '123'
                              header-persname = 'Eleman 1'
                              header-descript = 'Test'
                              detail = VALUE #( ( iban = 'TR12345678901234'
                                                  idate = sy-datum
                                                  idescription = 'A bankasına eft' )
                                                ( iban = 'TR98765432109876'
                                                  idate = sy-datum
                                                  idescription = 'B bankasına eft'
                                                  )
                                               )
                             ) .

    rv_ref = me .
  ENDMETHOD .

  METHOD serialization .

    TRY.
        CALL TRANSFORMATION zstlognet_xslt1
                     SOURCE mainroot = gs_stlognet_s3
                 RESULT XML gv_xml_out .
      CATCH cx_root INTO DATA(lo_root) .
        MESSAGE lo_root->get_text( ) TYPE 'E' .
    ENDTRY.

    CASE abap_true .
      WHEN rdbx . "kaydet
        set( ).
      WHEN rdby .  "göster
        get( ).
    ENDCASE.

    rv_ref = me .
  ENDMETHOD .

  METHOD disp_xml_data .

    TRY .
        CALL TRANSFORMATION zstlognet_xslt2
                SOURCE XML gv_xml_out "
                RESULT XML DATA(v_xout) .
      CATCH cx_root INTO DATA(lo_root).
        MESSAGE lo_root->get_text( ) TYPE 'E' .
    ENDTRY.

    cl_bcs_convert=>xstring_to_string(
      EXPORTING
        iv_xstr   = v_xout
        iv_cp     = '4110'  " SAP character set identification
      RECEIVING
        rv_string = DATA(v_html)
    ).

    cl_abap_browser=>show_html(
      EXPORTING
      size         = cl_abap_browser=>xlarge   " Size (S,M.L,XL)
      html_string  = v_html  " HTML String
      printing     = abap_true
      format       = cl_abap_browser=>landscape
    ).

    rv_ref = me .
  ENDMETHOD .
  METHOD set .

    "veriyi cluster tabloya yazmadan önce zipliyoruz
    DATA(lc_abap_zip) = NEW cl_abap_zip( ) .
    lc_abap_zip->add(
      EXPORTING
        name    = CONV #( gv_clusid )      " Name (Case-Sensitive)
        content = gv_xml_out
    ).

    DATA(gv_zip_xstr) = lc_abap_zip->save( ).

    DATA(s_zstlognet_t1) = VALUE zstlognet_t1( aedat = sy-datum
                                               usera = sy-uname
                                               pgmid = sy-cprog
                                               uzeit = sy-uzeit ) .

    "cluster tabloya sıkıştırılmış hali yazılıyor...
    EXPORT xml FROM gv_zip_xstr TO DATABASE zstlognet_t1(xm) ID gv_clusid FROM s_zstlognet_t1 .

    MESSAGE 'Success' TYPE 'S' .

  ENDMETHOD.

  METHOD get.
    DATA lv_xml_str    TYPE xstring .
    DATA lv_unzip_data TYPE xstring .

    "cluster tablodan veri alınıyor..
    IMPORT xml TO lv_xml_str FROM DATABASE zstlognet_t1(xm) ID gv_clusid.

    "zipli veri açılıyor..
    DATA(lc_abap_zip) = NEW cl_abap_zip( ) .
    lc_abap_zip->load(
     EXPORTING
       zip             = lv_xml_str
     EXCEPTIONS
       zip_parse_error = 1
       OTHERS          = 2
   ).
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

    lc_abap_zip->get(
       EXPORTING
         name                    = CONV #( gv_clusid )    " Name (Case-Sensitive)
*        index                   = 0    " Either Name or Index
       IMPORTING
         content                 = lv_unzip_data    " Contents
       EXCEPTIONS
         zip_index_error         = 1
         zip_decompression_error = 2
         OTHERS                  = 3
     ).
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

    cl_abap_browser=>show_xml( xml_xstring = lv_unzip_data printing = abap_true ) .

  ENDMETHOD.

ENDCLASS .

2+