matinal:SAP ABAP SM30添加自定义按钮功能

场景:ABAP SM30添加导入excel的功能按钮

需求提出:SM30维护试图时可以导入excel数据:


第一步,为已创建的维护试图添加导入按钮:

找到对应的status,如图:

 

进入tcode:SE41
找到并进入上图对应的status,(注意:此处的维护status应该是EULG),点击更改!

新增导入按钮

至此按钮添加完毕


第二步,添加对应事件处理:

按钮事件一般在PAI处理就行了:
添加一个新MODULE。

 

 UPLOAD内部代码

MODULE upload INPUT.

  DATA: lt_itab TYPE STANDARD TABLE OF ****,
        ls_wa   LIKE LINE OF           lt_itab.

  DATA: lt_tab  TYPE         filetable,
        ls_file_table  TYPE         file_table,
        ls_file        LIKE LINE OF lt_file_table,
        lv_rc          TYPE         i,
        lv_user_action TYPE         i.

  DATA: lt_data TYPE alsmex_tabline OCCURS 0 WITH HEADER LINE.

  DATA lv_file TYPE rlgrap-filename.

  CONSTANTS: lc_default_extension TYPE string VALUE 'xlsx',
             lc_file_filter       TYPE string VALUE '*.xlsx'.

  CONSTANTS: lv_beign_row TYPE i VALUE 1,
             lv_end_row   TYPE i VALUE 3000,
             lv_begin_col TYPE i VALUE 1,
             lv_end_col   TYPE i VALUE 2.

  CASE function.

    WHEN 'IMPORT'.

      CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
      window_title      = 'Select File'
*     default_filename  = '*.XLSX'
      file_filter       = 'Excel Files (*.xlsx)|*.xlsx|Excel Files (*.xls)|*.xls'
      initial_directory = '/'           "初始化的目录
*     multiselection    = 'X'
    CHANGING
      file_table        = lt_tab
      rc                = lv_rc.

      IF sy-subrc <> 0 AND sy-subrc <> 3.
        MESSAGE e000(****) WITH '选择文件出错!'(007).
      ENDIF.

      READ TABLE lt_tab INTO ls_file_table INDEX 1.

      lv_file = ls_file_table.

      IF ls_file_table-filename = ''.
        MESSAGE S000(****) WITH '未选择文件!' DISPLAY LIKE 'E'.
        EXIT.
      ENDIF.

      CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
        EXPORTING
          filename                = lv_file
          i_begin_col             = lv_begin_col
          i_begin_row             = lv_beign_row
          i_end_col               = lv_end_col
          i_end_row               = lv_end_row
          "如果需要自定义sheet name,百度搜索自建方法,很简单,教程很多,这里不做赘述
        TABLES
          intern                  = lt_data "此处放上面定义的Excel专用内表
        EXCEPTIONS
          inconsistent_parameters = 1
          upload_ole              = 2
          OTHERS                  = 3.

      IF lt_data[] IS  INITIAL .

        MESSAGE s000(****) WITH '文件无数据或文件格式出错,请重新选择文件!' DISPLAY LIKE 'E'.

        SORT lt_data BY row col ASCENDING.

      ENDIF.

      LOOP AT lt_data. "将上面定义的excel专用内表赋值给alv出力内表
        CASE lt_data-col.
          WHEN 1.
            ls_wa-pcon_dec_code = lt_data-value.

          WHEN 2.
            ls_wa-pcon_ran_dec = lt_data-value.

            APPEND  ls_wa TO lt_itab."对于这个例子,excel表有3列,append要加在最后一列.
            CLEAR  ls_wa.
        ENDCASE.

      ENDLOOP.

      MODIFY **** FROM TABLE lt_itab.

      IF sy-subrc = 0.

        MESSAGE s000(***) WITH '导入并更新****成功'.

        COMMIT WORK.

      ELSE.

        MESSAGE s000(***) WITH '导入并更新****失败'.

        ROLLBACK WORK.

      ENDIF.

  ENDCASE.

ENDMODULE.                 " UPLOAD  INPUT

结语:

按照上述步骤导入就可以了,代码可能略显粗糙,主要提供思路不是最终版,我的代码有个缺点,这种方法导入就直接更新底表了,查看数据需要重新进此维护试图,期待大神改进方法,把导入的数据放入”新条目“的内表中去用标准保存。

  • 13
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C++中的vector是一种动态数组,可以存储不同类型的元素。sort函数是C++ STL库中的一个算法函数,用于对容器中的元素进行排序。该函数可以接受三个参数,分别是要排序的容器的起始迭代器、结束迭代器和一个比较函数。 在引用中的例子中,使用sort函数对vector容器中的元素进行排序。sort函数默认使用小于号运算符(operator<)进行比较,因此默认情况下是按照升序对容器中的元素进行排序。 在引用中的例子中,定义了两个比较函数GreaterSort和LessSort,分别用于降序和升序排序。通过传入这些比较函数作为sort函数的第三个参数,可以实现自定义的排序方式。 在引用中的例子中,使用greater<int>()作为sort函数的第三个参数,实现了对容器中元素的降序排序。而没有传入第三个参数时,默认按照小于号运算符进行升序排序。 因此,C++中的vector容器可以通过sort函数进行排序,并且可以根据需要使用默认比较函数或自定义比较函数来实现不同的排序方式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [C++中,结构体vector使用sort排序](https://blog.csdn.net/zhouxun623/article/details/49887555)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [C++vector容器使用sort排序(含升序以及降序)](https://blog.csdn.net/G_matinal/article/details/126769371)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值