ABAP - cl_gui_alv_grid cl_salv_table的各种处理

这篇文章主要是记录一下cl_gui_alv_grid 和 cl_salv_table 两种方式的ALV的字段,事件等的处理

举例,下面这个是用一个screen,显示2个ALV;上面这一个是用alv grid的;下面那一个是用salv去实现的

alv grid 主要涉及:自定义事件(toolbar),下拉列表的值,ALV显示和编辑模式的切换; 字段的显示隐藏等

salv主要涉及:自定义事件(add function); checkbox的处理; 还有当点"Previous Result“这个按钮时,跳出的第3个alv,也是salv的形式,会涉及到怎么用icon表示处理的

第一个screen里的两个ALV

screen的定义:

第三个ALV:

废话不多说,下面直接代码展示:

三个ALV的事件的声明和定义:

解释下这里面的一些参数:

以input结尾的是第一个alv,以contract结尾的是第2个alv,以result结尾的是第3个alv

事件的处理:

事件处理的相关代码:



FORM on_double_click_contract USING row TYPE salv_de_row
                                 column TYPE salv_de_column.

  DATA lv_row TYPE i.

  lv_row = row.
  READ TABLE gt_data ASSIGNING FIELD-SYMBOL(<data>) INDEX lv_row.
  IF <data> IS ASSIGNED.
    SET PARAMETER ID 'RECNNR' FIELD <data>-recnnr.
    SET PARAMETER ID 'BUK'    FIELD gc_bukrs_1000.
    CALL TRANSACTION 'RECN' AND SKIP FIRST SCREEN.
  ENDIF.

ENDFORM.

FORM on_double_click_result USING row TYPE salv_de_row
                                 column TYPE salv_de_column.

  DATA lv_row TYPE i.

  lv_row = row.
  READ TABLE gt_result ASSIGNING FIELD-SYMBOL(<result>) INDEX lv_row.
  IF <result> IS ASSIGNED.
    SET PARAMETER ID 'RECNNR' FIELD <result>-recnnr.
    SET PARAMETER ID 'BUK'    FIELD gc_bukrs_1000.
    CALL TRANSACTION 'RECN' AND SKIP FIRST SCREEN.
  ENDIF.

ENDFORM.

FORM on_link_click_contract USING row TYPE salv_de_row
                               column TYPE salv_de_column.

  DATA lv_row TYPE i.

  lv_row = row.
  READ TABLE gt_data ASSIGNING FIELD-SYMBOL(<data>) INDEX lv_row.
  CHECK sy-subrc = 0.

  IF <data>-selected IS INITIAL.
    <data>-selected = 'X'.
  ELSE.
    CLEAR <data>-selected.
  ENDIF.

  go_salv_contract->refresh( ).

ENDFORM.

FORM on_user_command_contract USING e_salv_function TYPE salv_de_function.

  DATA: lr_selections TYPE REF TO cl_salv_selections,
        lt_rows       TYPE salv_t_row.

  CASE e_salv_function.
    WHEN 'SEL_ALL'.
      LOOP AT gt_data ASSIGNING FIELD-SYMBOL(<data>).
        APPEND sy-tabix TO lt_rows.
        <data>-selected = abap_true.
      ENDLOOP.

      lr_selections = go_salv_contract->get_selections( ).
      lr_selections->set_selected_rows( lt_rows ).
      go_salv_contract->refresh( ).

    WHEN 'DESEL_ALL'.
      LOOP AT gt_data ASSIGNING <data>.
        <data>-selected = ''.
      ENDLOOP.

      CLEAR lt_rows.
      lr_selections = go_salv_contract->get_selections( ).
      lr_selections->set_selected_rows( lt_rows ).
      go_salv_contract->refresh( ).

    WHEN 'CONFIRM'.
      PERFORM on_confirm.
      IF gv_error <> abap_true.
        PERFORM build_alv_200.
      ENDIF.

    WHEN 'SHOW_RES'.
      IF gt_result IS NOT INITIAL.
        PERFORM build_alv_200.
      ELSE.
        CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'
          EXPORTING
            titel        = 'Info!'
            textline1    = 'No previous result list existed'
            start_column = 40
            start_row    = 15.
      ENDIF.

    WHEN OTHERS.
  ENDCASE.

ENDFORM.

FORM on_confirm.

  DATA: lt_selected  TYPE tty_data,
        ls_result    TYPE ty_alv_result,
        lv_conv_date TYPE string,
        lv_year      TYPE string,
        lv_validto   TYPE string,
        ls_add_cond  TYPE ty_add_cond,
        lt_add_cond  TYPE TABLE OF ty_add_cond,
        lt_tmp_cond  TYPE TABLE OF ty_add_cond,
        ls_bapi_cond TYPE bapi_re_condition_datc,
        lt_return     TYPE STANDARD TABLE OF bapiret2,
        lv_errmsg    TYPE string.

  CLEAR gv_error.
  CLEAR: gt_result, gt_add_condition.

  "get selected rows
  lt_selected = gt_data.
  DELETE lt_selected WHERE selected <> abap_true.

  IF lt_selected IS INITIAL.
    gv_error = abap_true.
    CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'
      EXPORTING
        titel        = 'Error Occurred!!!'
        textline1    = 'No entry selected!'
        start_column = 20
        start_row    = 5.
    EXIT.
  ENDIF.

**********************************************************************

  LOOP AT gt_alv_input ASSIGNING FIELD-SYMBOL(<input>).

    LOOP AT lt_selected ASSIGNING FIELD-SYMBOL(<sel>)
      WHERE sgenr = <input>-sgenr
        AND condvalidfrom LE <input>-condvalidfrom
        AND condvalidto GE <input>-condvalidfrom.

      CLEAR: ls_result, ls_add_cond.
      MOVE-CORRESPONDING <sel>   TO ls_result.
      MOVE-CORRESPONDING <input> TO ls_result.

      IF <sel>-calcrule <> <input>-calcrule.
        "Calculation Rule Text
        READ TABLE gt_calcrule_txt ASSIGNING FIELD-SYMBOL(<txt>)
          WITH KEY calcruleext = <input>-calcrule BINARY SEARCH.
        IF sy-subrc = 0.
          CONCATENATE <input>-calcrule '-' <txt>-xmcalcrule INTO ls_result-calcrule_txt.
        ENDIF.
      ENDIF.

      "set Valid To
      CLEAR: lv_conv_date, lv_year, lv_validto.
      lv_conv_date = <input>-condvalidfrom.
      lv_year      = lv_conv_date+0(4) + 1.
      CONDENSE lv_year.
      CONCATENATE lv_year '0331' INTO lv_validto.
      ls_result-condvalidto = lv_validto.
      IF ls_result-condvalidto > <sel>-condvalidto.
        ls_result-condvalidto = <sel>-condvalidto.
      ENDIF.

**********************************************************************

      ls_add_cond-recnnr                   = ls_result-recnnr.
      ls_add_cond-distribution_object_type = 'IM'.
      ls_add_cond-calculation_object_type  = 'IM'.
      ls_add_cond-valid_from               = ls_result-condvalidfrom.
      ls_add_cond-valid_to                 = ls_result-condvalidto.
      ls_add_cond-calculation_object_id    = ls_result-rental_object.
      ls_add_cond-distribution_object_id   = ls_result-rental_object.
      ls_add_cond-currency                 = ls_result-condcurr.
      ls_add_cond-condition_type           = ls_result-condtype.
      ls_add_cond-unit_price               = ls_result-unitprice.
      ls_add_cond-calc_rule                = ls_result-calcrule.
      ls_add_cond-external_purpose         = <sel>-condpurposeext.

      IF ls_add_cond-calc_rule = 'D'.
        ls_add_cond-calc_rule_parameter1     = <sel>-calcrulepara1. "measure type
        ls_add_cond-calc_rule_parameter2     = <sel>-calcrulepara2. "measure unit
      ENDIF.
      ls_add_cond-dist_rule                = <sel>-distrule.
      ls_add_cond-dist_rule_parameter1     = <sel>-distrulepara1.
      ls_add_cond-dist_rule_parameter2     = <sel>-distrulepara2.

      APPEND ls_result   TO gt_result.
      APPEND ls_add_cond TO lt_add_cond.

    ENDLOOP.
  ENDLOOP.

  CHECK lt_add_cond IS NOT INITIAL.

  "handle data on Contract level
  SORT lt_add_cond BY recnnr.
  lt_tmp_cond = lt_add_cond.
  DELETE ADJACENT DUPLICATES FROM lt_tmp_cond COMPARING recnnr.

  "add Conditions to Contract
  LOOP AT lt_tmp_cond ASSIGNING FIELD-SYMBOL(<tmp>).

    CLEAR: gt_add_condition, lt_return, gv_error, lv_errmsg.
    LOOP AT lt_add_cond ASSIGNING FIELD-SYMBOL(<add_cond>) WHERE recnnr = <tmp>-recnnr.
      MOVE-CORRESPONDING <add_cond> TO ls_bapi_cond.
      ls_bapi_cond-change_indicator = 'I'. "Insert
      APPEND ls_bapi_cond TO gt_add_condition.
    ENDLOOP.

    CALL FUNCTION 'BAPI_RE_CN_CHANGE'
      EXPORTING
        compcode       = gc_bukrs_1000
        contractnumber = <tmp>-recnnr
      TABLES
        condition      = gt_add_condition
        return         = lt_return.

    "get error
    SORT lt_return BY message.
    DELETE ADJACENT DUPLICATES FROM lt_return COMPARING message.
    LOOP AT lt_return ASSIGNING FIELD-SYMBOL(<return>) WHERE type = 'E' OR type = 'A'.
      gv_error = abap_true.
      IF lv_errmsg IS NOT INITIAL.
        CONCATENATE lv_errmsg ';' <return>-message INTO lv_errmsg.
      ELSE.
        lv_errmsg = <return>-message.
      ENDIF.
    ENDLOOP.

    IF gv_error <> abap_true.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'.
      LOOP AT gt_result ASSIGNING FIELD-SYMBOL(<result>) WHERE recnnr = <tmp>-recnnr.
        <result>-status = icon_green_light.
      ENDLOOP.
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      LOOP AT gt_result ASSIGNING <result> WHERE recnnr = <tmp>-recnnr.
        <result>-status = icon_red_light.
        <result>-msg    = lv_errmsg.
      ENDLOOP.
    ENDIF.
  ENDLOOP.

  CLEAR gv_error.

ENDFORM.

FORM on_user_command_input USING e_ucomm TYPE sy-ucomm.

  CASE e_ucomm.
    WHEN 'TOOGLE_EDIT'.
      PERFORM toogle_edit_input.

    WHEN 'EXTRACT'.
      PERFORM check_alv_input.
      PERFORM toogle_edit_input.
      PERFORM select_data.
      PERFORM display_alv_contract.

    WHEN OTHERS.
  ENDCASE.

ENDFORM.


FORM on_toolbar_input USING i_object TYPE REF TO cl_alv_event_toolbar_set
                            i_interactive TYPE char01.

  DATA ls_toolbar TYPE stb_button.

  DELETE i_object->mt_toolbar WHERE function = '&DETAIL'
                                 OR function = '&&SEP00'
                                 OR function = '&CHECK'
                                 OR function = '&REFRESH'
                                 OR function = '&&SEP01'
                                 OR function = '&LOCAL&APPEND'
                                 OR function = '&SORT_ASC'
                                 OR function = '&SORT_DSC'
                                 OR function = '&FIND'
                                 OR function = '&FIND_MORE'
                                 OR function = '&MB_FILTER'
                                 OR function = '&&SEP04'
                                 OR function = '&MB_SUM'
                                 OR function = '&MB_SUBTOT'
                                 OR function = '&&SEP05'
                                 OR function = '&PRINT_BACK'
                                 OR function = '&MB_VIEW'
                                 OR function = '&COL0'
                                 OR function = '&&SEP06'
                                 OR function = '&&SEP07'
                                 OR function = '&INFO'.

  APPEND VALUE #( butn_type = 3 function = '&&SEP00' ) TO i_object->mt_toolbar.
  APPEND VALUE #( butn_type = 0 quickinfo = 'Display/Edit' icon = '@0Z@' "ICON_CHANGE'
                  text = 'Display / Edit' function = 'TOOGLE_EDIT') TO i_object->mt_toolbar.

  APPEND VALUE #( butn_type = 3 function = '&&SEP01' ) TO i_object->mt_toolbar.
  APPEND VALUE #( butn_type = 0 quickinfo = 'Extract' icon = '@41@' "ICON_RETRIEVE
                  text = 'Extract Contracts' function = 'EXTRACT') TO i_object->mt_toolbar.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  gv_okcode = ok_code.
  CLEAR ok_code.
  CASE gv_okcode.
    WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
      PERFORM init_variables.
      LEAVE TO SCREEN 0.
    WHEN OTHERS.
  ENDCASE.
ENDMODULE.

**&---------------------------------------------------------------------*
**&      Module  USER_COMMAND_0200  INPUT
**&---------------------------------------------------------------------*
*MODULE user_command_0200 INPUT.
*  gv_okcode = ok_code.
*  CLEAR ok_code.
*  CASE gv_okcode.
*    WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
*      LEAVE TO SCREEN 100.
*    WHEN OTHERS.
*  ENDCASE.
*ENDMODULE.

显示/编辑的切换的处理:

第1个第2个ALV的构建,和事件注册

第3个ALV的构建和事件注册,以及字段处理

这里的STATUS字段,是以icon形式显示的,我只用了两个,一个红,一个绿

第一个ALV的字段处理:

dropdown list的值的处理:

这里引用了宏,因为不想重复写太多代码,所以把宏都给封装到一个INCLUDE里了:

*&---------------------------------------------------------------------*
*& Include ZBC_ALV_FIELDCAT_MACRO
*&---------------------------------------------------------------------*

"隐藏列
DEFINE alv_no_out.
  READ TABLE ct_fieldcat ASSIGNING <fs_fieldcat> WITH KEY fieldname = &1.
  IF <fs_fieldcat> IS ASSIGNED.
    <fs_fieldcat>-no_out = abap_true.
  ENDIF.
END-OF-DEFINITION.

"列不可编辑
DEFINE alv_no_edit.
  READ TABLE ct_fieldcat ASSIGNING <fs_fieldcat> WITH KEY fieldname = &1.
  IF <fs_fieldcat> IS ASSIGNED.
    CLEAR <fs_fieldcat>-edit.
  ENDIF.
END-OF-DEFINITION.

"列可编辑
DEFINE alv_editable.
  READ TABLE ct_fieldcat ASSIGNING <fs_fieldcat> WITH KEY fieldname = &1.
  IF <fs_fieldcat> IS ASSIGNED.
    <fs_fieldcat>-edit = abap_true.
  ENDIF.
END-OF-DEFINITION.


DEFINE alv_outputlen.
  READ TABLE ct_fieldcat ASSIGNING <fs_fieldcat> WITH KEY fieldname = &1.
  IF <fs_fieldcat> IS ASSIGNED.
    <fs_fieldcat>-outputlen = &2.
  ENDIF.
END-OF-DEFINITION.

DEFINE alv_fix_column.
  READ TABLE ct_fieldcat ASSIGNING <fs_fieldcat> WITH KEY fieldname = &1.
  IF <fs_fieldcat> IS ASSIGNED.
    <fs_fieldcat>-fix_column = abap_true.
  ENDIF.
END-OF-DEFINITION.

DEFINE alv_alignment.
  READ TABLE ct_fieldcat ASSIGNING <fs_fieldcat> WITH KEY fieldname = &1.
  IF <fs_fieldcat> IS ASSIGNED.
    <fs_fieldcat>-just = &2.
  ENDIF.
END-OF-DEFINITION.


DEFINE alv_do_sum.
  READ TABLE ct_fieldcat ASSIGNING <fs_fieldcat> WITH KEY fieldname = &1.
  IF <fs_fieldcat> IS ASSIGNED.
    <fs_fieldcat>-do_sum = abap_true.
  ENDIF.
END-OF-DEFINITION.

DEFINE alv_col_text.

  lv_s = &2.
  lv_m = &2.
  lv_l = &2.

  READ TABLE ct_fieldcat ASSIGNING <fs_fieldcat> WITH KEY fieldname = &1.
  IF <fs_fieldcat> IS ASSIGNED.
    <fs_fieldcat>-coltext   = <fs_fieldcat>-scrtext_l = lv_l.
    <fs_fieldcat>-scrtext_m = lv_m.
    <fs_fieldcat>-scrtext_s = lv_s.
  ENDIF.

END-OF-DEFINITION.

*数值字段没有小数点
DEFINE alv_no_decimals.
  READ TABLE ct_fieldcat ASSIGNING <fs_fieldcat> WITH KEY fieldname = &1.
  IF <fs_fieldcat> IS ASSIGNED.
    <fs_fieldcat>-datatype   = 'DEC'.
    <fs_fieldcat>-decimals   = '0'.
    <fs_fieldcat>-decimals_o = '0'.
  ENDIF.
END-OF-DEFINITION.


DEFINE alv_set_dropdown.
  READ TABLE ct_fieldcat ASSIGNING <fs_fieldcat> WITH KEY fieldname = &1.
  IF <fs_fieldcat> IS ASSIGNED.
    <fs_fieldcat>-drdn_hndl = &2.
  ENDIF.
END-OF-DEFINITION.


*在第几列输出
DEFINE alv_pos.
  READ TABLE ct_fieldcat ASSIGNING <fs_fieldcat> WITH KEY fieldname = &1.
  IF <fs_fieldcat> IS ASSIGNED.
    <fs_fieldcat>-col_pos = &2.
  ENDIF.
END-OF-DEFINITION.


DEFINE alv_no_domain_check.
  READ TABLE ct_fieldcat ASSIGNING <fs_fieldcat> WITH KEY fieldname = &1.
  IF <fs_fieldcat> IS ASSIGNED.
    <fs_fieldcat>-valexi = '!'.
  ENDIF.
END-OF-DEFINITION.


DEFINE alv_emphasize.
  READ TABLE ct_fieldcat ASSIGNING <fs_fieldcat> WITH KEY fieldname = &1.
  IF <fs_fieldcat> IS ASSIGNED.
    <fs_fieldcat>-emphasize = &2.
  ENDIF.
END-OF-DEFINITION.

第2个ALV的字段 处理

代码如下:


FORM init_alv_input.

  IF gt_alv_input IS INITIAL.
    DO 3 TIMES.
      APPEND INITIAL LINE TO gt_alv_input.
    ENDDO.
  ENDIF.

ENDFORM.

FORM toogle_edit_input.

  CHECK gv_error <> abap_true.

  IF gv_alv_editable = abap_true.
    gv_alv_editable      = abap_false.
    gs_layout_input-edit = abap_false.
  ELSE.
    gv_alv_editable      = abap_true.
    gs_layout_input-edit = abap_true.
  ENDIF.

  "refresh ALV table
  IF go_alvgrid_input IS BOUND.
    CALL METHOD go_alvgrid_input->set_table_for_first_display(
      EXPORTING
        is_layout       = gs_layout_input
      CHANGING
        it_outtab       = gt_alv_input
        it_fieldcatalog = gt_fieldcat_input ).
    go_alvgrid_input->refresh_table_display( ).
  ENDIF.

ENDFORM.
 
FORM build_alv_100.

  IF go_cont IS NOT BOUND.

    "Get Container
    CREATE OBJECT go_cont
      EXPORTING
        container_name = 'CONT_100'.

    "Create Splitter
    CREATE OBJECT go_spliter
      EXPORTING
        parent  = go_cont
        rows    = 2
        columns = 1.

**********************************************************************

    "Create Entry Input ALV
    CALL METHOD go_spliter->set_row_height
      EXPORTING
        id     = 1
        height = 11.

    CALL METHOD go_spliter->get_container
      EXPORTING
        row       = 1
        column    = 1
      RECEIVING
        container = go_cont_input.

    CREATE OBJECT go_alvgrid_input
      EXPORTING
        i_parent = go_cont_input.

    "Register Event Handler
    CREATE OBJECT go_handler_input.
    SET HANDLER go_handler_input->on_toolbar_input FOR go_alvgrid_input.
    SET HANDLER go_handler_input->on_user_command_input FOR go_alvgrid_input.

    "set default editable
    gv_alv_editable      = abap_true.
    gs_layout_input-edit = abap_true.
    PERFORM set_dropdown_4_calcrule.
    PERFORM build_fieldcat_input CHANGING gt_fieldcat_input.
    CALL METHOD go_alvgrid_input->set_table_for_first_display(
      EXPORTING
        is_layout       = gs_layout_input
      CHANGING
        it_outtab       = gt_alv_input
        it_fieldcatalog = gt_fieldcat_input ).

**********************************************************************

    "Create Contract List ALV
    CALL METHOD go_spliter->get_container
      EXPORTING
        row       = 2
        column    = 1
      RECEIVING
        container = go_cont_contract.

    TRY.
        CALL METHOD cl_salv_table=>factory(
          EXPORTING
            r_container  = go_cont_contract
          IMPORTING
            r_salv_table = go_salv_contract
          CHANGING
            t_table      = gt_data ).
*            t_table      = gt_contract ).

        "Register Event Handler
        go_salv_events_table = go_salv_contract->get_event( ).
        go_salv_events       = go_salv_contract->get_event( ).
        CREATE OBJECT go_handler_contract.
        SET HANDLER go_handler_contract->on_double_click_contract FOR go_salv_events_table.
        SET HANDLER go_handler_contract->on_link_click_contract   FOR go_salv_events_table.
        SET HANDLER go_handler_contract->on_user_command_contract FOR go_salv_events.
        go_salv_selection = go_salv_contract->get_selections( ).
        go_salv_selection->set_selection_mode( 2 ). "Multiple
        PERFORM build_fieldcat_contract.

      CATCH cx_salv_msg INTO DATA(lo_ex).
    ENDTRY.

  ELSE.
    "refresh ALV table
    IF go_alvgrid_input IS BOUND.
      go_alvgrid_input->refresh_table_display( ).
    ENDIF.
    IF go_salv_contract IS BOUND.
      go_salv_contract->display( ).
    ENDIF.
  ENDIF.

ENDFORM.

FORM build_alv_200.

  DATA lo_functions            TYPE REF TO cl_salv_functions_list.
  DATA lo_functional_settings  TYPE REF TO cl_salv_functional_settings.
  DATA lo_tooltips             TYPE REF TO cl_salv_tooltips.
  DATA lv_value                TYPE lvc_value.
  DATA lo_columns              TYPE REF TO cl_salv_columns.
  DATA lo_column               TYPE REF TO cl_salv_column_table.
  DATA lo_col                  TYPE REF TO cl_salv_column.

  DEFINE hide_field.
    lo_col = lo_columns->get_column( &1 ).
    lo_col->set_visible( if_salv_c_bool_sap=>false ).
  END-OF-DEFINITION.

  DEFINE set_len.
    lo_col = lo_columns->get_column( &1 ).
    lo_col->set_output_length( &2 ).
  END-OF-DEFINITION.

  DEFINE set_medium_txt.
    lo_col = lo_columns->get_column( &1 ).
    lo_col->set_medium_text( &2 ).
  END-OF-DEFINITION.

**********************************************************************
  IF go_salv_result IS NOT BOUND.
    TRY.
        cl_salv_table=>factory(
          IMPORTING
            r_salv_table = go_salv_result
          CHANGING
            t_table      = gt_result ).

        "Register Event Handler
        go_salv_events_table_res = go_salv_result->get_event( ).
        CREATE OBJECT go_handler_result.
        SET HANDLER go_handler_result->on_double_click_result FOR go_salv_events_table_res.

      CATCH cx_salv_msg.                                "#EC NO_HANDLER
    ENDTRY.

    "enable default toolbar
    go_salv_result->get_functions( )->set_all( ).

    TRY.
        "set to display as Icon
        lo_columns = go_salv_result->get_columns( ).
        lo_column ?= lo_columns->get_column( 'STATUS' ).
        lo_column->set_icon( if_salv_c_bool_sap=>true ).

        lo_column->set_long_text( 'Status' ).
        lo_column->set_alignment( if_salv_c_alignment=>centered ).
        lo_column->set_output_length( 10 ).

        hide_field     'CALCRULE'.
        hide_field     'RENTAL_OBJECT'.
        set_len        'XMETXT'         20.
        set_len        'MSG'            50.
        set_len        'UNITPRICE'      16.
        set_len        'CALCRULE_TXT'   25.
        set_medium_txt 'CALCRULE_TXT'   'Formula'.
        set_medium_txt 'MSG'            'Error Message'.

      CATCH cx_salv_not_found.                          "#EC NO_HANDLER
    ENDTRY.

*...Tooltips,
    lo_functional_settings = go_salv_result->get_functional_settings( ).
    lo_tooltips            = lo_functional_settings->get_tooltips( ).

    TRY.
        "when Green
        lv_value = icon_green_light.
        lo_tooltips->add_tooltip(
          type    = cl_salv_tooltip=>c_type_icon
          value   = lv_value
          tooltip = 'Successful' ).                         "#EC NOTEXT

        "when Red
        lv_value = icon_red_light.
        lo_tooltips->add_tooltip(
          type    = cl_salv_tooltip=>c_type_icon
          value   = lv_value
          tooltip = 'Error' ).                              "#EC NOTEXT
      CATCH cx_salv_existing.                           "#EC NO_HANDLER
    ENDTRY.
  ENDIF.

  IF go_salv_result IS BOUND.
    go_salv_result->display( ).
  ENDIF.

ENDFORM.

FORM build_fieldcat_contract.

  DATA lr_columns      TYPE REF TO cl_salv_columns_table.
  DATA lr_col          TYPE REF TO cl_salv_column.
  DATA lo_col_list     TYPE REF TO cl_salv_column_list.
  DATA lv_medium_txt   TYPE scrtext_m.
  DATA lr_ex_notfound  TYPE REF TO cx_salv_not_found.

  DATA: lo_functional_settings TYPE REF TO cl_salv_functional_settings,
        lo_specific_groups     TYPE REF TO cl_salv_specific_groups,
        lv_text                TYPE cl_salv_specific_groups=>y_text.

  DEFINE hide_field.
    lr_col = lr_columns->get_column( &1 ).
    lr_col->set_visible( if_salv_c_bool_sap=>false ).
  END-OF-DEFINITION.

  DEFINE set_len.
    lr_col = lr_columns->get_column( &1 ).
    lr_col->set_output_length( &2 ).
  END-OF-DEFINITION.

  DEFINE set_medium_txt.
    lr_col = lr_columns->get_column( &1 ).
    lr_col->set_medium_text( &2 ).
  END-OF-DEFINITION.

  DEFINE add_function.
    go_salv_contract->get_functions( )->add_function(
        EXPORTING
          name     = &1
          icon     = &3
          text     = &2
          tooltip  = &2
          position = if_salv_c_function_position=>right_of_salv_functions ).
  END-OF-DEFINITION.

**********************************************************************
  TRY.
      lr_columns = go_salv_contract->get_columns( ).
      go_salv_contract->get_functions( )->set_all( ).

      lo_functional_settings = go_salv_contract->get_functional_settings( ).
      lo_specific_groups = lo_functional_settings->get_specific_groups( ).

**********************************************************************
* Group for column which start with HSL, as group ID GRP1
      lv_text = 'Contract'.
      lo_specific_groups->add_specific_group( id = 'GRP1' text = lv_text ).

**********************************************************************
      "add custom function
      add_function 'SEL_ALL'   'Select All'      '@4B@'. "ICON_SELECT_ALL
      add_function 'DESEL_ALL' 'Deselect All'    '@4D@'. "ICON_DESELECT_ALL
      add_function 'CONFIRM'   'Confirm to Add'  '@5Y@'. "ICON_RELEASE
      add_function 'SHOW_RES'  'Previous Result' '@10@'. "ICON_DISPLAY

**********************************************************************
      "add selection field as checkbox
      lo_col_list ?= lr_columns->get_column( 'SELECTED' ).
      lo_col_list->set_cell_type( if_salv_c_cell_type=>checkbox_hotspot ).

      "Group Column
      lo_col_list ?= lr_columns->get_column( 'RECNNR' ).
      lo_col_list->set_specific_group( id = 'GRP1' ).
      lo_col_list ?= lr_columns->get_column( 'RECNBEG' ).
      lo_col_list->set_specific_group( id = 'GRP1' ).
      lo_col_list ?= lr_columns->get_column( 'RECNENDABS' ).
      lo_col_list->set_specific_group( id = 'GRP1' ).

**********************************************************************
      hide_field 'INTRENO'.
      hide_field 'OBJNRDIST'.
      hide_field 'RENTAL_OBJECT'.
      hide_field 'CALCRULE'.
      hide_field 'RECNTXT'.
      hide_field 'CALCRULEPARA1'.
      hide_field 'CALCRULEPARA2'.
      hide_field 'DISTRULE'.
      hide_field 'DISTRULEPARA1'.
      hide_field 'DISTRULEPARA2'.
      hide_field 'CONDPURPOSEEXT'.

**********************************************************************

      set_len 'RECNNR'         10.
      set_len 'SELECTED'       8.
      set_len 'XMETXT'         20.
      set_len 'UNITPRICE'      13.
      set_len 'CONDTYPE'       6.
      set_len 'CALCRULE_TXT'   22.

**********************************************************************
      set_medium_txt 'SELECTED'      'Selected'.
      set_medium_txt 'RECNENDABS'    'Contract End'.
      set_medium_txt 'XMETXT'        'RO Name'.
      set_medium_txt 'PARTNER'       'Customer'.
      set_medium_txt 'CUSTOMER_NAME' 'Customer Name'.
      set_medium_txt 'CALCRULE_TXT'  'Formula'.

    CATCH cx_salv_wrong_call cx_salv_existing INTO DATA(lo_ex).
    CATCH cx_salv_not_found INTO lr_ex_notfound.
  ENDTRY.

ENDFORM.

FORM set_dropdown_4_calcrule.

  DATA lt_dral      TYPE lvc_t_dral.
  DATA lt_drop_down TYPE lvc_t_drop.

  CHECK go_alvgrid_input IS BOUND.

*  lt_dral = CORRESPONDING #( gt_calcrule_txt MAPPING int_value = xmcalcrule value = calcruleext ).
*  LOOP AT lt_dral ASSIGNING FIELD-SYMBOL(<dral>).
*    <dral>-handle = 1.
*  ENDLOOP.

  lt_drop_down = CORRESPONDING #( gt_calcrule_txt MAPPING value = calcruleext ).
  LOOP AT lt_drop_down ASSIGNING FIELD-SYMBOL(<drop>).
    <drop>-handle = '1'.
  ENDLOOP.

  CALL METHOD go_alvgrid_input->set_drop_down_table
    EXPORTING
*     it_drop_down_alias = lt_dral.
      it_drop_down = lt_drop_down.

ENDFORM.

FORM build_fieldcat_input CHANGING ct_fieldcat TYPE lvc_t_fcat.

  DATA: lv_s TYPE scrtext_s,
        lv_m TYPE scrtext_m,
        lv_l TYPE scrtext_l.

  FIELD-SYMBOLS <fs_fieldcat> TYPE lvc_s_fcat.

  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name       = 'ZSRE_ZFI012R_ALV_INPUT'
      i_client_never_display = 'X'
    CHANGING
      ct_fieldcat            = ct_fieldcat
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.

  alv_set_dropdown 'CALCRULE' '1'.

  alv_outputlen 'CONDTYPE'        16.
  alv_outputlen 'SGENR'           16.
  alv_outputlen 'CONDVALIDFROM'   22.
  alv_outputlen 'UNITPRICE'       17.
  alv_outputlen 'CALCRULE'        30.

  alv_col_text 'SGENR'                'Building'.
  alv_col_text 'CONDVALIDFROM'        'Condition Start Date'.
  alv_col_text 'UNITPRICE'            'Amount'.
  alv_col_text 'CALCRULE'             'Fixed or by Object Management'.

ENDFORM.

FORM display_alv_contract.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/741212.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

神舟通用-神通MPP

1、国产MPP 神通MPP是以多年大型通用数据库领域的研发实力为基础&#xff0c;集深厚的航天信息化建设经验&#xff0c;集成多项先进技术&#xff0c;为满足航天、政府、金融、电信等行业的海量数据分析统计应用需求而打造的分布式数据库软件&#xff0c;具有负载衡、在线扩展、…

基于ssm的志愿者招募系统的设计与实现(程序+文档+数据库)

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一、研究背景…

nginx有几种启动方式

Nginx 通常可以以两种主要的方式启动&#xff1a;作为前台进程运行或作为守护进程&#xff08;后台&#xff09;运行。 前台运行&#xff1a; 当Nginx以前台模式运行时&#xff0c;它会在命令行保持活动状态&#xff0c;所有的日志输出都会直接显示在命令行上。这种模式通常用于…

Redis底层数据结构之List

文章目录 1. Redis 6的list源码分析1. Redis 7的list源码分析 1. Redis 6的list源码分析 首先我们查看一下redis 6关于list的相关配置&#xff1a; config get list*可以看见redis 6的quicklist底层使用的数据结构是ziplist list-compress-depth&#xff1a;表示一个quicklis…

【力扣hot100】刷题笔记Day25

前言 这几天搞工作处理数据真是类似我也&#xff0c;还被老板打电话push压力有点大的&#xff0c;还好搞的差不多了&#xff0c;明天再汇报&#xff0c;赶紧偷闲再刷几道题&#xff08;可恶&#xff0c;被打破连更记录了&#xff09;这几天刷的是动态规划&#xff0c;由于很成…

Node携手MongoDB探险旅行⛏️

Node携手MongoDB探险旅行⛏️ 本篇文章&#xff0c;学习记录于&#xff1a;尚硅谷&#x1f3a2; 文章简单学习总结&#xff1a;如有错误 大佬 &#x1f449;点. 本篇不适合纯新手&#xff0c;因为本人已经使用很多数据库&#xff0c;很多数据库概念…就不会进行解释&#xff…

presto / trino plugin(自定义UDF函数)开发指南

方案1:自定义udf插件开发 1. Presto插件机制 presto不能像hive那样配置自定义的udf,而是采用插件机制实现。Presto 的插件(Plugin)机制,是 Presto 能够整合多种数据源的核心。通过实现不同的 Plugin,Presto 允许用户在不同类型的数据源之间进行 JOIN 等计算。Presto 内部的…

10、设计模式之外观模式(Facade)

一、什么是外观模式 这个大家一定是经常使用的&#xff0c;外观模式&#xff08;门面模式&#xff09;是一种结构型设计模式。它提供一个统一的接口&#xff0c;用于访问子系统中的一组接口&#xff0c;隐藏了系统的复杂性。最简单的应用就是&#xff0c;当controller层的逻辑处…

C#实现二分查找算法

C#实现二分查找算法 以下是一个使用 C# 实现的二分查找算法示例&#xff1a; using System;class Program {static int BinarySearch(int[] arr, int target){int low 0;int high arr.Length - 1;while (low < high){int mid (low high) / 2;// 如果目标值等于中间元素…

doris安装(docker方式)

背景 doris有两个进程 fe,处理用户请求,查询,元数据管理,节点管理be,数据存储,查询计划执行 架构图如下: 参考:https://doris.apache.org/zh-CN/docs/get-starting/what-is-apache-doris 1、定义docker-compose文件 version: 3 services:docker-fe:image: "apac…

MySQL数据库自动备份(Linux操作系统)

方式一 参考&#xff1a;https://blog.csdn.net/qq_48157004/article/details/126683610?spm1001.2014.3001.5506 1.MySQL备份脚本 在/home/backups/下建立.sh文件&#xff0c;文件名称 mysql_backup.sh ,内容如下 #!/bin/bash #备份路径 BACKUP/home/backups/mysqlBackup…

参考线平滑 - FemPosDeviation算法

FemPosDeviation参考线平滑方法是离散点平滑方法 参考文章&#xff1a; &#xff08;1&#xff09;参考线平滑-FemPosDeviation-OSQP &#xff08;2&#xff09;Planning基础库——散点曲线平滑 &#xff08;3&#xff09;参考线平滑-FemPosDeviation-SQP &#xff08;4&#x…

ICCV 2023 | NeRF-Det

NeRF-Det: Learning Geometry-Aware Volumetric Representation for Multi-View 3D Object Detection 介绍 本文介绍了一种新颖的方法&#xff0c;用于仅使用RGB图像作为输入进行室内3D目标检测。作者提出了利用神经辐射场&#xff08;NeRF&#xff09;来显式估计3D几何形状&…

OCP Java17 SE Developers 复习题09

答案 A, E. For the first scenario, the answer needs to implement List because the scenario allows duplicates, narrowing it down to options A and D. Option A is a better answer than option D because LinkedList is both a List and a Queue, and you just nee…

代码随想录 贪心算法-难度题目-其他题目

目录 53.最大子数组和 134.加油站 968.监控二叉树 53.最大子数组和 53. 最大子数组和 中等 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个…

git提交代码描述时如何换行(更新时间24/3/12)

问题复现&#xff08;信心满满使用转义字符换行&#xff09; 解决方法&#xff1a; 写多个-m字符串的结构可以实现自动换行 注意空格 git commit -m"第一行描述" -m"第二行描述" 效果演示&#xff1a;&#xff08;强迫症福利&#xff09;

网络学习:BGP路径属性分类

目录 前言&#xff1a; 路径属性分类 公认必遵 公认任意 可选过渡 可选非过渡 前言&#xff1a; 在默认情况下&#xff0c;到达同一目的地&#xff0c;BGP只走单条路径&#xff0c;并不会在多条路径之间执行负载均衡。对于IGP路由协议&#xff0c;当有多条路径可以到达同…

dangzero环境配置问题

文章目录 安装虚拟机dangzeroCompile the KML kernelObtain Ubuntu 20.04Create VMInstall UbuntuRun UbuntuMove KML kernel to VMInside VM: Install KernelUpdate grub to auto-select KML kernelBoot parametersRun KMLTest KMLObtain glibc-2.31Install gcc-5 for kernel …

KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记10 - STM32的SDIO学习2 - Card Identification

KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记10 - STM32的SDIO学习2 - Card Identification 一、问题回顾二、本次的任务三、 需要注意的问题3.1 Card Identification Mode时的时钟频率3.2 CMD0指令的疑似问题3.3 发送带参数的ACMD41时要注意时间时序和时效3.4 CPSM的指令发送问题…

【Linux】深入探索:Linux网络调试、追踪与优化

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Linux ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 1. 调试网络问题 a. 使用ping和traceroute b. 使用netstat和ss c. 使用tcpdump和Wireshark 2. 追踪网络问题 a. 使用mtr b.…