3 Ekim 2024 Perşembe

ABAP Get BLOB URL binary data

 BLOB Url olarak verilen bir link'den SAP sisteminize veri alma işlemine ihtiyacınız olabilir.

Verilen BLOB Url excel,word,csv,txt,img gibi formatlar da olabilir.

Verilen BLOB url link için basit bir uygulama ile link içeriğine erişebilirsiniz.

Örnek:

Blob URL:

https://test.blob.test/test/43f9/20240903Arc-GENAL 20 C4 B0 C3 87 C4 B0N.xlsx

Verilen Blob URL bir excel dosyası generate ederek binary data olarak dönüş yapacak bir http post request gönderelim.

****Create the HTTP client

  TRY.
      CALL METHOD cl_http_client=>create_by_url
        EXPORTING
          url    = blob_url
        IMPORTING
          client client
        EXCEPTIONS
          OTHERS 1.

      client->send).
      client->receive).

      res_doc client->response->get_data).

      client->close).
    CATCH cx_root.
*      WRITE: / 'HTTP Connection error:  
  ENDTRY.


response olarak dönen veri seti binary ve string veri seti şeklinde tek satır olarak dönmekte.Excel formata çevirmek için solix_tab çevirerek internal tab çeviriyoruz.

    data lt_records       TYPE solix_tab.

*  "convert binary data to xstring
  CALL METHOD cl_bcs_convert=>xstring_to_solix(
    EXPORTING
      iv_xstring res_doc
    RECEIVING
      et_solix   lt_records ).


Solix_tab ile internal table çevrilen binary listesi xtring olarak tekrar çevrilerek excel bilgisi için ön hazırlık tamamlanmış olmakta.

data: lv_headerxstring TYPE xstring,
      lv_filelength    TYPE i.

 lv_filelength xstrlenres_doc ).
  CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
    EXPORTING
      input_length lv_filelength
    IMPORTING
      buffer       lv_headerxstring
    TABLES
      binary_tab   lt_records
    EXCEPTIONS
      failed       1
      OTHERS       2.

  IF sy-subrc <> 0.
    "Implement suitable error handling here
  ENDIF.


excel format çevrilerek,excel içeriği alınmakta

DATA lo_excel_ref TYPE REF TO cl_fdt_xl_spreadsheet .
  lv_filename url.
  TRY .
      lo_excel_ref NEW cl_fdt_xl_spreadsheet(
                              document_name lv_filename
                              xdocument     lv_headerxstring .
    CATCH cx_fdt_excel_core.
      "Implement suitable error handling here
      EXIT.
  ENDTRY .

  "Get List of Worksheets
  lo_excel_ref->if_fdt_doc_spreadsheet~get_worksheet_names(
    IMPORTING
      worksheet_names DATA(lt_worksheets).

  IF NOT lt_worksheets IS INITIAL.
    READ TABLE lt_worksheets INTO DATA(lv_woksheetnameINDE1.

    DATA(lo_data_reflo_excel_ref->if_fdt_doc_spreadsheet~get_itab_from_worksheet(
                                             lv_woksheetname ).
    "now you have excel work sheet data in dyanmic internal table
    ASSIGN lo_data_ref->TO <gt_data>.
  ENDIF.