DYNPRO:手动触发PAI

2020-09-26 06:22发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)嗨, 我的DYNPRO由三个部...

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

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


嗨,

我的DYNPRO由三个部分组成,如下所示。

CUSTOM CONTROL部分正在显示带有自定义工具栏的CL_GUI_ALV_GRID对象(通过处理CL_GUI_ALV_GRID事件TOOLBAR)。

按下自定义工具栏上的按钮时,此操作的处理程序必须使用DYNPRO右上部分的数据(上图中名为" WE:Allgemeine Buchungsdaten")。

由于按下该按钮后未执行PAI,因此不会发生从DYNPRO到编程的数据传输。 因此,我的处理程序可以处理在上一个PAI之前传输的数据,该数据可能很旧。

是否可以在处理程序中手动触发PAI?

我尝试过

呼叫方法cl_gui_cfw => set_new_ok_code
     出口
       new_code ='DUMMY'。
    调用方法cl_gui_cfw =>刷新。
 

like https://wiki.scn.sap.com/wiki/display/Snippets/Triggering + PAI + manually 告诉我,但是经过这种和平的代码后,才触发PAI。

请帮助

休伯特

dynpro.jpg (207.7 kB)
5条回答
huskylover
2020-09-26 06:45

CL_GUI_CFW => SET_NEW_OK_CODE对我来说很好(不需要刷新):

报告。
 数据int_fleet类型表。
 数据alv_1类型参考cl_gui_alv_grid。
 * -------------------------------------------------  --------------------- *
 CLASS lcl_event_receiver定义。
   公共部分。
     方法on_user_command FOR cl_gui_alv_grid的事件user_command。
     方法handle_toolbar用于cl_gui_alv_grid的事件工具栏
           导入e_object e_interactive。
 ENDCLASS。  " lcl_event_receiver定义
 数据event_receiver类型参考lcl_event_receiver。
 * -------------------------------------------------  --------------------- *
 CLASS lcl_event_receiver的实现。
   方法handle_toolbar。
     数据ls_toolbar TYPE stb_button。
     删除e_object-> mt_toolbar WHERE函数='&DETAIL'。
     清除ls_toolbar。
     ls_toolbar-butn_type = cntb_btype_sep。
     附加ls_toolbar到e_object-> mt_toolbar。
     清除ls_toolbar。
     ls_toolbar-function ='飞机清单'。
     ls_toolbar-icon = icon_bw_ref_structure_sap。
     ls_toolbar-quickinfo ='显示尾巴编号和设备'(111)。
     ls_toolbar-text ='结构'(112)。
     ls_toolbar-disabled =''。
     附加ls_toolbar到e_object-> mt_toolbar。
   终结法。  " handle_toolbar
   方法on_user_command。
     MESSAGE'on_user_command'类型'I'。
     cl_gui_cfw => set_new_ok_code('DUMMY')。
   终结法。  " handle_toolbar
 ENDCLASS。  " lcl_event_receiver IMPLEMENTATION
 参数哑元。
 选择屏幕输出时。
   如果alv_1是INITIAL。
     SELECT * FROM sflight进入表int_fleet。
     数据:it_layout TYPE lvc_s_layo,
           it_fcat TYPE lvc_t_fcat,
           ls_exclude TYPE ui_func,
           gs_variant TYPE变量,
           lt_exclude TYPE ui_functions。
     ls_exclude = cl_gui_alv_grid => mc_fc_excl_all。
     追加ls_exclude至lt_exclude。
     执行get_fcat更改int_fleet it_fcat。
     创建对象alv_1
       出口
         i_parent = cl_gui_container => screen0。
     创建对象event_receiver。
 *在SET_TABLE_FOR_FIRST_DISPLAY之前设置工具栏处理程序,以便
 *使它自动升起(因此无需调用SET_TOOLBAR_​​INTERACTIVE)
     设置HANDLER event_receiver-> handle_toolbar for alv_1。
     为alv_1设置处理程序event_receiver-> on_user_command。
     呼叫方法alv_1-> set_table_for_first_display
       出口
         is_layout = it_layout
         it_toolbar_clusion = lt_exclude
         is_variant = gs_variant
       改变
         it_outtab = int_fleet
         it_fieldcatalog = it_fcat
       例外情况
         invalid_parameter_combination = 1
         程序错误= 2
         too_many_lines = 3
         其他= 4。
   万一。
 在选择屏幕上。
   邮件" PAI"类型为" I"。
 * -------------------------------------------------  --------------------------
 FORM get_fcat更改it_std类型标准表et_fcat类型lvc_t_fcat。
   数据lo_table类型参考cl_salv_table。
   数据lo_columns类型参考cl_salv_columns_list。
   数据lo_agg类型参考cl_salv_aggregations。
   刷新et_fcat。
   呼叫方法cl_salv_table =>工厂
     输入
       r_salv_table = lo_table
     改变
       t_table = it_std []。
   lo_columns = lo_table-> get_columns()。
   lo_agg = lo_table-> get_aggregations()。
   et_fcat = cl_salv_controller_metadata => get_lvc_fieldcatalog(r_columns = lo_columns r_aggregations = lo_agg)。
 ENDFORM。
 

一周热门 更多>