Wednesday, 25 September 2024

SAP ABAP - PDF Viewer From Application Server Directory

 


AL11



REPORT ysap_pdf_viewer.
DATA : lt_data TYPE TABLE OF x255.
DATA : wa_line TYPE x255.
DATA: lo_docking_container TYPE REF TO cl_gui_docking_container.
DATA: lo_html    TYPE REF TO cl_gui_html_viewer.
DATA: lv_url TYPE char255.
DATA: ok_code(20).
DATA filename TYPE string.
PARAMETERS fname TYPE localfile.
** Selection screen value request
AT SELECTION-SCREEN ON VALUE-REQUEST FOR fname.
  CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
    EXPORTING
      static    = 'X'
    CHANGING
      file_name = fname.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.

START-OF-SELECTION.

  filename = '/usr/sap/attachment/'. "AL11 Directory
  filename = |{ filename }{ fname }|.
* Read PDF File
  PERFORM read_file.
* Display to screen
  PERFORM display_pdf.
*&---------------------------------------------------------------------*
*&      Form  read_file
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM read_file.
  fname = filename.
  OPEN DATASET fname FOR INPUT IN BINARY MODE.
  IF sy-subrc = 0.
    DO.
      READ DATASET fname INTO wa_line.
      IF sy-subrc = 0.
        APPEND wa_line TO lt_data.
      ELSE.
        APPEND wa_line TO lt_data.
        EXIT.
      ENDIF.
    ENDDO.
  ENDIF.
ENDFORM.                    "read_file

*&---------------------------------------------------------------------*
*&      Form  display_pdf
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM display_pdf.
  IF NOT lt_data IS INITIAL.
    CALL SCREEN 100.
  ELSE.
    WRITE :/ 'No data to display'.
  ENDIF.
ENDFORM.                    "display_pdf
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'MAIN'.
  CLEAR ok_code.
  IF NOT ( lo_docking_container IS INITIAL ).
    CALL METHOD lo_docking_container->free
      EXCEPTIONS
        cntl_error        = 1
        cntl_system_error = 2
        OTHERS            = 3.
  ENDIF.
  IF NOT ( lo_html IS INITIAL ).
    CALL METHOD lo_html->free
      EXCEPTIONS
        cntl_error        = 1
        cntl_system_error = 2
        OTHERS            = 3.
  ENDIF.
  CREATE OBJECT lo_docking_container
    EXPORTING
      repid     = sy-repid
      dynnr     = sy-dynnr
      extension = 5000.
  CREATE OBJECT lo_html
    EXPORTING
      parent = lo_docking_container.
*
* Load the HTML
  lo_html->load_data(
  EXPORTING
    type         = 'application'
    subtype      = 'pdf'
  IMPORTING
    assigned_url         = lv_url
  CHANGING
    data_table           = lt_data
  EXCEPTIONS
    dp_invalid_parameter = 1
    dp_error_general     = 2
    cntl_error           = 3
    OTHERS               = 4 ).
* Show it
  lo_html->show_url( url = lv_url  in_place = 'X' ).
ENDMODULE.                 " STATUS_0100  OUTPUT

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  CASE sy-ucomm.
    WHEN 'BACK' OR 'EXIT' OR 'CANC'.
      IF NOT ( lo_docking_container IS INITIAL ).
        CALL METHOD lo_docking_container->free
          EXCEPTIONS
            cntl_error        = 1
            cntl_system_error = 2
            OTHERS            = 3.
      ENDIF.
      IF NOT ( lo_html IS INITIAL ).
        CALL METHOD lo_html->free
          EXCEPTIONS
            cntl_error        = 1
            cntl_system_error = 2
            OTHERS            = 3.
      ENDIF.
      leave TO SCREEN 0.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT



Monday, 23 September 2024

SAP ABAP - Upload File to OneDrive Folder

 


REPORT yupload_file.
** Data Declarations
DATA: gv_filename    TYPE string,
      lt_data_tab    TYPE TABLE OF x255,
      lv_bin_size    TYPE i,
      lv_file        TYPE string,
      e_filenamefull TYPE string,
      e_filename     TYPE string,
      e_extension    TYPE string.

DATA:
  lv_e_pathname TYPE rstxtlg, "
  lv_i_filepath TYPE rsfilenm, "
  lv_e_filename TYPE rsawbnobjnm. "

** Parameters
PARAMETERS : gv_name TYPE localfile.
** Selection screen value request
AT SELECTION-SCREEN ON VALUE-REQUEST FOR gv_name.
  CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
    EXPORTING
      static    = 'X'
    CHANGING
      file_name = gv_name.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.
START-OF-SELECTION.
  PERFORM upload_attachment.
FORM upload_attachment.
  CLEAR : lv_i_filepath.
  gv_filename   = gv_name.
  lv_i_filepath = gv_name.
** upload the file data from desktop/localfile
  CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      filename   = gv_filename
      filetype   = 'BIN'
    IMPORTING
      filelength = lv_bin_size
    TABLES
      data_tab   = lt_data_tab.

  CALL FUNCTION 'RSDS_SPLIT_PATH_TO_FILENAME'  "split file path in file name and path
    EXPORTING
      i_filepath = lv_i_filepath
    IMPORTING
      e_pathname = lv_e_pathname
      e_filename = lv_e_filename
    . " RSDS_SPLIT_PATH_TO_FILENAME
  CLEAR lv_file.
  DATA(dstpatch) = 'XX:OneDrivePath\'.
  lv_file = |{ dstpatch }{ lv_e_filename }|.

  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      filename                = lv_file
      filetype                = 'BIN'
    TABLES
      data_tab                = lt_data_tab
    EXCEPTIONS
      file_write_error        = 1
      no_batch                = 2
      gui_refuse_filetransfer = 3
      invalid_type            = 4
      no_authority            = 5
      unknown_error           = 6
      header_not_allowed      = 7
      separator_not_allowed   = 8
      filesize_not_allowed    = 9
      header_too_long         = 10
      dp_error_create         = 11
      dp_error_send           = 12
      dp_error_write          = 13
      unknown_dp_error        = 14
      access_denied           = 15
      dp_out_of_memory        = 16
      disk_full               = 17
      dp_timeout              = 18
      file_not_found          = 19
      dataprovider_exception  = 20
      control_flush_error     = 21
      OTHERS                  = 22.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.
  IF sy-subrc = 0.
    WRITE: / 'Successfully uploaded to One Drive'.
  ENDIF.
ENDFORM.







Thursday, 5 September 2024

SAP ABAP - Multiple Header ALV List


REPORT ZALV_LIST_MULTIHEADER NO STANDARD PAGE HEADING.
TYPE-POOLS: slis.
DATA :t_fieldcat TYPE slis_t_fieldcat_alv,
      w_fieldcat TYPE slis_fieldcat_alv,
      layout     TYPE slis_layout_alv,
      t_sort     TYPE slis_t_sortinfo_alv,
      t_event    TYPE slis_t_event WITH HEADER LINE,
      d_repid    LIKE sy-repid,
      d_layout   TYPE slis_layout_alv,
      key        TYPE slis_keyinfo_alv.
TYPES : BEGIN OF ty_data,
          store(50),
          price      TYPE dmbtr,
          quantity   TYPE p,
          total      TYPE dmbtr, "(10) TYPE p DECIMALS 2,
          price2     TYPE dmbtr,
          quantity2  TYPE p,
          total2     TYPE dmbtr, "(10) TYPE p DECIMALS 2,
          curr       TYPE waers,
        END OF ty_data.
DATA : t_data TYPE ty_data OCCURS 0 WITH HEADER LINE.

START-OF-SELECTION.
  PERFORM f_process_data.
  PERFORM f_write_data.
*&---------------------------------------------------------------------*
*&      Form  F_PROCESS_DATA
*&---------------------------------------------------------------------*
FORM f_process_data .
*fill data t_data
  t_data-store = 'Ayam Kampung'.
  t_data-quantity = 30.
  t_data-price = 50000.
  t_data-total = t_data-quantity * t_data-price.
  t_data-quantity2 = 525.
  t_data-price2    = 55000.
  t_data-total2    = t_data-quantity2 * t_data-price2.
  t_data-curr = 'IDR'.
  APPEND t_data.
  t_data-store = 'Ayam Boiler'.
  t_data-quantity = 10.
  t_data-price = 50000.
  t_data-total = t_data-quantity * t_data-price.
  t_data-quantity2 = 55.
  t_data-price2    = 55000.
  t_data-total2    = t_data-quantity2 * t_data-price2.
  t_data-curr = 'IDR'.
  APPEND t_data.
ENDFORM.                    " F_PROCESS_DATA
*&---------------------------------------------------------------------*
*&      Form  F_WRITE_DATA
*&---------------------------------------------------------------------*
FORM f_write_data .
  PERFORM field_catalog.
  PERFORM build_layout.
  PERFORM build_event.
  d_repid = sy-repid.
  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
    EXPORTING
      i_callback_program = d_repid
      is_layout          = d_layout
      i_bypassing_buffer = 'X'
      it_fieldcat        = t_fieldcat
      i_default          = 'X'
      i_save             = 'A'
      it_events          = t_event[]
      it_sort            = t_sort
    TABLES
      t_outtab           = t_data[]
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.
ENDFORM.                    " F_WRITE_DATA
*&---------------------------------------------------------------------*
*&      Form  FIELD_CATALOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM field_catalog .
  PERFORM f_fieldcats USING :
        'STORE'  'STORE'       '50' ''  ''     ''  ''  '',
        'QUANTITY' 'QUANTITY'  '15' ''  ''     ''  ''  '',
        'PRICE'  'PRICE'       '15' ''  'CURR'     ''  ''  '',
        'TOTAL'  'TOTAL'       '20' '' 'CURR'     ''  ''  '',
        'QUANTITY2' 'QUANTITY2'  '15' ''  ''     ''  ''  '',
        'PRICE2'  'PRICE2'       '15' ''  'CURR'     ''  ''  '',
        'TOTAL2'  'TOTAL2'       '20' '' 'CURR'     ''  ''  ''.
ENDFORM.                    " FIELD_CATALOG
*&---------------------------------------------------------------------*
*&      Form  F_FIELDCATS
*&---------------------------------------------------------------------*
FORM f_fieldcats USING fu_fname
      fu_text
      fu_len
      fu_sum
      fu_curr
      fu_spot
      fu_out
      fu_sign.
  DATA : lt_fieldcat TYPE slis_fieldcat_alv.
  lt_fieldcat-fieldname      = fu_fname.  "field name
  lt_fieldcat-seltext_l      = lt_fieldcat-seltext_m =  "text
  lt_fieldcat-seltext_s      = fu_text.
  lt_fieldcat-reptext_ddic   = fu_text.
  lt_fieldcat-outputlen      = fu_len.  "text length
  lt_fieldcat-do_sum         = fu_sum.  "summing
  lt_fieldcat-cfieldname     = fu_curr. "currency
  lt_fieldcat-hotspot        = fu_spot.
  lt_fieldcat-no_out         = fu_out.
  lt_fieldcat-no_sign        = fu_sign.
  APPEND lt_fieldcat TO t_fieldcat.
  CLEAR: lt_fieldcat.
ENDFORM.                    " F_FIELDCATS
*&---------------------------------------------------------------------*
*&      Form  BUILD_LAYOUT
*&---------------------------------------------------------------------*
FORM build_layout .
  d_layout-colwidth_optimize = ''.
  d_layout-zebra = 'X'.
  d_layout-no_colhead         = 'X'. "space.
ENDFORM.                    " BUILD_LAYOUT
*&---------------------------------------------------------------------*
*&      Form  BUILD_EVENT
*&---------------------------------------------------------------------*
FORM build_event .
  t_event-form = 'TOP_PAGE'.
  t_event-name = 'TOP_OF_PAGE'.
  APPEND t_event.
ENDFORM.                    " BUILD_EVENT
*&---------------------------------------------------------------------*
*&      Form  top_of_page
*&---------------------------------------------------------------------*
FORM top_page.
  ULINE (295) .
  FORMAT COLOR 1 .
  WRITE: / sy-vline, (48) '' CENTERED,
  sy-vline, (50) 'Current Period' CENTERED,
  sy-vline, (50) 'Ytd Period' CENTERED,
  sy-vline.
*  ULINE (295) .
  WRITE: / sy-vline, (48) ' ' CENTERED,
  sy-vline, (13) 'Quantity' CENTERED,
  sy-vline, (13) 'per Unit' CENTERED,
  sy-vline, (18) 'Total' CENTERED,
  sy-vline, (13) 'Quantity' CENTERED,
  sy-vline, (13) 'per Unit' CENTERED,
  sy-vline, (18) 'Total' CENTERED,
  sy-vline.
*  ULINE (295) .
  FORMAT COLOR OFF.
ENDFORM.                    "top_of_page

Wednesday, 4 September 2024

SAP ABAP - Display Message in Popup Table




*&---------------------------------------------------------------------*
*& Report YBULK_MESSAGE
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ybulk_message.
TYPES: BEGIN OF ty_message,
         msgid  LIKE sy-msgid,
         msgty  LIKE sy-msgty,
         msgno  LIKE sy-msgno,
         msgv1  LIKE sy-msgv1,
         msgv2  LIKE sy-msgv2,
         msgv3  LIKE sy-msgv3,
         msgv4  LIKE sy-msgv4,
         lineno LIKE mesg-zeile,
       END OF ty_message.
DATA:
  lt_message TYPE TABLE OF ty_message.
START-OF-SELECTION.
  PERFORM display_message.
FORM display_message.
  REFRESH lt_message.
  lt_message = VALUE #(
       ( msgid = 'FB'
         msgty = 'E'
         msgno = '000'
         msgv1 = 'Material XXX01'
         msgv2 = 'Not'
         msgv3 = 'Found'
         msgv4 = ''
         lineno = '1'
       )      "Line 1
      ( msgid = 'FB'
        msgty = 'E'
        msgno = '000'
        msgv1 = 'Plant L001'
        msgv2 = 'Not'
        msgv3 = 'Found'
        msgv4 = ''
        lineno = '2'
       )      "Line 2
  ).
  CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'
    TABLES
      i_message_tab = lt_message.
ENDFORM.




Belajar SAP ABAP RAP

  Belajar SAP ABAP RAP: Pengenalan dan Konsep Dasar Restful ABAP Programming Model Kalau kamu seorang ABAPer yang mulai terjun ke dunia SAP...