0

I have to do Batch program for 3 different info types (0014,0015,2010).

First step, I have a parameter that is reading the .xls file in a selection screen and 3 different radio buttons for each info type. I want to display a different ALV as when I execute the program with selected radio button. For example, I want to see 0014 if I selected 0014's radio button. The same situation for others.

I can do what I want with one way. That's way is using Perform which have parameters tables and using.

But I cannot do it with OO ABAP. It means using SALV and CLASS/Method style. Anyone can guide me?

*------------DEFINITION--------

class lcl_report definition.

  public section.
    types: begin of ty_list_14,
             pernr(8)     type c,
             begda(10)    type c,
             endda(10)    type c,
             lgart(5)     type c,
             betrg(9)     type c,
             anzhl        type i,
             message(200) type c,
             durum(5)     type c,
           end of ty_list_14.
    data: gt_list_14 type standard table of ty_list_14,
          gs_list_14 like line of gt_list_14.

    methods:
      check_filename,
      file_operations,
      display_alv.

  private section.
    data: mo_alv  type ref to cl_salv_table.

    data: gt_rows type salv_t_row,
          gs_rows type i.

    data: it_raw type truxs_t_text_data.

    data: v_strln   type i,
          offset    type i,
          extension type string.

    data: i_0014       type table of p0014 initial size 1,
          w_0014       type p0014,
          l_bapireturn type bapireturn1.

    data: filename type string.

    methods:
      create_alv,
      selection_rows,
      alv_properties,
      upload_file,
      create_record_i0014.

    methods :
      on_user_command for event added_function of cl_salv_events
        importing e_salv_function.

endclass.

*------------IMPLEMENTATION--------

class lcl_report implementation.

  method display_alv.
    me->create_alv( ).
    me->selection_rows( ).
    me->alv_properties( ).
  endmethod.

  method file_operations.
    me->upload_file( ).
  endmethod.

  method create_alv.

    data: lo_events type ref to cl_salv_events_table.
    try.
        cl_salv_table=>factory(
          importing
            r_salv_table   = mo_alv
          changing
            t_table        = gt_list_14[]

        ).

      catch cx_salv_msg.
    endtry.

    lo_events = mo_alv->get_event( ).
    set handler go_report->on_user_command for lo_events.

 mo_alv->display( ).
  endmethod.
  method selection_rows .

    data: lo_selection type ref to cl_salv_selections.

    try.
        "Soldan seçim kutularını ekrana getirir.
        lo_selection = mo_alv->get_selections( ).
        lo_selection->set_selection_mode( if_salv_c_selection_mode=>row_column ).

      catch cx_salv_not_found.
    endtry.
  endmethod.
  method check_filename.
    v_strln = strlen( p_file ).

    if v_strln le 4.
      message text-003 type 'E'.
    else.
      offset = v_strln - 1.
      do v_strln times.
        if p_file+offset(1) eq '.'.
          extension = p_file+offset.
          shift extension left deleting leading '.'.
          exit.
        endif.
        subtract 1 from offset.
      enddo.
      if extension ne 'xls'  and
         extension ne 'XLS'  and
         extension ne 'xlsx' and
         extension ne 'XLSX' and
         extension ne 'txt'  and
         extension ne 'TXT'.
        message text-003 type 'E'.
      endif.
    endif.
  endmethod.
  
  method create_record_i0014.

    data: lv_begda type begda,  
          lv_endda type endda.  

    loop at gt_rows into gs_rows.
      read table gt_list_14 into gs_list_14 index gs_rows.

      call function 'CONVERSION_EXIT_ALPHA_INPUT'
        exporting
          input  = gs_list_14-pernr
        importing
          output = gs_list_14-pernr.

      call function 'CONVERSION_EXIT_QNTY1_INPUT'
        exporting
          input  = gs_list_14-betrg
        importing
          output = gs_list_14-betrg.


      clear: lv_begda, lv_endda.
      
      concatenate gs_list_14-begda+6(4) 
                  gs_list_14-begda+3(2) 
                  gs_list_14-begda(2)   
                  into lv_begda.
      concatenate gs_list_14-endda+6(4)
                  gs_list_14-endda+3(2)
                  gs_list_14-endda(2)
                  into lv_endda.
  
      move-corresponding gs_list_14 to w_0014.

      w_0014-infty = '0014'.
      w_0014-begda = lv_begda.
      w_0014-endda = lv_endda.
      w_0014-lgart = gs_list_14-lgart.
      w_0014-betrg = gs_list_14-betrg.
      w_0014-anzhl = gs_list_14-anzhl.
      append w_0014 to i_0014.

      call function 'BAPI_EMPLOYEE_ENQUEUE'
        exporting
          number = w_0014-pernr
        importing
          return = l_bapireturn.

      call function 'HR_INFOTYPE_OPERATION'
        exporting
          infty     = '0014'
          number    = w_0014-pernr
          record    = w_0014
          operation = 'INS'
        importing
          return    = l_bapireturn.
     
      gs_list_14-message = l_bapireturn-message.
     
      if l_bapireturn-type eq 'E'.
        gs_list_14-durum = '@5C@'.
      elseif l_bapireturn-type eq 'W'.
        gs_list_14-durum = '@5D@'.
      elseif l_bapireturn-type eq 'S' or
             l_bapireturn-type is initial.
        gs_list_14-durum = '@5B@'.
        gs_list_14-message = text-033.
      endif.
      
      call function 'BAPI_EMPLOYEE_DEQUEUE'
        exporting
          number = w_0014-pernr
        importing
          return = l_bapireturn.
      
      modify gt_list_14 from gs_list_14 index gs_rows.
      clear: gs_list_14, w_0014.
      refresh i_0014.
    endloop.

  endmethod.
  method on_user_command.
    data: lo_selection type ref to cl_salv_selections.
    
    lo_selection = mo_alv->get_selections( ).
    gt_rows = lo_selection->get_selected_rows( ).

    case e_salv_function.
      when '&AKTAR'.
        me->create_record_i0014( ).
    endcase.

    mo_alv->refresh( ).
  endmethod.
endclass.
Sandra Rossi
  • 11,934
  • 5
  • 22
  • 48
jesuismert
  • 43
  • 1
  • 7
  • I guess using Importing, Exporting parameters can fix it in Method. But I could not find sample what I want. – jesuismert Dec 13 '21 at 12:28
  • 1
    what is you problem? you want to pass `i_0014` table into grid and display it? what difficulties do you have with that? – Suncatcher Dec 13 '21 at 13:17

1 Answers1

1

You need create a field-symbol like Excel table structure and set this field-symbol in the SALV.

See this post to know how to create the field-symbol.

Create a structure from a dynamically assigned <itab>

Best regards.

Sebastian