前言
今天遇见一个问题,需求目的是OOALV刷新的同时进而刷新我们的GUI标题信息,因此用到了强制触发PBO,才能触发SAP GUI更新,看到刷新的结果。
一、调用方法
类:CL_GUI_CFW=>SET_NEW_OK_CODE
CL_GUI_CFW=>FLUSH
二、使用步骤
1.效果如下
2.相关代码如下
*&---------------------------------------------------------------------*
*& Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
DATA:lv_title TYPE string.
CLEAR lv_title.
IF gv_flg = ''.
lv_title = '汇总数据'.
ELSE.
lv_title = '明细数据'.
ENDIF.
SET PF-STATUS 'ZSTATUS'. " 定义gui状态
SET TITLEBAR 'ZTITLE' WITH lv_title. " 定义gui标题
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form FRM_HANDLE_TOOLBAR
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> E_OBJECT
*& --> E_INTERACTIVE
*&---------------------------------------------------------------------*
FORM frm_handle_toolbar
USING p_object TYPE REF TO cl_alv_event_toolbar_set
p_interactive.
* 增加按钮
APPEND VALUE #( function = 'ZBUT01'
quickinfo = '汇总数据'
butn_type = 1
icon = icon_list
text = '汇总数据' ) TO p_object->mt_toolbar.
APPEND VALUE #( function = 'ZBUT02'
quickinfo = '明细数据'
butn_type = 1
icon = icon_list
text = '明细数据' ) TO p_object->mt_toolbar.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_USER_COMMAND
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> E_UCOMM
*&---------------------------------------------------------------------*
FORM frm_handle_user_command
USING p_ucomm.
DATA:lv_title TYPE lvc_title.
CASE p_ucomm.
* 汇总数据
WHEN 'ZBUT01'.
CLEAR:gt_out.
MOVE-CORRESPONDING gt_sum TO gt_out.
gv_flg = ''.
* 明细数据
WHEN 'ZBUT02'.
CLEAR:gt_out.
MOVE-CORRESPONDING gt_del TO gt_out.
gv_flg = 'X'.
WHEN OTHERS.
ENDCASE.
* FEILDCATE
PERFORM prepare_field_catalog_9000.
* 更新FEILDCAT
CALL METHOD go_grid_01->set_frontend_fieldcatalog
EXPORTING
it_fieldcatalog = gt_fieldcat_01.
* 刷新layout
PERFORM frm_refresh_layout.
* ALV刷新
DATA:ls_stable TYPE lvc_s_stbl.
* 刷新ALV
ls_stable-row = 'X'.
ls_stable-col = 'X'.
CALL METHOD go_grid_01->refresh_table_display
EXPORTING
is_stable = ls_stable.
* 强制触发PBO
CALL METHOD cl_gui_cfw=>set_new_ok_code
EXPORTING
new_code = 'PBO'.
CALL METHOD cl_gui_cfw=>flush.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_REFRESH_LAYOUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_refresh_layout .
CALL METHOD go_grid_01->get_frontend_layout
IMPORTING
es_layout = gs_layout.
PERFORM prepare_layout CHANGING gs_layout.
CALL METHOD go_grid_01->set_frontend_layout
EXPORTING
is_layout = gs_layout.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form PREPARE_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PS_LAYOUT text
*----------------------------------------------------------------------*
FORM prepare_layout
CHANGING ps_layout TYPE lvc_s_layo.
ps_layout-cwidth_opt = 'X'. "优化行宽度
ps_layout-zebra = 'X'. "斑马纹!
ps_layout-sel_mode = 'D'. "选择方式
ENDFORM.
*&---------------------------------------------------------------------*
*& Form PREPARE_FIELD_CATALOG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PT_FIELDCAT text
*----------------------------------------------------------------------*
FORM prepare_field_catalog_9000.
DATA:ls_fieldcat TYPE lvc_s_fcat.
DEFINE mac_hong1.
ls_fieldcat-fieldname = &1."字段名
ls_fieldcat-coltext = &2."文本描述
ls_fieldcat-scrtext_l = &2."文本描述
ls_fieldcat-scrtext_m = &2."文本描述
ls_fieldcat-scrtext_s = &2."文本描述
ls_fieldcat-ref_table = &3."参考表
ls_fieldcat-ref_field = &4."参考表的字段
ls_fieldcat-convexit = &5."转换历程
APPEND ls_fieldcat TO gt_fieldcat_01.
CLEAR ls_fieldcat.
END-OF-DEFINITION.
CLEAR gt_fieldcat_01.
IF gv_flg IS INITIAL.
mac_hong1 'MATKL ' '字段1' '' '' ''.
mac_hong1 'WGBEZ ' '字段2' '' '' ''.
mac_hong1 'PRICE1' '字段3' '' '' ''.
mac_hong1 'PRICE2' '字段4' '' '' ''.
mac_hong1 'PRICE3' '字段5' '' '' ''.
mac_hong1 'PRICE4' '字段6' '' '' ''.
ENDIF.
IF gv_flg = 'X'.
mac_hong1 'MATNR ' '字段1' '' '' ''.
mac_hong1 'TXZ01 ' '字段2' '' '' ''.
mac_hong1 'ZCLPH ' '字段3' '' '' ''.
mac_hong1 'MATKL ' '字段4' '' '' ''.
mac_hong1 'WGBEZ ' '字段5' '' '' ''.
mac_hong1 'PRICE1' '字段6' '' '' ''.
mac_hong1 'PRICE2' '字段7 ' '' '' ''.
mac_hong1 'PRICE3' '字段8 ' '' '' ''.
mac_hong1 'PRICE4' '字段9 ' '' '' ''.
mac_hong1 'PRICE5' '字段10 ' '' '' ''.
ENDIF.
ENDFORM.
3. 主干代码
强制触发PBO
* 强制触发PBO
CALL METHOD cl_gui_cfw=>set_new_ok_code
EXPORTING
new_code = 'PBO'.
CALL METHOD cl_gui_cfw=>flush.
强制触发PAI
* 强制触发PAI
CALL METHOD cl_gui_cfw=>set_new_ok_code
EXPORTING
new_code = 'PAI'.
CALL METHOD cl_gui_cfw=>flush.
或者触发其他按钮类
总结
纯个人爱好记载!