SM30实现点击按钮排序某列可选多列含代码.docx
- 文档编号:13945320
- 上传时间:2023-06-19
- 格式:DOCX
- 页数:17
- 大小:78.88KB
SM30实现点击按钮排序某列可选多列含代码.docx
《SM30实现点击按钮排序某列可选多列含代码.docx》由会员分享,可在线阅读,更多相关《SM30实现点击按钮排序某列可选多列含代码.docx(17页珍藏版)》请在冰点文库上搜索。
SM30实现点击按钮排序某列可选多列含代码
第一步:
为生成的SM30界面的GUI状态添加按钮
详见:
为SM30视图添加按钮
本例中是修改的EULG:
第二步:
为按钮对应的function编写代码
多列动态排序:
1、在SM30所在的主程序中找到对应的屏幕,在屏幕上的TABLECONTRL控件上将属性中的列选择改成:
多重(单一也可以,但这时就无法进行多重选择排序了),并记下TABLECONTRL的名称:
图中为TCTRL_ZTPP_EWCM
2、PBO\PAI编码:
调用自定义的MODULE处理相关按钮的事件相应
PROCESS BEFORE OUTPUT.
MODULE liste_initialisieren.
LOOP AT extract WITH CONTROL
tctrl_ztpp_ewcm CURSOR nextline.
MODULE liste_show_liste.
ENDLOOP.
*
PROCESS AFTER INPUT.
MODULE liste_exit_command AT EXIT-COMMAND.
MODULE liste_before_loop.
LOOP AT extract.
MODULE liste_init_workarea.
CHAIN.
FIELD ztpp_ewcm-werks .
FIELD ztpp_ewcm-moagr .
FIELD ztpp_ewcm-crnam .
FIELD ztpp_ewcm-crdat .
MODULE set_update_flag ON CHAIN-REQUEST.
ENDCHAIN.
FIELD vim_marked MODULE liste_mark_checkbox.
CHAIN.
FIELD ztpp_ewcm-werks .
FIELD ztpp_ewcm-moagr .
MODULE liste_update_liste.
ENDCHAIN.
ENDLOOP.
MODULE liste_after_loop.
MODULE customize_user_commond.
3、处理代码:
注意有多重调用
*&---------------------------------------------------------------------*
*& Module CUSTOMIZE_USER_COMMOND INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE customize_user_commond INPUT.
CASE function."注意这里的function是SM30的CODE存放的变量
WHEN 'DOWNLOAD'.
PERFORM sub_download_table.
WHEN 'ASCE' OR 'DESC'.
PERFORM sub_sort_table USING function.
ENDCASE.
ENDMODULE. " CUSTOMIZE_USER_COMMOND INPUT
*&---------------------------------------------------------------------*
*& Form SUB_SORT_TABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_FUNCTION text
*----------------------------------------------------------------------*
FORM sub_sort_table USING p_code LIKE sy-ucomm.
* x_header-maintview
* sort
DATA:
l_ref_t TYPE REF TO data,
l_tc_name(30),
lt_st TYPE abap_sortorder_tab,
l_descending,
lt_return TYPE gtyt_return,
l_subrc LIKE sy-subrc VALUE 4.
FIELD-SYMBOLS:
TRY.
"注意下面是动态生成内表的代码,因为一个FUNCTIONMODULE是可以维护多个视图的,所以使用动态生成内表的技术好容易处理这种情况
CREATE DATA l_ref_t TYPE TABLE OF (x_header-maintview)."x_header-maintview中存储了主程序中修改视图的名称
ASSIGN l_ref_t->* TO
l_subrc = 0.
CATCH cx_sy_create_data_error.
PERFORM add_bapi_return_v2
TABLES
lt_return
USING
'E'
'ZFI00'
'011'
''
''
''
''
''.
ENDTRY.
IF l_subrc = 0.
"因为有多个视图,所以排序时对应的TC(tablecontral下同)名称,也不一样,所以要根据当前维护视图的名称去设置TC的名称(之前第一步中记录的),并将TC结构指针动态指向到TC
IF x_header-maintview = 'ZTPP_WCRM'.
l_tc_name = 'TCTRL_ZTPP_WCRM'.
ELSEIF x_header-maintview = 'ZTPP_EWCM'.
l_tc_name = 'TCTRL_ZTPP_EWCM'.
ENDIF.
IF p_code = 'DESC'.
l_descending = gc_x.“当CODE显示的是降序时,这个标志打上X
ENDIF.
ASSIGN (l_tc_name) TO
IF sy-subrc = 0.
"COLS记录了TC中每一列的情况,其中有SELECTED字段
LOOP AT
APPEND INITIAL LINE TO lt_st.
READ TABLE lt_st ASSIGNING
"从10位开始,是因为前十位是'ZTPP_WCRM-'
ENDLOOP.
"将EXTRACT表中的内容复制到动态内表
PERFORM frm_copy_extract
TABLES extract
CHANGING lt_return.
"排序的代码
SORT
"将动态内表的内容重复覆盖到extract
PERFORM frm_cover_extract
TABLES extract
CHANGING lt_return.
ENDIF.
ELSE.
PERFORM add_bapi_return_v2
TABLES
lt_return
USING
'E'
'ZFI00'
'011'
''
''
''
''
''.
ENDIF.
ENDFORM. " SUB_SORT_TABLE
*----------------------------------------------------------------------*
* -->P_EXTRACT text
* -->P_
* <--P_LT_RETURN text
*----------------------------------------------------------------------*
FORM frm_copy_extract TABLES pt_extract
pt_t
CHANGING pt_return TYPE gtyt_return.
DATA:
l_ref_s TYPE REF TO data.
FIELD-SYMBOLS:
CREATE DATA l_ref_s LIKE LINE OF pt_t.
ASSIGN l_ref_s->* TO
LOOP AT extract .
CLEAR
MOVE extract TO
APPEND
ENDLOOP.
ENDFORM. " FRM_COPY_EXTRACT
*&---------------------------------------------------------------------*
*& Form FRM_COVER_EXTRACT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_EXTRACT text
* -->P_
* <--P_LT_RETURN text
*----------------------------------------------------------------------*
FORM frm_cover_extract TABLES pt_extract
pt_t
CHANGING pt_return TYPE gtyt_return.
DATA:
l_ref_s TYPE REF TO data.
FIELD-SYMBOLS:
CREATE DATA l_ref_s LIKE LINE OF pt_t.
ASSIGN l_ref_s->* TO
REFRESH pt_extract.
LOOP AT pt_t ASSIGNING
MOVE
APPEND extract.
ENDLOOP.
ENDFORM. " FRM_COVER_EXTRACT
下载
1、PBO\PAI代码与之前排序一样
2、PBO\PAI编码:
调用自定义的MODULE处理相关按钮的事件相应
PROCESS BEFORE OUTPUT.
MODULE liste_initialisieren.
LOOP AT extract WITH CONTROL
tctrl_ztpp_ewcm CURSOR nextline.
MODULE liste_show_liste.
ENDLOOP.
*
PROCESS AFTER INPUT.
MODULE liste_exit_command AT EXIT-COMMAND.
MODULE liste_before_loop.
LOOP AT extract.
MODULE liste_init_workarea.
CHAIN.
FIELD ztpp_ewcm-werks .
FIELD ztpp_ewcm-moagr .
FIELD ztpp_ewcm-crnam .
FIELD ztpp_ewcm-crdat .
MODULE set_update_flag ON CHAIN-REQUEST.
ENDCHAIN.
FIELD vim_marked MODULE liste_mark_checkbox.
CHAIN.
FIELD ztpp_ewcm-werks .
FIELD ztpp_ewcm-moagr .
MODULE liste_update_liste.
ENDCHAIN.
ENDLOOP.
MODULE liste_after_loop.
MODULE customize_user_commond.
3、处理代码:
注意有多重调用
*&---------------------------------------------------------------------*
*& Module CUSTOMIZE_USER_COMMOND INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE customize_user_commond INPUT.
CASE function."注意这里的function是SM30的CODE存放的变量
WHEN 'DOWNLOAD'.
PERFORM sub_download_table.
WHEN 'ASCE' OR 'DESC'.
PERFORM sub_sort_table USING function.
ENDCASE.
ENDMODULE. " CUSTOMIZE_USER_COMMOND INPUT
*&---------------------------------------------------------------------*
*& Form SUB_DOWNLOAD_TABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_download_table .
DATA:
l_ref_t TYPE REF TO data,
lt_return TYPE gtyt_return,
* lt_fieldcat TYPE lvc_t_fcat,
l_subrc LIKE sy-subrc VALUE 4,
l_file LIKE rlgrap-filename.
FIELD-SYMBOLS:
IF lines( extract ) > 0.
TRY.
CREATE DATA l_ref_t TYPE TABLE OF (x_header-maintview).
ASSIGN l_ref_t->* TO
l_subrc = 0.
CATCH cx_sy_create_data_error.
PERFORM add_bapi_return_v2
TABLES
lt_return
USING
'E'
'ZFI00'
'011'
''
''
''
''
''.
ENDTRY.
IF l_subrc = 0.
"将EXTRACT表中的内容复制到动态内表
PERFORM frm_copy_extract
TABLES extract
CHANGING lt_return.
"弹出窗口选择路径
PERFORM get_localfilepath
USING
'XLS'
'S'
sy-title
CHANGING
l_file.
IF sy-subrc <> 0.
DATA:
l_msgv2 LIKE sy-msgv2.
CASE sy-subrc.
WHEN 1.
l_msgv2 = 'inv_winsys'.
WHEN 2.
l_msgv2 = 'no_batch'.
WHEN 3.
l_msgv2 = 'selection_cancel'.
WHEN 4.
l_msgv2 = 'selection_error'.
WHEN 5.
l_msgv2 = 'Other'.
ENDCASE.
PERFORM add_bapi_return_v2
TABLES
lt_return
USING
'E'
'ZFI00'
'035'
''
l_file
l_msgv2
''
''.
ELSE.
"下载成本地文件
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SM30 实现 点击 按钮 排序 可选 多列含 代码