SAP[ABAP] 一个包含大部分功能的ALV

备注:此ALV包含指示灯,颜色,点击事件,相同F4,不同F4,相同下拉框,不同下拉框,

此代码包含点击SEND按钮触发事件,可以先屏蔽,如想学习XML跟内表相互转换,请点击这里
 

目录

1:创建程序

1.1:SE38创建一个程序ZWZ_FM_ALV1

1.2: 定义zwz_fm_alv1_top

1.3:定义ZWZ_FM_ALV1_SEL

1.4:定义ZWZ_FM_ALV1_CLASS

1.5:定义ZWZ_FM_ALV1_FROM

2:效果展示​编辑



1:创建程序


1.1:SE38创建一个程序ZWZ_FM_ALV1

定义4个包含程序

INCLUDE zwz_fm_alv1_top.        *用于定义参数
INCLUDE zwz_fm_alv1_sel.        *用于定义屏幕筛选条件
INCLUDE zwz_fm_alv1_class.     *用于定义各种事件
INCLUDE zwz_fm_alv1_from.      *用于定义各种方法

status1000

1.2: 定义zwz_fm_alv1_top

TYPE-POOLS: slis,icon.
TABLES:ekko,ekpo.

TYPES : BEGIN OF ty_alvshow,
          ebeln      TYPE ebeln,
          bukrs      TYPE bukrs,
          bsart       TYPE esart,
          loekz       TYPE eloek,
          statu       TYPE estak,
          aedat       TYPE erdat,
          ernam       TYPE ernam,
          ebelp      TYPE ebelp,
          matnr      TYPE matnr,
          menge      TYPE bstmg,
          meins      TYPE meins,
          test       TYPE ernam,
          test2      TYPE ernam,
          dd_handle  TYPE int4, "不同下拉框
          dd_handle2 TYPE int4, "相同下拉框
          f4         TYPE ernam, "不同F4
          f4_2       TYPE ernam, "相同F4
          cellcolor  TYPE lvc_t_scol,  "单元格颜色定义
          rowcolor   TYPE char4,  "控制行颜色
          light      TYPE char01,"指示灯
          box        TYPE char01,"是否选择此行数据
          click TYPE char10,
        END OF ty_alvshow.

FIELD-SYMBOLS : <fs_alvshow> TYPE ty_alvshow.
DATA : lt_alvshow TYPE TABLE OF ty_alvshow,
       ls_alvshow TYPE ty_alvshow,
       ls_handle  TYPE int4.

DATA:lt_ztwz_table001 TYPE TABLE OF ztwz_table001,
     ls_ztwz_table001 TYPE ztwz_table001.

DATA:ls_layout_lvc TYPE lvc_s_layo,
     lt_fcat_lvc   TYPE lvc_t_fcat,
     ls_fcat_lvc   TYPE lvc_s_fcat,
     ls_event      TYPE slis_alv_event,
     lt_event      TYPE slis_t_event,
     lt_ddval      TYPE lvc_t_drop, "下拉框
     ls_ddval      TYPE lvc_s_drop, "下拉框
     lt_f4         TYPE lvc_t_f4,
     ls_f4         TYPE lvc_s_f4,
     lc_grid       TYPE REF TO cl_gui_alv_grid,
     ls_stbl       TYPE lvc_s_stbl,
     ls_color      TYPE lvc_s_scol.  "颜色定义.

1.3:定义ZWZ_FM_ALV1_SEL

SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE TEXT-t01.
  SELECT-OPTIONS: s_ebeln FOR ekko-ebeln,
                  s_bukrs FOR ekko-bukrs,
                  s_aedat  FOR ekko-aedat.
SELECTION-SCREEN END OF BLOCK block1.




START-OF-SELECTION.

*取数据
  PERFORM frm_get_data.
*ALV展示
  PERFORM frm_display_alv.

1.4:定义ZWZ_FM_ALV1_CLASS

CLASS lcl_event_receiver DEFINITION."alv显示f4和双击事件定义
  PUBLIC SECTION.
    METHODS : handle_f4
      FOR EVENT onf4 OF cl_gui_alv_grid
      IMPORTING e_fieldname
                es_row_no
                er_event_data
                et_bad_cells,
      catch_doubleclick
        FOR EVENT double_click OF cl_gui_alv_grid
        IMPORTING e_row
                  e_column
                  es_row_no ,
      handle_data_changed_finished
        FOR EVENT data_changed_finished OF cl_gui_alv_grid
        IMPORTING e_modified et_good_cells,
      handle_cell_click
        FOR EVENT hotspot_click OF cl_gui_alv_grid
        IMPORTING
          e_row_id
          e_column_id
          es_row_no.

ENDCLASS.                    "lcl_event_receiver DEFINITION

CLASS lcl_event_receiver IMPLEMENTATION.

*搜索帮助
  METHOD handle_f4.
    PERFORM f4 USING e_fieldname
                     es_row_no
                     er_event_data
                     et_bad_cells.
  ENDMETHOD.                                                "handle_f4

*双击事件
  METHOD catch_doubleclick.
    PERFORM atdoubleclick USING e_row
                                e_column
                                es_row_no.
  ENDMETHOD.                    "catch_doubleclick

*单击事件
  METHOD handle_cell_click.
    PERFORM handle_cell_click USING
                              e_row_id
                              e_column_id
                              es_row_no.
  ENDMETHOD.

*修改后触发事件
  METHOD handle_data_changed_finished.
    PERFORM handle_data_changed_finished TABLES et_good_cells USING e_modified.
  ENDMETHOD.                    "HANDLE_DATA_CHANGED

ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION


DATA:lc_event_receiver TYPE REF TO lcl_event_receiver.

1.5:定义ZWZ_FM_ALV1_FROM

*&---------------------------------------------------------------------*
*& 包含               ZWZ_FM_ALV1_FROM
*&---------------------------------------------------------------------*

DEFINE set_fieldcat.
  CLEAR ls_fcat_lvc .
  ls_fcat_lvc-fieldname = &1."内表的字段
  ls_fcat_lvc-outputlen = &2."输出长度
  ls_fcat_lvc-scrtext_l = &3."在ALV里面显示的名字
  ls_fcat_lvc-just      = &4."水平对齐方式,L左对齐,R右对齐。
  ls_fcat_lvc-no_zero   = &5."去除前导零
  ls_fcat_lvc-edit      = &6."是否可编辑

*下拉框
  IF ls_fcat_lvc-fieldname = 'TEST'.
    ls_fcat_lvc-drdn_field = 'DD_HANDLE'.
  ELSEIF ls_fcat_lvc-fieldname = 'TEST2'.
    ls_fcat_lvc-drdn_field = 'DD_HANDLE2'.
*搜索帮助
  ELSEIF ls_fcat_lvc-fieldname = 'F4' OR ls_fcat_lvc-fieldname = 'F4_2'.
    ls_fcat_lvc-f4availabl = 'X'.       "检索帮助设置
*    ls_fcat_lvc-ref_table = 'XXXXX'.       "检索帮助设置
*    ls_fcat_lvc-REF_FIELD = 'XXXXX'.       "检索帮助设置

*列单一颜色
    ELSEIF ls_fcat_lvc-fieldname = 'EBELN'.
      ls_fcat_lvc-emphasize = 'C610'.
*要定义小数位3,否则编辑会自动缩小1000倍
    ELSEIF ls_fcat_lvc-fieldname = 'MENGE'.
      ls_fcat_lvc-decimals  = '3'.
      ls_fcat_lvc-datatype = 'QUAN'.

*设置单击属性
     ELSEIF ls_fcat_lvc-fieldname = 'CLICK'.
       ls_fcat_lvc-seltext = 'CLICK'.
       ls_fcat_lvc-hotspot   = 'X'.
     ELSEIF ls_fcat_lvc-fieldname = 'BSART'.
       ls_fcat_lvc-seltext = 'BSART'.
       ls_fcat_lvc-hotspot   = 'X'.
  ENDIF.
  APPEND ls_fcat_lvc TO lt_fcat_lvc .
END-OF-DEFINITION.

*&---------------------------------------------------------------------*
*& Form frm_get_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_get_data .

  SELECT
    k~ebeln
    k~bukrs
    k~bsart
    k~loekz
    k~statu
    k~aedat
    k~ernam
    p~ebelp
    p~matnr
    p~menge
    p~meins
    INTO CORRESPONDING FIELDS OF TABLE lt_alvshow
    FROM ekko AS k
    INNER JOIN ekpo AS p
    ON p~ebeln = k~ebeln
    WHERE k~ebeln IN s_ebeln
    AND k~aedat IN s_aedat
    AND k~bukrs IN s_bukrs.

  LOOP AT lt_alvshow ASSIGNING <fs_alvshow> .

    CALL FUNCTION 'ICON_CREATE'
      EXPORTING
        name   = 'ICON_DISPLAY'
        info   = 'PDF'
      IMPORTING
        result = <fs_alvshow>-click
      EXCEPTIONS
        OTHERS = 0.

    <fs_alvshow>-light = '2'.

  ENDLOOP.


ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_display_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_display_alv .
  PERFORM set_fieldcat.
  PERFORM set_event.
  PERFORM creat_dropdown_values."下拉框
  PERFORM set_color."条件颜色设置
  PERFORM show_alv.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form set_fieldcat
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM set_fieldcat .
  set_fieldcat :  'EBELN' '' '采购订单' '' '' '',
                  'EBELP' '' '订单行号' '' '' '',
                  'BUKRS' '' '公司代码' '' '' '',
                  'BSART' '' '订单类型' '' '' '',
                  'LOEKZ' '' '删除标识' '' '' '',
                  'STATU' '' '订单状态' '' '' '',
                  'AEDAT' '' '创建日期' '' '' '',
                  'ERNAM' '' '创建人' '' '' '',
                  'MATNR' '' '物料号' '' '' '',
                  'MENGE' '13' '数量' '' '' 'X ',
                  'MEINS' '' '单位' '' '' '',
                  'TEST' '' '不同下拉框' '' '' 'X ',
                  'TEST2' '' '相同下拉框' '' '' 'X ',
                  'F4' '' '不同F4' '' '' 'X ',
                  'F4_2' '' '相同F4 ' '' '' 'X ',
                  'CLICK' '' '点击 ' '' '' ' '.

  CLEAR:ls_layout_lvc.
  ls_layout_lvc-zebra     = 'X'.
  ls_layout_lvc-cwidth_opt   = 'X'.
  ls_layout_lvc-ctab_fname  = 'CELLCOLOR'.  "ctab_fname单元格条件颜色控制设置
  ls_layout_lvc-info_fname  = 'ROWCOLOR'.  "info_fname控制行颜色
  ls_layout_lvc-box_fname = 'BOX'. "是否选择此行数据
  ls_layout_lvc-excp_fname = 'LIGHT'. "指示灯
ENDFORM.
*&---------------------------------------------------------------------*
*& Form show_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM show_alv .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-repid
      is_layout_lvc            = ls_layout_lvc
      it_fieldcat_lvc          = lt_fcat_lvc
      i_save                   = 'A'
      it_events                = lt_event
      i_callback_pf_status_set = 'SET_STATUS1000'
      i_callback_user_command  = 'USER_COMMAND'
      i_callback_top_of_page   = 'FRM_TOP_OF_PAGE'
    TABLES
      t_outtab                 = lt_alvshow
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.


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

  ls_event-name = 'CALLER_EXIT'.
  ls_event-form = 'CALLER_EXIT'.

  APPEND ls_event TO lt_event.
  CLEAR:ls_event.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form set_status1000
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM set_status1000 USING pt_extab TYPE slis_t_extab..

  SET PF-STATUS 'STATUS1000'.
  SET TITLEBAR 'TITLE1000'.

ENDFORM.

FORM frm_top_of_page.

  DATA:lt_header TYPE slis_t_listheader,
       ls_header TYPE slis_listheader.

  REFRESH:lt_header.
  CLEAR:ls_header.

  ls_header-typ = 'H'.
  ls_header-info = '采购订单详细报表'.

  APPEND ls_header TO lt_header.

  CLEAR:ls_header.

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary = lt_header
*     I_LOGO             =
*     I_END_OF_LIST_GRID =
*     I_ALV_FORM         =
    .



ENDFORM.
*&---------------------------------------------------------------------*
*& Form f4
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> E_FIELDNAME
*&      --> ES_ROW_NO
*&      --> ER_EVENT_DATA
*&      --> ET_BAD_CELLS
*&---------------------------------------------------------------------*
FORM f4  USING    p_e_fieldname
                  p_es_row_no TYPE lvc_s_roid
                  p_er_event_data TYPE REF TO cl_alv_event_data
                  p_et_bad_cells.

  DATA:lt_ztwz_table001 TYPE TABLE OF ztwz_table001.
  DATA: lt_return TYPE STANDARD TABLE OF ddshretval,
        ls_return TYPE ddshretval.


  IF p_e_fieldname = 'F4'.

    READ TABLE lt_alvshow INTO ls_alvshow INDEX p_es_row_no-row_id.

    SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_ztwz_table001
        FROM ztwz_table001
      WHERE ernam = ls_alvshow-ernam.

    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
      EXPORTING
        retfield        = 'MANDT' "这个参数为帮助表中返回到ALV的字段的参数
        value_org       = 'S'
        dynpprog        = sy-repid           "当前程序,不写会有问题
        dynpnr          = sy-dynnr           "当前屏幕,不写会有问题
      TABLES
        value_tab       = lt_ztwz_table001
*       FIELD_TAB       =
        return_tab      = lt_return
*       DYNPFLD_MAPPING =
      EXCEPTIONS
        parameter_error = 1
        no_values_found = 2
        OTHERS          = 3.
    IF sy-subrc <> 0.
* Implement suitable error handling here
    ENDIF.

    IF sy-subrc = 0.
      READ TABLE lt_return INTO ls_return INDEX 1.
      ls_alvshow-f4 = ls_return-fieldval.

      MODIFY lt_alvshow FROM ls_alvshow INDEX p_es_row_no-row_id TRANSPORTING f4.
      PERFORM refresh.
    ENDIF.


    p_er_event_data->m_event_handled = 'X'.

  ELSEIF p_e_fieldname = 'F4_2'.

    SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_ztwz_table001
      FROM ztwz_table001.

    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
      EXPORTING
        retfield        = 'MANDT' "这个参数为帮助表中返回到ALV的字段的参数
        value_org       = 'S'
        dynpprog        = sy-repid           "当前程序,不写会有问题
        dynpnr          = sy-dynnr           "当前屏幕,不写会有问题
      TABLES
        value_tab       = lt_ztwz_table001
*       FIELD_TAB       =
        return_tab      = lt_return
*       DYNPFLD_MAPPING =
      EXCEPTIONS
        parameter_error = 1
        no_values_found = 2
        OTHERS          = 3.
    IF sy-subrc <> 0.
* Implement suitable error handling here
    ENDIF.

    READ TABLE lt_alvshow INTO ls_alvshow INDEX p_es_row_no-row_id.

    IF sy-subrc = 0.
      READ TABLE lt_return INTO ls_return INDEX 1.
      ls_alvshow-f4_2 = ls_return-fieldval.

      MODIFY lt_alvshow FROM ls_alvshow INDEX p_es_row_no-row_id TRANSPORTING f4_2.
      PERFORM refresh.
    ENDIF.


    p_er_event_data->m_event_handled = 'X'.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form atdoubleclick
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> E_ROW
*&      --> E_COLUMN
*&      --> ES_ROW_NO
*&---------------------------------------------------------------------*
FORM atdoubleclick  USING    p_e_row
                             p_e_column
                             p_es_row_no TYPE lvc_s_roid.


  READ TABLE lt_alvshow INTO ls_alvshow INDEX p_es_row_no-row_id.


ENDFORM.
*&---------------------------------------------------------------------*
*& Form handle_data_changed
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM handle_data_changed_finished TABLES et_good_cells USING e_modified.

  DATA:ls_cells TYPE lvc_s_modi.

  LOOP AT et_good_cells INTO ls_cells.
    READ TABLE lt_alvshow INTO ls_alvshow INDEX ls_cells-row_id.
  ENDLOOP.

ENDFORM.

FORM caller_exit USING e_grid TYPE slis_data_caller_exit.
  " USING  I_EXTAB TYPE SLIS_T_EXTAB  .


  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
*   EXPORTING
*     IR_SALV_FULLSCREEN_ADAPTER       =
    IMPORTING
*     ET_EXCLUDING                     =
*     E_REPID                          =
*     E_CALLBACK_PROGRAM               =
*     E_CALLBACK_ROUTINE               =
      e_grid = lc_grid
*     ET_FIELDCAT_LVC                  =
*     ER_TRACE                         =
*     E_FLG_NO_HTML                    =
*     ES_LAYOUT_KKBLO                  =
*     ES_SEL_HIDE                      =
*     ET_EVENT_EXIT                    =
*     ER_FORM_TOL                      =
*     ER_FORM_EOL                      =
    .

*设置F4搜索帮助
  ls_f4-fieldname  = 'F4'.   "窗口时间参数(需要定义F4帮助按钮的字段)
  ls_f4-register   = 'X'.
  ls_f4-getbefore  = 'X'.
  ls_f4-chngeafter = 'X'.
  APPEND ls_f4 TO lt_f4.
  CLEAR:ls_f4.
  ls_f4-fieldname  = 'F4_2'.   "窗口时间参数(需要定义F4帮助按钮的字段)
  ls_f4-register   = 'X'.
  ls_f4-getbefore  = 'X'.
  ls_f4-chngeafter = 'X'.
  APPEND ls_f4 TO lt_f4.

  CALL METHOD lc_grid->register_f4_for_fields
    EXPORTING
      it_f4 = lt_f4.

*设置下拉框
  CALL METHOD lc_grid->set_drop_down_table
    EXPORTING
      it_drop_down = lt_ddval.

* 设置enter事件
  CALL METHOD lc_grid->register_edit_event
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_enter
    EXCEPTIONS
      error      = 1
      OTHERS     = 2.
  " SET PF-STATUS 'STATUS' EXCLUDING I_EXTAB.
  CREATE OBJECT lc_event_receiver.
  SET HANDLER   lc_event_receiver->handle_data_changed_finished FOR lc_grid.
  SET HANDLER   lc_event_receiver->catch_doubleclick FOR lc_grid.
  SET HANDLER   lc_event_receiver->handle_cell_click FOR lc_grid.
  SET HANDLER   lc_event_receiver->handle_f4 FOR lc_grid.
ENDFORM.                    "FM_BUTTON
*&---------------------------------------------------------------------*
*& Form creat_dropdown_values
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM creat_dropdown_values .
  CLEAR:ls_handle.
  ls_handle = 10.
  LOOP AT lt_alvshow ASSIGNING <fs_alvshow>.
*不同下拉框
    ls_handle = ls_handle + 1.
    <fs_alvshow>-dd_handle =  ls_handle.

    SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_ztwz_table001
      FROM ztwz_table001
      WHERE ernam = <fs_alvshow>-ernam .

    LOOP AT lt_ztwz_table001 INTO ls_ztwz_table001.
      ls_ddval-handle = ls_handle.
      ls_ddval-value = ls_ztwz_table001-test.
      APPEND ls_ddval TO lt_ddval.
    ENDLOOP.

*相同下拉框
    <fs_alvshow>-dd_handle2 =  '1'.
    ls_ddval-handle = '1'.
    ls_ddval-value = 'test1'.
    APPEND ls_ddval TO lt_ddval.
    ls_ddval-handle = '1'.
    ls_ddval-value = 'test2'.
    APPEND ls_ddval TO lt_ddval.
  ENDLOOP.


ENDFORM.
*&---------------------------------------------------------------------*
*& Form refresh
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM refresh .
  ls_stbl-row = 'X'." 基于行的稳定刷新
  ls_stbl-col = 'X'." 基于列稳定刷新
  CALL METHOD lc_grid->refresh_table_display
    EXPORTING
      is_stable = ls_stbl.

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

  LOOP AT lt_alvshow ASSIGNING <fs_alvshow>.
*单元格颜色
    IF <fs_alvshow>-ernam = 'XX004'.
      CLEAR:ls_color.
      ls_color-fname = 'ERNAM'.
      ls_color-color-col = '6'.
      ls_color-color-int = '1'.
      ls_color-color-inv = '1'.
      APPEND ls_color TO <fs_alvshow>-cellcolor.
    ELSEIF <fs_alvshow>-ernam = 'KF771'.
      CLEAR:ls_color.
      ls_color-fname = 'ERNAM'.
      ls_color-color-col = '4'.
      ls_color-color-int = '1'.
      ls_color-color-inv = '1'.
      APPEND ls_color TO <fs_alvshow>-cellcolor.

*行颜色
      <fs_alvshow>-rowcolor = 'C711'.

    ENDIF.
  ENDLOOP.

ENDFORM.

FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.

  CASE r_ucomm.
    WHEN 'SEND'.

      DATA:ls_type            TYPE char01,
           lt_ztmm_kf614_po1  TYPE TABLE OF zsmm_kf614_po1,
           ls_zsmm_kf614_po1  TYPE zsmm_kf614_po1,
           ls_zsmm_kf614_xml1 TYPE zsmm_kf614_xml1.

      DATA:lv_instring  TYPE string,
           lv_outstring TYPE string.

      DATA:lo_error            TYPE REF TO cx_transformation_error,
           lv_transerrorstring TYPE string.

      LOOP AT lt_alvshow INTO ls_alvshow WHERE box = 'X'.

        MOVE-CORRESPONDING ls_alvshow TO ls_zsmm_kf614_po1.
        APPEND ls_zsmm_kf614_po1 TO lt_ztmm_kf614_po1.

        CLEAR:ls_zsmm_kf614_po1,ls_alvshow.

      ENDLOOP.


*-------------------------------构建表-------------------------------------*
      ls_zsmm_kf614_xml1-items = lt_ztmm_kf614_po1.
      ls_zsmm_kf614_xml1-date = sy-datum.

      CALL FUNCTION 'NUMBER_GET_NEXT'
        EXPORTING
          nr_range_nr             = '01'
          object                  = 'ZDX'
          ignore_buffer           = 'X'
        IMPORTING
          number                  = ls_zsmm_kf614_xml1-number
        EXCEPTIONS
          interval_not_found      = 1
          number_range_not_intern = 2
          object_not_found        = 3
          quantity_is_0           = 4
          quantity_is_not_1       = 5
          interval_overflow       = 6
          buffer_overflow         = 7
          OTHERS                  = 8.
      IF sy-subrc <> 0.
* Implement suitable error handling here
      ENDIF.
*-------------------------------END构建表-------------------------------------*


*表转换为XML
      TRY.
          CALL TRANSFORMATION zstrans_kf614_xml1
            SOURCE order = ls_zsmm_kf614_xml1
            RESULT XML lv_instring
            OPTIONS xml_header = 'no'.

        CATCH cx_transformation_error INTO lo_error.
          lv_transerrorstring = lo_error->get_text( ).
      ENDTRY.
      SHIFT lv_instring BY 1 PLACES.
      CONCATENATE '<?xml version="1.0" encoding="UTF-8"?>' lv_instring INTO lv_instring.
**调用类
*
*      DATA:lo_proxy     TYPE REF TO zcl_spoxyco_zfm_614_send_poxml,
*           lo_sys_error TYPE REF TO cx_ai_system_fault,
*           lo_app_error TYPE REF TO cx_ai_application_fault,
*           ls_request   TYPE zcl_spoxyzfm_614_send_poxml,
*           ls_response  TYPE zcl_spoxyzfm_614_send_poxmlres.
*      DATA:lv_proxysyserror TYPE string,
*           lv_proxyapperror TYPE string.
*
*      TRY.
*
*          CREATE OBJECT lo_proxy
*            EXPORTING
*              logical_port_name = 'LP01'.
*
*        CATCH cx_ai_system_fault INTO lo_sys_error .
*          lv_proxysyserror = lo_sys_error->get_text( ) .
*      ENDTRY.
*
*      ls_request-inputxml = lv_instring.
*
*
*      TRY.
*          CALL METHOD lo_proxy->zfm_614_send_poxml
*            EXPORTING
*              input  = ls_request
*            IMPORTING
*              output = ls_response.
*        CATCH cx_ai_system_fault INTO lo_sys_error .
*          lv_proxysyserror = lo_sys_error->get_text( ) .
*      ENDTRY.


*调用方法
      CALL FUNCTION 'ZFM_614_SEND_POXML'
        EXPORTING
          inputxml  = lv_instring
        IMPORTING
          outputxml = lv_outstring.

      LOOP AT lt_alvshow ASSIGNING <fs_alvshow> WHERE box = 'X'.
        <fs_alvshow>-light = '3'.
      ENDLOOP.
      PERFORM refresh.
    WHEN OTHERS.
  ENDCASE.


ENDFORM.
*&---------------------------------------------------------------------*
*& Form handle_cell_click
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> E_ROW_ID
*&      --> E_COLUMN_ID
*&      --> ES_ROW_N
*&---------------------------------------------------------------------*
FORM handle_cell_click  USING    p_e_row_id
                                 p_e_column_id
                                 p_es_row_no TYPE lvc_s_roid.


  READ TABLE lt_alvshow INTO ls_alvshow INDEX p_es_row_no-row_id.

  DATA lo_alv TYPE REF TO cl_salv_table.
  DATA: lo_functions TYPE REF TO cl_salv_functions_list.
  DATA: lo_columns TYPE REF TO cl_salv_columns.
  DATA: lo_display TYPE REF TO cl_salv_display_settings.


*单击显示ALV
  TRY.
      cl_salv_table=>factory(
      IMPORTING
        r_salv_table = lo_alv
      CHANGING
        t_table      = lt_alvshow ).

    CATCH cx_salv_msg.
  ENDTRY.

  lo_columns = lo_alv->get_columns( ).                         "获取对象
  lo_columns->set_optimize( 'X' ).                             "设置行宽自适应

  lo_functions = lo_alv->get_functions( ).
  lo_functions->set_all( 'X' ).

  lo_display = lo_alv->get_display_settings( ).                "获取对象            "
  lo_display->set_list_header( 'AA' ).              "设置GUI抬头文本

  IF lo_alv IS BOUND.
    lo_alv->set_screen_popup(
    start_column = 10
    end_column  = 110
    start_line  = 4
    end_line    = 14 ).

    lo_alv->display( ).
  ENDIF.


ENDFORM.

2:效果展示

  • 14
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值