Senin, 04 Maret 2013

Get Data from ALV Internal Table

Pada kasus ini kita akan coba mengambil data dari transaksi FBL1N dengan menggunakan RFC.
OK langsung saja kita buat RFCnya. Masuk ke T-Code SE37 lalu kita beri nama ZFBL1N. Sebelumnya jangan lupa untuk membuat Function Grupnya terlebih dahulu. Selanjutnya masuk ke Tab Import dan masukkan parameter seperti gambar di bawah ini :



Lalu masuk ke Tab Export dan isikan seperti pada gambar berikut :



Selanjutnya masuk ke Tab Tables lalu isikan seperti gambar di bawah ini :


 Lalu masuk ke Tab Source code lalu isikan code seperti di bawah ini :

     type-pools : slis.

  data: text          type length 10,
        cek           type length 1,
        lt_selscreen  type table of rsparams with header line .

  clear : cek.
  if p_bukrs is not initial.
    lt_selscreen-selname = 'KD_BUKRS'.
    lt_selscreen-kind = 'S'.
    lt_selscreen-sign = 'I'.
    lt_selscreen-option = 'EQ'.
    lt_selscreen-low = p_bukrs.
    append lt_selscreen. clear lt_selscreen.
  else.
    cek = 'X'.
    t_return-type = 'E'.
    t_return-message = 'Company Code harus diisi'.
  endif.

  if p_bukrs is not initial.
    lt_selscreen-selname = 'KD_LIFNR'.
    lt_selscreen-kind = 'S'.
    lt_selscreen-sign = 'I'.
    lt_selscreen-option = 'EQ'.
    lt_selscreen-low = p_lifnr.
    append lt_selscreen. clear lt_selscreen.
  else.
    cek = 'X'.
    t_return-type = 'E'.
    t_return-message = 'Vendor harus diisi'.
  endif.

  if x_aisel is not initial.
    lt_selscreen-selname = 'X_AISEL'.
    lt_selscreen-kind = 'P'.
    lt_selscreen-sign = 'I'.
    lt_selscreen-option = 'EQ'.
    lt_selscreen-low = x_aisel.
    append lt_selscreen. clear lt_selscreen.
  endif.

  if p_budat_high is not initial.
    lt_selscreen-selname = 'SO_BUDAT'.
    lt_selscreen-kind = 'S'.
    lt_selscreen-sign = 'I'.
    lt_selscreen-option = 'BT'.
    lt_selscreen-low = p_budat_low.
    lt_selscreen-high = p_budat_high.
    append lt_selscreen. clear lt_selscreen.
  elseif p_budat_low is not initial.
    lt_selscreen-selname = 'SO_BUDAT'.
    lt_selscreen-kind = 'S'.
    lt_selscreen-sign = 'I'.
    lt_selscreen-option = 'EQ'.
    lt_selscreen-low = p_budat_low.
    append lt_selscreen. clear lt_selscreen.
  endif.


  if x_norm is initial and
     x_shbv is initial and
     x_merk is initial and
     x_park is initial and
     x_apar is initial.
    cek = 'X'.
    t_return-type = 'E'.
    t_return-message = 'Select at least one item type'.
  else.
    if x_norm is not initial.
      lt_selscreen-selname = 'X_NORM'.
      lt_selscreen-kind = 'P'.
      lt_selscreen-sign = 'I'.
      lt_selscreen-option = 'EQ'.
      lt_selscreen-low = x_norm.
      append lt_selscreen. clear lt_selscreen.
    endif.

    if x_shbv is not initial.
      lt_selscreen-selname = 'X_SHBV'.
      lt_selscreen-kind = 'P'.
      lt_selscreen-sign = 'I'.
      lt_selscreen-option = 'EQ'.
      lt_selscreen-low = x_norm.
      append lt_selscreen. clear lt_selscreen.
    endif.

    if x_merk is not initial.
      lt_selscreen-selname = 'X_MERK'.
      lt_selscreen-kind = 'P'.
      lt_selscreen-sign = 'I'.
      lt_selscreen-option = 'EQ'.
      lt_selscreen-low = x_norm.
      append lt_selscreen. clear lt_selscreen.
    endif.

    if x_park is not initial.
      lt_selscreen-selname = 'X_PARK'.
      lt_selscreen-kind = 'P'.
      lt_selscreen-sign = 'I'.
      lt_selscreen-option = 'EQ'.
      lt_selscreen-low = x_norm.
      append lt_selscreen. clear lt_selscreen.
    endif.

    if x_apar is not initial.
      lt_selscreen-selname = 'X_APAR'.
      lt_selscreen-kind = 'P'.
      lt_selscreen-sign = 'I'.
      lt_selscreen-option = 'EQ'.
      lt_selscreen-low = x_norm.
      append lt_selscreen. clear lt_selscreen.
    endif.
  endif.

  field-symbols < lt_pay_data >   type any table.
  field-symbols : < lt_data >  type any .
  data lr_pay_data type ref to data.

  if cek is initial.
    cl_salv_bs_runtime_info=>set(    exporting display  = abap_false
                                                 metadata = abap_false
                                                 data     = abap_true ).

    submit rfitemap with selection-table lt_selscreen and return.

    try.
        cl_salv_bs_runtime_info=>get_data_ref( importing r_data = lr_pay_data ).

      catch cx_salv_bs_sc_runtime_info.
        message 'Unable to retrieve ALV data' type 'E'.

    endtry.

    cl_salv_bs_runtime_info=>clear_all( ).

    if lr_pay_data is not initial.
      assign lr_pay_data->* to < lt_pay_data >.
      loop at < lt_pay_data > assigning < lt_data >.
        move-corresponding  < lt_data > to t_data  .
        append t_data.
      endloop.
    endif.
  endif.

Tidak ada komentar:

Posting Komentar