首页 > 其他分享 >ALV Data_Changed事件应用一例

ALV Data_Changed事件应用一例

时间:2023-09-18 12:35:08浏览次数:25  
标签:changed dept Data Changed data alv fc ALV TYPE


在alv中若需要用户交互输入数据,则数据的输入后可能需要做检查或者其他联动设备,则需要alv中进行回车操作,或者在被修改的单元格失去焦点的时候,能够触发事件,以便程序可以对变化的结果信息做详细的分析,或者做处理。



如果需要达到这个效果,则需要为alv绑定data_changed事件。



绑定事件的方法是,



首先创建一个事件类,


在类中定义一个专门用户捕获和处理alv  的 data_changed事件的方法,并编写相应的代码。



在事件回调代码中进行绑定,绑定时需要alv对象,如果当前的alv不是oo alv,则需要先获得alv对象。



绑定之后,该alv就可以相应data_changed事件


提高了交货的效果。

REPORT z_test_t05. 

 

  TYPE-POOLS:slis. 

 

  TABLES: 

 

  zfico210_lg_fc, 

 

  zfico210_dept. 

 
 
 
 

  TYPES: BEGIN OF ty_fc. 

 

          INCLUDE STRUCTURE zfico210_lg_fc. 

 

  TYPES: box, 

 

  END OF ty_fc. 

 
 
 
 

  DATA: gt_fc TYPE STANDARD TABLE OF ty_fc WITH HEADER LINE , 

 
 
 
 

  gt_dept_code TYPE STANDARD TABLE OF zfico210_dept, 

 

  gs_dept_code LIKE LINE OF gt_dept_code . 

 
 
 
 

  DATA: 

 

        gs_fc LIKE LINE OF gt_fc, 

 

        ws_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE, 

 

        ws_fieldgroups_tab TYPE slis_t_sp_group_alv, 

 

        ws_layout TYPE slis_layout_alv, 

 

        ws_sortfields_tab TYPE slis_t_sortinfo_alv WITH HEADER LINE, 

 

        ws_events TYPE slis_t_event WITH HEADER LINE, 

 

        v_repid LIKE sy-repid, 

 

        nn TYPE i VALUE 0. 

 
 
 
 

  DATA: l_ref_alv TYPE REF TO cl_gui_alv_grid.



*----------------------------------------------------------------------*


CLASS lcl_event_receiver DEFINITION. 

 
 
   PUBLIC SECTION. 

 
 
     DATA: ucomm TYPE sy-ucomm. 

 
 
  METHODS handle_data_changed 

 
    FOR EVENT data_changed OF cl_gui_alv_grid
 
    IMPORTING er_data_changed.
 
 
   PRIVATE SECTION. 

 
 
 ENDCLASS. "lcl_event_receiver DEFINITION 

 

  *......................................................................* 

 

  CLASS lcl_event_receiver IMPLEMENTATION. 

 
 METHOD handle_data_changed.
 
    PERFORM data_changed USING er_data_changed.
 

 
  ENDMETHOD. "handle_data_changed
 

  ENDCLASS. "lcl_event_receiver IMPLEMENTATION 

 

  DATA: event_receiver TYPE REF TO lcl_event_receiver. 

 
 
 
 
 
 
 

  SELECTION-SCREEN: BEGIN OF BLOCK b3 WITH FRAME TITLE text-002. 

 

  SELECT-OPTIONS: p_dept2 FOR zfico210_lg_fc-dept_code MATCHCODE OBJECT zfico210_dept_sh MODIF ID s2. 

 
 
 
 

  SELECTION-SCREEN: END OF BLOCK b3. 

 
 
 
 
 
 
 
 
 
 
 
 
 

  INITIALIZATION. 

 
 
 
 

    PERFORM get_public_info. 

 
 
 
 
 
 
 

  START-OF-SELECTION. 

 
 
 
 
 
 
 

    PERFORM alv_events. 

 

    PERFORM pfm_sel_data. 

 

    PERFORM pfm_div_data. 

 
 
 
 

  *&---------------------------------------------------------------------* 

 

  *& Form PFM_SEL_DATA 

 

  *&---------------------------------------------------------------------* 

 

  * text 

 

  *----------------------------------------------------------------------* 

 

  * --> p1 text 

 

  * <-- p2 text 

 

  *----------------------------------------------------------------------* 

 

  FORM pfm_sel_data . 

 

    CLEAR: gt_fc,gs_fc. 

 

    SELECT * FROM zfico210_lg_fc INTO CORRESPONDING FIELDS OF TABLE gt_fc 

 

      WHERE dept_code IN p_dept2 . 

 
 
 
 

  ENDFORM. " PFM_SEL_DATA 

 

  *&---------------------------------------------------------------------* 

 

  *& Form pfm_div_data 

 

  *&---------------------------------------------------------------------* 

 

  * text 

 

  *----------------------------------------------------------------------* 

 

  * --> p1 text 

 

  * <-- p2 text 

 

  *----------------------------------------------------------------------* 

 

  FORM pfm_div_data . 

 
 
 
 

    DEFINE hout. 

 

      nn = nn + 1. 

 

      ws_fieldcat-fieldname = '&1'. 

 

      ws_fieldcat-seltext_m = &2. 

 

      ws_fieldcat-col_pos = nn. 

 

      ws_fieldcat-outputlen = &3. 

 

      ws_fieldcat-datatype = '&4'. 

 

      ws_fieldcat-edit = &5. 

 
 
 
 

      if ws_fieldcat-fieldname = 'DEPT_CODE' . 

 

        ws_fieldcat-ref_fieldname = 'DEPT_CODE' . 

 

        ws_fieldcat-ref_tabname = 'ZFICO210_DEPT'. 

 

      endif. 

 

      append ws_fieldcat. 

 

      clear ws_fieldcat. 

 

    END-OF-DEFINITION. 

 
 
 
 

    hout dept_code '部门编号' 15 char 'X'. 

 

    hout dept_name '部门描述' 15 char ''. 

 

    hout lgort '库存地点' 15 char ''. 

 

  * hout dept_code2 '单位编号(业务部)' 15 char ''. 

 

    hout create_user '部门录入人' 10 char ''. 

 

    hout createdate '部门录入日期' 12 date ''. 

 

    hout submit_flag '是否提交' 10 char ''. 

 

    hout check_flag '部门审核' 10 char ''. 

 

    hout check_user '部门审核人' 10 char ''. 

 

    hout check_date '部门审核日期' 15 date ''. 

 

    hout confirm_user '确认人' 10 char ''. 

 

    hout confirm_date '确认日期' 10 date ''. 

 

    hout confirm_flag '确认标识' 10 char ''. 

 

    hout aenam '最后修改人' 15 char '' . 

 

    hout aedat '最后修改时间' 15 dats '' . 

 
 
 
 

    ws_layout-zebra = 'X'. 

 

    ws_layout-box_fieldname = 'BOX'. 

 

    v_repid = sy-repid. 

 
 
 
 

    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' 

 

      EXPORTING 

 

        i_callback_program = v_repid 

 

        is_layout = ws_layout 

 

        it_fieldcat = ws_fieldcat[] 

 

        i_default = 'X' 

 

        i_save = 'A' 

 

        i_callback_pf_status_set = 'MAIN_STATUS' 

 

        i_callback_user_command = 'USER_CLICKED' 

 

        it_special_groups = ws_fieldgroups_tab[] 

 

        it_sort = ws_sortfields_tab[] 

 

        it_events = ws_events[] 

 

      TABLES 

 

        t_outtab = gt_fc 

 

      EXCEPTIONS 

 

        program_error = 1 

 

        OTHERS = 2. 

 
 
 
 

  ENDFORM. " pfm_div_data 

 

  *&---------------------------------------------------------------------* 

 

  *& Form main_status 

 

  *&---------------------------------------------------------------------* 

 

  * text 

 

  *----------------------------------------------------------------------* 

 

  * -->RT_EXTAB text 

 

  *----------------------------------------------------------------------* 

 

  FORM main_status USING rt_extab TYPE slis_t_extab. 

 

    SET PF-STATUS 'STANDARD'. 

 

  ENDFORM. "MAIN_STATUS 

 

  *&---------------------------------------------------------------------* 

 

  *& Form user_clicked 

 

  *&---------------------------------------------------------------------* 

 

  * text 

 

  *----------------------------------------------------------------------* 

 

  * -->UCOMM text 

 

  * -->SELFIELD text 

 

  *----------------------------------------------------------------------* 

 

  FORM user_clicked USING ucomm LIKE sy-ucomm 

 

                          selfield TYPE slis_selfield. 

 

    DATA: lr_grid TYPE REF TO cl_gui_alv_grid. 

 

    CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' 

 

      IMPORTING 

 

        e_grid = lr_grid. 

 

    CALL METHOD lr_grid->check_changed_data. 

 

    selfield-refresh = 'X'. 

 

    CHECK sy-subrc = 0. 

 

    CASE ucomm. 

 

      WHEN 'AGW'. 

 

        LEAVE TO SCREEN 0. 

 

      WHEN 'AWG'. 

 

        LEAVE PROGRAM. 

 
 
 
 

      WHEN '&TIJIAO'. 

 

        DATA: lc_ok VALUE 'X'. 

 
 
 
 

        READ TABLE gt_fc INTO gs_fc WITH KEY box = 'X'. 

 
 
 
 

        IF sy-subrc = 0. 

 

          LOOP AT gt_fc INTO gs_fc WHERE box = 'X'. 

 

  * 

 

            CLEAR gs_dept_code. 

 

            READ TABLE gt_dept_code INTO gs_dept_code 

 

                   WITH KEY dept_code = gs_fc-dept_code BINARY SEARCH. 

 

            IF sy-subrc <> 0. 

 

              CLEAR lc_ok . 

 

              EXIT . 

 

              MESSAGE '事务不规范!' TYPE 'I'. 

 

            ENDIF. 

 
 
 
 

          ENDLOOP. 

 
 
 
 

          IF lc_ok = 'X'. 

 

            LOOP AT gt_fc INTO gs_fc WHERE box = 'X'. 

 
 
 
 
 
 
 

              gs_fc-aenam = sy-uname. 

 

              gs_fc-aedat = sy-datum. 

 
 
 
 

              UPDATE zfico210_lg_fc SET dept_code = gs_fc-dept_code 

 

                                           aenam = gs_fc-aenam 

 

                                           aedat = gs_fc-aedat 

 

              WHERE lgort = gs_fc-lgort. 

 
 
 
 

            ENDLOOP. 

 
 
 
 

            IF sy-subrc = 0. 

 
 
 
 
 
 
 

              COMMIT WORK. 

 

              IF sy-subrc = 0. 

 

                MESSAGE '事务已提交!' TYPE 'S'. 

 
 
 
 

              ENDIF. 

 

            ELSE. 

 

              ROLLBACK WORK. 

 

              MESSAGE '保存失败,错误未知!' TYPE 'I'. 

 

            ENDIF. 

 

          ELSE. 

 

            MESSAGE '保存失败,部门不规范!' TYPE 'I'. 

 
 
 
 

          ENDIF. 

 
 
 
 

        ELSE. 

 
 
 
 

          MESSAGE '未选中信息,请选择更改的条目!' TYPE 'I'. 

 

        ENDIF. 

 

    ENDCASE. 

 
 
 
 

  ENDFORM. "user_clicked 

 
 
 
 
 
 
 
 
 
 

  *&---------------------------------------------------------------------* 

 

  *& Form GET_PUBLIC_INFO 

 

  *&---------------------------------------------------------------------* 

 

  * text 

 

  *----------------------------------------------------------------------* 

 

  * --> p1 text 

 

  * <-- p2 text 

 

  *----------------------------------------------------------------------* 

 

  FORM get_public_info . 

 

    SELECT * FROM zfico210_dept INTO TABLE gt_dept_code . 

 

    SORT gt_dept_code ASCENDING BY dept_code. 

 

  ENDFORM. " GET_PUBLIC_INFO 

 
 
 
 
 
 
 
 
 
 

  *&---------------------------------------------------------------------* 

 

  *& Form alv_envents 

 

  *&---------------------------------------------------------------------* 

 

  * text 

 

  *----------------------------------------------------------------------* 

 

  * --> p1 text 

 

  * <-- p2 text 

 

  *----------------------------------------------------------------------* 

 
FORM alv_events .
 
  ws_events-name = 'CALLER_EXIT'.
 
  ws_events-form = 'CALLER_EXIT'.
 
  APPEND ws_events .
 
ENDFORM. " alv_envents
 
 
 
 
 
 
 
 
 
 

  *&---------------------------------------------------------------------* 

 

  *& Form alv_envents 

 

  *&---------------------------------------------------------------------* 

 

  *设置下拉列表,使Grid和内表能链接上 

 

  *---------------------------------------------------------------------* 

 

  FORM caller_exit USING ls_data TYPE slis_data_caller_exit. 

 
 
 
 

  * BREAK-POINT. 

 
 
 
 
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
 
    IMPORTING
 
      e_grid = l_ref_alv.
 

 
*
 
* CALL METHOD l_ref_alv->set_drop_down_table
 
* EXPORTING
 
* it_drop_down = g_flag.
 
*
 
* CALL METHOD l_ref_alv->set_ready_for_input
 
* EXPORTING
 
* i_ready_for_input = 1.
 

 
  CALL METHOD l_ref_alv->register_edit_event
 
    EXPORTING
 
      i_event_id = cl_gui_alv_grid=>mc_evt_modified.
 

 
  CREATE OBJECT event_receiver.
 
  SET HANDLER event_receiver->handle_data_changed FOR l_ref_alv.
 
 
 
 

  ENDFORM. "CALLER_EXIT 

 
 
 
 
 
 
 
 
 
 
 
 
 

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

 

  *****************捕捉alv改变值后处理的perform data_changed************************** 

 

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

 

  FORM data_changed USING p_er_data_changed TYPE REF TO cl_alv_changed_data_protocol. 

 
 
 
 
 IF p_er_data_changed->mt_mod_cells IS NOT INITIAL.
 

 

 
    FIELD-SYMBOLS: <f_data> LIKE LINE OF gt_fc.
 
    DATA : ls_modi TYPE lvc_s_modi .
 
    DATA: ls_mod_cell TYPE lvc_s_modi.
 

 
* DATA: lt_cell TYPE lvc_t_cell.
 
* CALL METHOD l_ref_alv->get_selected_cells
 
* IMPORTING
 
* et_cell = lt_cell.
 
*
 

 
    DATA: li_row TYPE i,
 
     lc_value TYPE c,
 
     li_col TYPE i,
 
     ls_row_id TYPE lvc_s_row,
 
     ls_col_id TYPE lvc_s_col,
 
     ls_row_no TYPE lvc_s_roid.
 

 

 

 
    CALL METHOD l_ref_alv->get_current_cell
 
      IMPORTING
 
        e_row = li_row
 
        e_value = lc_value
 
        e_col = li_col
 
        es_row_id = ls_row_id
 
        es_col_id = ls_col_id
 
        es_row_no = ls_row_no.
 

 

 
    LOOP AT p_er_data_changed->mt_mod_cells INTO ls_mod_cell.
 
      CASE ls_mod_cell-fieldname .
 
        WHEN 'DEPT_CODE'. " 根据原因分析类型的变化提取对应的描述
 
          READ TABLE gt_fc ASSIGNING <f_data> INDEX ls_mod_cell-row_id .
 
          IF sy-subrc = 0.
 

 
            IF ls_mod_cell-value EQ ''.
 
              <f_data>-dept_name = ''.
 
            ELSE.
 
              READ TABLE gt_dept_code INTO gs_dept_code WITH KEY dept_code = ls_mod_cell-value.
 
              IF sy-subrc = 0.
 
                <f_data>-dept_name = gs_dept_code-dept_name.
 
              ENDIF.
 
            ENDIF.
 
          ENDIF.
 
      ENDCASE.
 
    ENDLOOP.
 

 
    CALL METHOD l_ref_alv->refresh_table_display
 
      EXPORTING
 
        i_soft_refresh = 'X'.
 

 
* CALL METHOD l_ref_alv->set_selected_cells
 
* EXPORTING
 
* it_cells = lt_cell.
 

 
    CALL METHOD l_ref_alv->set_current_cell_via_id
 
      EXPORTING
 
        is_row_id = ls_row_id
 
        is_column_id = ls_col_id
 
        is_row_no = ls_row_no.
 

 
  ENDIF.
 

  ENDFORM. " data_changed

标签:changed,dept,Data,Changed,data,alv,fc,ALV,TYPE
From: https://blog.51cto.com/u_8215601/7508996

相关文章

  • ALV错误:Overwritten protected field
    最近在做alv开发的时候无意中遇到了这个问题: 数据都能正常输出,但是当我 back或者双击行的时候出shortdump,错误提示为:  Erroratassignment:Overwrittenprotectedfield.  从错误的提示来看是程序在执行过程中试图覆盖受保护的字段。 经反复检查发现是在lay......
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(4) -- 实现Da
    在我们设计软件的很多地方,都看到需要对表格数据进行导入和导出的操作,主要是方便客户进行快速的数据处理和分享的功能,本篇随笔介绍基于WPF实现DataGrid数据的导入和导出操作。1、系统界面设计在我们实现数据的导入导出功能之前,我们在主界面需要提供给客户相关的操作按钮,如下界面......
  • ALV删除和追加行
    programbcalv_edit_04.*-----------------------------------------------------------------------*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&am......
  • 深入探讨Spring Data JDBC的自定义映射
    前言SpringDataJDBC是一个轻量级的JDBC框架,它提供了一种简单的方式来访问关系型数据库。在使用SpringDataJDBC时,我们通常会使用默认的映射策略来将Java对象映射到数据库表中的行。但是,有时候我们需要自定义映射策略来满足特定的需求。本文将深入探讨SpringDataJDBC的自定义......
  • 深入探讨Spring Data JPA的查询示例
    前言SpringDataJPA是一个非常强大的ORM框架,它提供了许多方便的查询方法,使得我们可以轻松地进行数据库操作。本文将深入探讨SpringDataJPA的查询示例,帮助读者更好地理解和使用该框架。基本查询SpringDataJPA提供了一些基本的查询方法,如findById、findAll、save等。这些方法......
  • Spring boot data mongodb入门
    在SpringBoot中使用Mongodb,首先导入依赖库:    <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-data-mongodb</artifactId>    </dependency>连接配置## 阿里云副本实......
  • Meetup 回顾|Data Infra 研究社第十五期(含资料发布)
    本文整理于上周六(9月09日)DataInfra第15期的活动内容。本次活动由Databend研发工程师-韩山杰为大家带来了一场主题为《Databend数据集成方案》的分享,让我们一起回顾一下吧~以下是本次活动的相关文字、视频及资料:通过本次分享,我们能更加的了解Databend的生态工具,在不同数......
  • python的字典错误:RuntimeError: dictionary changed size during iteration
    1.在字典遍历过程中修改字典元素,报错RuntimeError:dictionarychangedsizeduringiteration错误代码:foriinphone:i=int(i)forkeyindict_phone.keys():ifkey==i:print(dict_phone.pop(key,'ss')) 改正foriinphone:i......
  • 【ODPS新品发布第1期】DataWorks全新发布:增强分析/数据建模个人版等新能力
    阿里云ODPS系列产品以MaxCompute、DataWorks、Hologres为核心,致力于解决用户多元化数据的计算需求问题,实现存储、调度、元数据管理上的一体化架构融合,支撑交通、金融、科研、等多场景数据的高效处理,是目前国内最早自研、应用最为广泛的一体化大数据平台。DataWorks新重点能力介绍新......
  • SecondaryNameNode、DataNode、NameNode介绍及总结
    SecondaryNameNode介绍SecondaryNameNode主要负责定期的把edits文件中的内容合并到fsimage中这个合并操作称为checkpoint,在合并的时候会对edits中的内容进行转换,生成新的内容保存到fsimage文件中。注意:在NameNode的HA架构中没有SecondaryNameNode进程,文件合并操作会由standbyNameN......