小工具: 执行文本文件中的代码

代码很简单

但是比较实用

尤其是调试期间

(本意只想执行一些SQL的,后来发现使用的场景还是比较多的

于是就分享一下)

 

比如程序上传到测试机后

突然想用SQL修改一些自定义表中的东西

但是测试机有没有开发权限

又要从开发机改了传一个过来?

把代码写在文本文件中

执行本程序就OK

 

ABAP代码就像一个脚本一样了

测试期间多准备几个”脚本”  谁用谁知道!

效果如下:

外部文本

执行效果:

 

 

代码:

CLASS lcl_sql DEFINITION.
  PUBLIC SECTION.
    TYPES: tt_code TYPE TABLE OF string.

    METHODS:
      "执行外部文件中的SQL代码 方便过滤错误数据
      excute.

  PRIVATE SECTION.
    METHODS:
      invoke_local_prog CHANGING ct_code TYPE tt_code
        EXCEPTIONS no_input input_error.

    DATA:
          gt_code TYPE TABLE OF string.
ENDCLASS.

CLASS lcl_sql IMPLEMENTATION.
  METHOD excute.
    DATA: lt_code TYPE tt_code,
          ls_code TYPE string.

    CALL METHOD invoke_local_prog
      CHANGING
        ct_code     = lt_code
      EXCEPTIONS
        no_input    = 1
        input_error = 2
        OTHERS      = 3.
    IF sy-subrc <> 0.
      CASE sy-subrc.
        WHEN 1.
          MESSAGE ‘获取外部SQL文件路径异常‘ TYPE ‘S‘ DISPLAY LIKE ‘E‘.
          RETURN.
        WHEN 2.
          MESSAGE ‘读取动态SQL异常‘ TYPE ‘S‘ DISPLAY LIKE ‘E‘.
          RETURN.
        WHEN OTHERS.
          MESSAGE ‘加载文件异常‘ TYPE ‘S‘ DISPLAY LIKE ‘E‘.
          RETURN.
      ENDCASE.
    ENDIF.

    IF lt_code IS INITIAL.
      MESSAGE ‘没有从外部文件获取处理代码‘ TYPE ‘S‘ DISPLAY LIKE ‘E‘.
      RETURN.
    ENDIF.
    DATA: class TYPE string,
          oref TYPE REF TO object.
    APPEND `program.` TO gt_code.
    APPEND `class main definition.` TO gt_code.
    APPEND `public section.` TO gt_code.
    APPEND `methods meth.` TO gt_code.
    APPEND `endclass.` TO  gt_code.
    APPEND `class main implementation.` TO gt_code.
    APPEND `method meth.` TO gt_code.

    LOOP  AT lt_code INTO ls_code.
      APPEND  ls_code TO gt_code.
    ENDLOOP.

    APPEND `endmethod.` TO gt_code.
    APPEND `endclass.` TO gt_code.

    GENERATE SUBROUTINE POOL gt_code NAME DATA(prog).
    IF sy-subrc = 0.
      MESSAGE ‘动态调用成功‘ TYPE ‘S‘.
    ELSE.
      MESSAGE ‘生成动态Program异常‘ TYPE ‘S‘ DISPLAY LIKE ‘E‘.
      RETURN.
    ENDIF.

    class = `\PROGRAM=` && prog && `\CLASS=MAIN`.

    CREATE OBJECT oref TYPE (class).

    CALL METHOD oref->(‘METH‘).
  ENDMETHOD.

  METHOD invoke_local_prog.
    DATA: lt_file_table TYPE filetable,
          ls_file_table LIKE LINE OF lt_file_table,
          l_rc TYPE i,
          l_filename TYPE string.

    CALL METHOD cl_gui_frontend_services=>file_open_dialog

*      EXPORTING
*        window_title            =
*        default_extension       =
*        default_filename        =
*        file_filter             =
*        with_encoding           =
*        initial_directory       =
*        multiselection          =

      CHANGING
        file_table              = lt_file_table
        rc                      = l_rc

*       user_action             =
*       file_encoding           =

      EXCEPTIONS
        file_open_dialog_failed = 1
        cntl_error              = 2
        error_no_gui            = 3
        not_supported_by_gui    = 4
        OTHERS                  = 5.
    IF sy-subrc <> 0.

*      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*                 WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

      RAISE input_error.
    ENDIF.

    READ TABLE lt_file_table INDEX 1 INTO ls_file_table.
    IF sy-subrc <> 0.
      RAISE no_input.
    ENDIF.

    l_filename = ls_file_table.
    CALL METHOD cl_gui_frontend_services=>gui_upload
      EXPORTING
        filename                = l_filename

*       filetype                = ‘ASC‘
*       has_field_separator     = SPACE
*       header_length           = 0
*       read_by_line            = ‘X‘
*       dat_mode                = SPACE
*       codepage                = SPACE
*       ignore_cerr             = ABAP_TRUE
*       replacement             = ‘#‘
*       virus_scan_profile      =
*      IMPORTING
*       filelength              =
*       header                  =

      CHANGING
        data_tab                = ct_code

*       isscanperformed         = SPACE

      EXCEPTIONS
        file_open_error         = 1
        file_read_error         = 2
        no_batch                = 3
        gui_refuse_filetransfer = 4
        invalid_type            = 5
        no_authority            = 6
        unknown_error           = 7
        bad_data_format         = 8
        header_not_allowed      = 9
        separator_not_allowed   = 10
        header_too_long         = 11
        unknown_dp_error        = 12
        access_denied           = 13
        dp_out_of_memory        = 14
        disk_full               = 15
        dp_timeout              = 16
        not_supported_by_gui    = 17
        error_no_gui            = 18
        OTHERS                  = 19.
    IF sy-subrc <> 0.

*     Implement suitable error handling here

      RAISE input_error.
    ENDIF.

  ENDMETHOD.
ENDCLASS.

 

调用:

DATA: go_sql TYPE REF TO lcl_sql.
    CREATE OBJECT go_sql.
    go_sql->excute( ).

另外,生成动态程序应该也是有权限的

但是开发的账号一般权限都比较高吧

还有这种东西就别传生产机了

万一  !!!!!

时间: 2024-10-12 16:17:07

小工具: 执行文本文件中的代码的相关文章

Windows 上的 Jetty 小工具

做项目经常遇到需要开发Java应用,我喜欢用Jetty进行开发.部署,主要是由于Jetty的轻量级. Jetty 项目主页:http://www.eclipse.org/jetty/, 最新版9.30刚刚添加对 HTTP/2的支持. 但是Jetty在Windows下部署不是很方便,需要用命令行. 每次都要使用命令行,很是麻烦,于是我打算做一个Jetty的小工具,把命令行操作封装一下,可以在GUI中启动.停止Jetty,可以配置常用参数等. 完成之后的界面如下: 测试代码下载 编译好的可执行文件:

写个js小工具自动生成博文目录

我们在写博客的时候,如果博文里面有目录,会给人结构清晰.一种一目了然的感觉,看目录就知道这篇博文要讲解的内容,并且点击目录标题就可以跳转到具体的内容,这样园友们在看博客的时候就可以很方便地浏览自己感兴趣的内容,但是遗憾的是博客园不支持博文目录的生成,好像也有园友给博客园提建议,希望能够像CSDN那样能够自动生成博文目录,但是不知道是什么原因,博客园一直都没有把这个功能加上去,既然没有,那我就自己做吧,研究了2天,总算是按照自己的设想做出来了,最终效果如下: 下面来介绍一下这个小工具的实现. 一.

Android小工具

公司网络烂,自己又不想findview写很多遍,所以自己写了个小工具,自动findview,生成代码到剪贴版. test: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:backgr

检查SharePoint代码中对象是否释放的小工具

问题 一般继承IDisposable接口的对象, 在使用完成后可以释放对象以免占用过多的资源, 当然也可是使用using语句来完成此操作. 但是当项目很大的时候, 代码也比较多, 我们更多希望有工具来检查项目中是否有类似的对象没有释放. 解决办法 微软其实提供了一个小工具"SharePoint Dispose Checker Tool", 但是很遗憾, 不支持SharePoint 2013, 有需求的朋友可以点击下面的链接查看. 地址: https://gallery.technet.

winform视频教程-任务定时循环执行小工具

有时候,我们可能遇到这样的一种需求,就是需要有一个小工具,在服务器中不断的执行一些任务,那么这样的需求,我们可以做一个windows服务程序,或者做一个winform wpf等小程序,然后小程序里面开启一个线程,在线程里面不断地执行一些代码 那么废话就不多说了,先看截图  www.it404.cn 程序很简单,但是基本的不断循环扫描的功能基本已经有了 首先在formload里面 我们开启一个子线程 private void FormMain_Load(object sender, EventAr

如何通过C#开发调用Skyline软件中提供的小工具

熟悉Skyline的朋友会知道,在TerraBuilder和TerraExplorer Pro软件的安装目录里,提供了很多个小工具(exe程序): 虽然我们看不到这些小工具的源代码,但我们还是可以在自定义的开发环境中来调用它们的: 尤其是可以用来实现一些批量化操作和自动化操作: 常用的小工具: MakeXpl.exe: MakeCPT.exe: Triangulate Irregular Elevation Grid.exe: Convert XYZ ASCII Elevation.exe: C

Black一款让你代码更加规范小工具

Black一款让你代码更加规范小工具 为提高代码质量,其可读性是重要评判标准,为帮助开发者统一代码风格, Python 官方同时推出了一个检查代码风格是否符合 PEP8 的工具,今天介绍Black代码格式化工具. 1.安装 pip install black 安装中遇到问题: 1.当出现如下问题,可以将当前配置环境lib\site-packages里面的pip-10.0.1开头的文件删除. 2.然后终端执行命令: python3 -m pip install --upgrade pip 3.通过

几个数据库的小案例(一):将文本文件中的信息导入数据库的表中

从文本文件添加到数据库用户表的记录(有两个文件:frmMain.cs  SqlHelper.cs  ) //FrmMain.cs//作者:Meusing System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Fo

【分享】小工具大智慧之Sql执行工具

工具概况 情况是这样的,以前我们公司有很多Sql用于完成一些很不起眼但又不得不完成的业务,出于方便就直接在Sql查询分析器里执行,按理说应该写一些专门的工具的,但是这些脚本很多,于是我就写了这样一个小工具,只要Sql可以解决的问题就能用到它了,那么它有什么优点呢 一.以前写好的Sql可以不用怎么更改,只需要将参数部分提取出来按照定好的规范改成一个模版即可,使用工具加载模版时,工具会自动将模块要求的参数提供给用户填写. 二.模版文件里可以配置好连接字符串,这样不用每次都连接数据库,也避免连接错误的