Do.

[ABAP] ALV F4에서 필드 여러개 받아야 할 경우 본문

SAP/ABAP

[ABAP] ALV F4에서 필드 여러개 받아야 할 경우

성공보다는 가치를.. 2022. 12. 5. 13:07
728x90

ALV에서 F4를 호출하고, 선택 시 여러개 필드에 선택한 값을 적용해야 할 경우 

 


  DATA:
    lt_mapping TYPE STANDARD TABLE OF dselc,
    lt_return  TYPE TABLE OF ddshretval.

  DATA:
    lv_field TYPE dfies-fieldname.

  FIELD-SYMBOLS: <lt_f4>  TYPE STANDARD TABLE,
                 <lt_ret> TYPE lvc_t_modi.

  CASE pr_sender.
    WHEN gr_grid1.
      CASE pv_fieldname.
        WHEN 'LIFNR'.

          lv_field = pv_fieldname.

          lt_mapping = VALUE #( ( fldname = 'F0001' dyfldname = 'LIFNR' )
                                ( fldname = 'F0002' dyfldname = 'NAME1' )
                                ( fldname = 'F0003' dyfldname = 'KTOKK' ) ).

          "-- Get Lifnr
          SELECT DISTINCT lifnr, name1, ktokk
            FROM lfa1
            INTO TABLE @DATA(lt_lifnr)
           WHERE ktokk IN @so_ktokk.

          ASSIGN lt_lifnr TO <lt_f4>.

      ENDCASE.

    WHEN OTHERS.
  ENDCASE.

  IF <lt_f4> IS ASSIGNED AND <lt_f4> IS NOT INITIAL..

    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
      EXPORTING
        retfield        = lv_field
        dynpprog        = sy-repid
        dynpnr          = sy-dynnr
        value_org       = 'S'
      TABLES
        value_tab       = <lt_f4>
        return_tab      = lt_return
        dynpfld_mapping = lt_mapping
      EXCEPTIONS
        parameter_error = 1
        no_values_found = 2
        OTHERS          = 3.

    IF sy-subrc = 0.

      "-- Set Fields
      ASSIGN pr_event_data->m_data->* TO <lt_ret>.
      LOOP AT lt_mapping INTO DATA(ls_mapping).

        DATA(ls_return) = VALUE #( lt_return[ fieldname = ls_mapping-fldname ] OPTIONAL ).
        IF ls_return IS NOT INITIAL.

          <lt_ret> = VALUE #( BASE <lt_ret> ( row_id    = ps_row_no-row_id
                                              fieldname = ls_return-retfield
                                              value     = ls_return-fieldval )
                                             ).
        ENDIF.
      ENDLOOP.

    ENDIF.
  ENDIF.

  pr_event_data->m_event_handled = 'X'.
728x90

'SAP > ABAP' 카테고리의 다른 글

[ABAP] REDUCE 문  (0) 2023.04.17
[ABAP] 병렬처리 예제  (0) 2023.01.03
[ABAP] Fieldcatlog Style  (0) 2022.12.02
[HANA] For All Entries의 사용  (0) 2022.11.04
HANA에서 Smartform 사용 하는 법  (0) 2022.10.14