Tuesday, November 21, 2023

BDC Upload Program Snippet

 TOP Include : 

TYPE-POOLS : slis.
TYPES : BEGIN OF str_tab,
          "Our Structure/template for upload goes here."
        END OF str_tab.

DATA:   bdcdata LIKE bdcdata    OCCURS 0 WITH HEADER LINE.
DATA:   messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
DATA : wa_messtab TYPE bdcmsgcoll,
       gv_msg     TYPE string.
DATA : it_itab TYPE TABLE OF str_tab.
DATA : it_itab1 TYPE TABLE OF str_tab.
TYPES: BEGIN OF ty_msg,
         DOC TYPE vblnr,
         type   TYPE char1,
         msg    TYPE char255,
       END OF ty_msg.

DATA: lt_msg TYPE TABLE OF ty_msg,
      ls_msg TYPE ty_msg.

DATA: nodata TYPE c VALUE '/'.

DATA: ctu    TYPE c VALUE 'X',
      mode   TYPE c VALUE 'N',
      update TYPE c VALUE 'S'.

DATA: mess     TYPE TABLE OF bdcmsgcoll,
      msg(255) TYPE c.

DATA: wa_layout TYPE lvc_s_layo.
DATA: lv_flag TYPE char1.


 Selection Screen Include :  

SELECTION-SCREEN : BEGIN OF BLOCK sel.

  PARAMETERS: filename LIKE rlgrap-filename OBLIGATORY.
  PARAMETERS: p_srow TYPE i.
  PARAMETERS: p_erow TYPE i.

SELECTION-SCREEN END OF BLOCK sel.


Forms Include :  

FORM file_f4  CHANGING p_filename.

  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      program_name  = syst-cprog
      dynpro_number = syst-dynnr
*
      field_name    = ' '
    IMPORTING
      file_name     = filename.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form tab_file_upd
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM tab_file_upd .

  DATA : it_data TYPE TABLE OF alsmex_tabline.
  DATA : wa_data TYPE alsmex_tabline.
  DATA : wa_itab TYPE str_tab.
  DATA : value TYPE cawao_s_fields-num_val.
  DATA : date1 TYPE d.

  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename                = filename
      i_begin_col             = '1'
      i_begin_row             = p_srow
      i_end_col               = '30'
      i_end_row               = p_erow
    TABLES
      intern                  = it_data
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 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.

  LOOP AT it_data INTO wa_data.

"Get column wise data from excel. 
    CASE wa_data-col.
      WHEN '001'.
        MOVE wa_data-value TO wa_itab-bldat.
      WHEN '002'.
        MOVE wa_data-value TO wa_itab-blart.
      
    ENDCASE.

    AT END OF row.
      APPEND wa_itab TO it_itab1.
      it_itab = it_itab1.
      CLEAR wa_itab.
    ENDAT.

  ENDLOOP.


ENDFORM.
*&---------------------------------------------------------------------*
*& Form bdc_open
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM bdc_open .

  DATA: lv_index     LIKE sy-tabix,
        lv_idx       LIKE sy-tabix,
        lv_fieldname TYPE string.
  DATA: count TYPE i.
  LOOP AT it_itab1 INTO DATA(wa_itab1).
    lv_idx = sy-tabix.
    CLEAR bdcdata.
    REFRESH bdcdata.

"Here goes the BDC extract from SHDB 
perform bdc_dynpro      using 'SAPMF05A' '0110'.
perform bdc_field       using 'BDC_CURSOR'
                              'BSEG-VALUT'.

"End of BDC extract 

    CALL TRANSACTION 'Tcode_name' USING bdcdata
                                MODE mode
                                UPDATE update
                                MESSAGES INTO mess.

      LOOP AT mess ASSIGNING FIELD-SYMBOL(<fs_mess>) WHERE msgtyp = 'E' or msgtyp = 'S'.
      CALL FUNCTION 'FORMAT_MESSAGE'
        EXPORTING
          id        = <fs_mess>-msgid
          lang      = 'EN'
          no        = <fs_mess>-msgnr
          v1        = <fs_mess>-msgv1
          v2        = <fs_mess>-msgv2
          v3        = <fs_mess>-msgv3
          v4        = <fs_mess>-msgv4
        IMPORTING
          msg       = gv_msg
        EXCEPTIONS
          not_found = 1
          OTHERS    = 2.

      ls_msg-doc = lv_idx.
      ls_msg-type = <fs_mess>-msgtyp.
      ls_msg-msg = gv_msg.

      APPEND ls_msg TO lt_msg.
      CLEAR: ls_msg.
      endloop.
      clear mess.

  ENDLOOP.

ENDFORM.

FORM bdc_field USING fnam fval.
  IF fval <> nodata.
    CLEAR bdcdata.
    bdcdata-fnam = fnam.
    bdcdata-fval = fval.
    APPEND bdcdata.
  ENDIF.
ENDFORM.
FORM bdc_dynpro USING program dynpro.
  CLEAR bdcdata.
  bdcdata-program  = program.
  bdcdata-dynpro   = dynpro.
  bdcdata-dynbegin = 'X'.
  APPEND bdcdata.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form display_log
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM display_log .
  wa_layout-cwidth_opt = 'X'.
  wa_layout-zebra = 'X'.

  DATA(lt_fldcat) = VALUE lvc_t_fcat( 

        ( fieldname = 'DOC' coltext = 'ID' tabname = 'LT_MSG' )
        ( fieldname = 'TYPE' coltext = 'Type' tabname = 'LT_MSG' )
        ( fieldname = 'MSG' coltext = 'Message' tabname = 'LT_MSG' ) ).


  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program = sy-repid
*     I_CALLBACK_TOP_OF_PAGE   = ' '
*     I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*     I_CALLBACK_HTML_END_OF_LIST       = ' '
*     I_STRUCTURE_NAME   =
*     I_BACKGROUND_ID    = ' '
*     I_GRID_TITLE       =
*     I_GRID_SETTINGS    =
      is_layout_lvc      = wa_layout
      it_fieldcat_lvc    = lt_fldcat "it_fieldcat
    TABLES
      t_outtab           = lt_msg
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.
ENDFORM.

Main Program :  

REPORT ZBDC_UPLOAD.

INCLUDE ZFI_VEN_ADV_UPLD_TOP.
INCLUDE ZFI_VEN_ADV_UPLD_SEL.
INCLUDE ZFI_VEN_ADV_UPLD_FORM.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR filename.
  PERFORM file_f4 CHANGING filename.

START-OF-SELECTION.
  PERFORM tab_file_upd.
  PERFORM bdc_open.
  PERFORM display_log.


No comments:

Post a Comment

How to Find Implemented BADIs for a Tcode in SAP

  Simple way to find implemented BADI for a TCode in SAP  First We have to find the Package for the transaction. 1.      Go to that par...