如何用新数据刷新ALV cl_salv_table

2020-09-05 10:18发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,我有一个带有两个ALV的程序,在第一个ALV中,当用户单击一个记录时,该程序在下面显示第二个ALV,但是当用户在第一个ALV的任何其他行上单击时,第二个ALV必须 显示新信息,也就是说,应使用新信息更新ALV2。

有人可以帮助我吗?

这是我的代码:

 METHOD on_double_click。

       cl_class-> get_data(
       出口
        i_vbeln = t_rang []
       输入
         e_data = t_alv2
     )。

     创建对象lo_alv_custom

       出口

         container_name ='CONT2'。

     创建对象lo_alv_splitter

       出口

         父母= lo_alv_custom

         行= 2

         列= 1。

     lo_alv_splitter-> set_row_height(id = 1 height = 100)。

     go_alv_cont2 = lo_alv_splitter-> get_container(row = 1 column = 1)。

     cl_salv_table => factory(导出r_container = go_alv_cont2
                             导入r_salv_table = go_alv_grid2
                             更改t_table = t_alv2)。

     cl_report => settings_alv2()。
   尝试。
     go_alv_grid2-> set_data(

       改变
         t_table = t_alv2 []

     )。

       捕获cx_salv_no_new_data_allowed。  "

     ENDTRY。
     go_alv_grid2-> get_columns()。
     go_alv_grid2-> refresh()。
     go_alv_grid2-> display()。
   终结法。

 

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,我有一个带有两个ALV的程序,在第一个ALV中,当用户单击一个记录时,该程序在下面显示第二个ALV,但是当用户在第一个ALV的任何其他行上单击时,第二个ALV必须 显示新信息,也就是说,应使用新信息更新ALV2。

有人可以帮助我吗?

这是我的代码:

 METHOD on_double_click。

       cl_class-> get_data(
       出口
        i_vbeln = t_rang []
       输入
         e_data = t_alv2
     )。

     创建对象lo_alv_custom

       出口

         container_name ='CONT2'。

     创建对象lo_alv_splitter

       出口

         父母= lo_alv_custom

         行= 2

         列= 1。

     lo_alv_splitter-> set_row_height(id = 1 height = 100)。

     go_alv_cont2 = lo_alv_splitter-> get_container(row = 1 column = 1)。

     cl_salv_table => factory(导出r_container = go_alv_cont2
                             导入r_salv_table = go_alv_grid2
                             更改t_table = t_alv2)。

     cl_report => settings_alv2()。
   尝试。
     go_alv_grid2-> set_data(

       改变
         t_table = t_alv2 []

     )。

       捕获cx_salv_no_new_data_allowed。  "

     ENDTRY。
     go_alv_grid2-> get_columns()。
     go_alv_grid2-> refresh()。
     go_alv_grid2-> display()。
   终结法。

 
付费偷看设置
发送
4条回答
一只江湖小虾
1楼 · 2020-09-05 10:51.采纳回答

您好路易斯·罗伯托·佛朗哥

您可以尝试以下方法:

 go_alv_grid2>刷新(refresh_mode = if_salv_c_refresh => full)。
 cl_gui_cfw => flush()。
 

最诚挚的问候

易卜拉欣

蓋茨
2楼-- · 2020-09-05 10:32

您好,Luis Roberto Franco,

您可以尝试下面给出的alv容器示例代码。

数据:alv_container类型参考cl_gui_docking_container。
数据:alv_grid类型参考cl_gui_alv_grid。
数据:布局类型lvc_s_layo。
数据:fieldcat TYPE lvc_t_fcat。

*构建字段目录.....

layout-zebra ='X'。
layout-CWIDTH_OPT ='X'。
layout-edit_mode ='X'。
检查alv_container是否为INITIAL。
创建对象alv_container
出口
repid = repid
dynnr = sy-dynnr
侧面= alv_容器-> dock_at_right

扩展名=4500。
创建对象alv_grid
出口
i_parent = alv_container。
* ALV特定。 数据选择。
*填充字段目录
执行get_fieldcatalog。
调用方法alv_grid-> set_table_for_first_display
出口
is_layout =布局
is_variant =变体
i_save ='U'
i_structure_name ='IT_ALV'



改变
it_outtab = it_alv []
it_fieldcatalog = fieldcat []。

* endif。

因此,如果您在第一个ALV中选择任何记录,则会触发第二个ALV,该记录可向右移动...。

亦是此间程序员
3楼-- · 2020-09-05 10:35

您好我 解决了我的问题,现在当我运行程序时,我填充了两个ALV,第一个填充数据,第二个填充数据,即为空,然后双击第一个ALV y获取填充第二个ALV的数据 我不希望它在程序运行时显示我的第二个ALV为空,在更改之前,我确实显示了我的第一个ALV和数据,而第二个ALV则一直隐藏,直到用户单击某些记录为止

 METHOD on_double_click。
 GET_DATA()。
 * Actualiza alv项目
           lr_columns = go_alv_grid2-> get_columns()。
           lr_columns-> set_optimize(abap_true)。
           go_alv_grid2->刷新(refresh_mode = if_salv_c_refresh => full)。
   ENDMETHOD。
能不能别闹
4楼-- · 2020-09-05 10:51

您可以使用以下代码段作为参考:

报告ztest_alv1。

 表格:sflight,zbw360mat_n。
 参数:p_mtart TYPE mara-mtart。
 * DATA:LO_MATERIAL TYPE REF CL_USERDEFINED_TYPES。  " DECLARE CLASS
 类型:ty_mara的开头。

         包含结构zbw360mat。

 类型:ty_mara的结尾。
 类型:tt_mara ty_mara的类型表。
 数据:ty_mara的it_mara类型表。
 数据:wa_mara类型ty_mara。

 数据report_i zbw360mat_n的类型表。
 DATA report_w TYPE zbw360mat_n。
 数据:report_data_1 TYPE zbw360mat,
         report_data_2 zbw360mat的类型表。
 数据:gr_layout类型参考cl_salv_layout,
        gr_layout_key TYPE salv_s_layout_key,
        ls_layout TYPE salv_s_layout,
        lt_layout_info类型salv_t_layout_info。

 **全局显示设置声明
 数据:gr_display类型参考cl_salv_display_settings,
        lv_title TYPE lvc_title。
 **声明顶部列表设置
 数据:gr_content类型参考cl_salv_form_element。

 数据:l_rec(5)类型n。
 ** ALV列的声明
 数据:gr_columns类型参考cl_salv_columns_table,
        gr_column类型参考cl_salv_column_table,
        lt_column_ref TYPE salv_t_column_ref,
        ls_column_ref类型salv_s_column_ref。
 **日期列的着色**
 数据:lvc_s_colo的lt_colo类型标准表,
        ls_colo类型lvc_s_colo。

 * -------------------------------------------------  --------------------- *
 * CLASS lcl_app定义
 * -------------------------------------------------  --------------------- *
 *
 * -------------------------------------------------  --------------------- *
 CLASS lcl_app定义。

   公共部分。
     方法:get_materials_for_type
                   导入im_mtart TYPE mara-mtart
                   导出et_mara类型tt_mara
     ,display_report。

   专用部分。

     常量:btn_delete TYPE salv_de_function VALUE'BTN_DELETE'。
     数据:salv_table类型参考cl_salv_table,
     report_data类型表。

     方法:
     cl_salv_events_table的事件附加功能
     输入
     e_salv_function。

     方法:
     handle_btn_delete。

 ENDCLASS。  " lcl_app定义
 * -------------------------------------------------  --------------------- *
 * CLASS lcl_app的实现
 * -------------------------------------------------  --------------------- *
 *
 * -------------------------------------------------  --------------------- *
 类别lcl_app实施。
   方法get_materials_for_type。
     选择*从zbw360mat
            表et_mara的对应字段
           最多5行。
     " WHERE MTART = IM_MTART。
   终结法。  " GET_MATERIALS_FOR_TYPE
   方法display_report。

     数据:lr_events类型参考cl_salv_events_table。
     呼叫方法me-> get_materials_for_type
       出口
         im_mtart = p_mtart
       输入
         et_mara = it_mara。
     尝试。
         cl_salv_table =>工厂(
         输入
         r_salv_table = salv_table
         改变
         t_table = it_mara)。
       捕捉cx_salv_msg。

     ENDTRY。

 *******布局设置*******
     清除:gr_layout,gr_layout_key。
     将sy-repid移动到gr_layout_key-report。  "将报告ID设置为布局键

     gr_layout = salv_table-> get_layout()。  "获取表的布局
     gr_layout-> set_key(gr_layout_key)。  "将报告ID设置为布局
     gr_layout-> set_save_restriction(if_salv_c_layout => restrict_none)。  "不限制保存布局
 *******全局显示设置*******
     清除:gr_display。
     CONCATENATE'DEL监视-''''''记录数:'l_rec INTO lv_title。
     gr_display = salv_table-> get_display_settings()。  "全局显示设置"
     gr_display-> set_striped_pa​​ttern(if_salv_c_bool_sap => true)。  "激活带状图案"
     gr_display-> set_list_header(lv_title)。  "报告标题"
 **从ALV表获取列
     gr_columns = salv_table-> get_columns()。

     如果gr_columns不是INITIAL。
       刷新:lt_column_ref。
       清除:ls_column_ref。
       lt_column_ref = gr_columns-> get()。
 **获取列属性
       gr_columns-> set_optimize(if_salv_c_bool_sap => true)。
       gr_columns-> set_key_fixation(if_salv_c_bool_sap => true)。
       尝试。
           gr_columns-> set_color_column('T_COLOR')。
         捕获cx_salv_data_error。
       ENDTRY。
     万一。
     数据:lr_selections类型参考cl_salv_selections。

     lr_selections = me-> salv_table-> get_selections()。

     lr_selections-> set_selection_mode(if_salv_c_selection_mode => row_column)。

 *事件处理
     lr_events = me-> salv_table-> get_event()。
     设置处理程序我->为lr_events添加的handle_add_function。
     我-> salv_table-> set_screen_status(
     报告= sy-repid
     pfstatus ='SALV_TABLE_STANDARD'
     set_functions = cl_salv_table => c_functions_all
     )。

     我-> salv_table-> display()。

   终结法。  " display_report

   方法handle_added_function。

     案例e_salv_function。

       btn_delete时。
         我-> handle_btn_delete()。
     结束。

   终结法。  " handle_added_function
   方法handle_btn_delete。
     刷新:report_data_2,report_i。
     数据:lr_selections类型参考cl_salv_selections,
     lt_sel_rows TYPE salv_t_row,
     lv_sel_row与lt_sel_rows类似,
     lv_n_rows TYPE i,
     lv_answer类型c长度1。

     lr_selections = me-> salv_table-> get_selections()。
     lt_sel_rows = lr_selections-> get_selected_rows()。
     lv_n_rows = LINES(lt_sel_rows)。

     循环至lt_sel_rows并进入lv_sel_row。
       读取表it_​​mara索引lv_sel_row INTO report_data_1。

       APPEND report_data_1至report_data_2。

       清除report_data_1。

     结局。
     从表report_data_2中删除zbw360mat。

     如果sy-subrc是INITIAL。
       在it_mara INTO report_data_1中循环。

         读取表report_data_2,其关键字为materialname = report_data_1-materialname传输没有字段。
         如果sy-subrc是INITIAL。
           从report_data_1删除表it_mara。

         万一。
         清除report_data_1。

       结局。
       将report_data_2追加到report_i。

       FIELD-SYMBOLS:类型zbw360mat_n。

       循环运行report_i ASSIGNING  -uname = sy-uname。

       结局。

       从表report_i修改zbw360mat_n。
     万一。
 *刷新ALV
     me-> salv_table-> refresh(refresh_mode = if_salv_c_refresh => full)。
   终结法。  " handle_btn_delete

 ENDCLASS。  " lcl_app IMPLEMENTATION
 选择结束。

   数据:gr_app类型参考为lcl_app。

   创建对象gr_app。
   gr_app-> display_report()。

一周热门 更多>