zoukankan      html  css  js  c++  java
  • ABAP 程序/接口调用其他程序的数据

    在ABAP遇到的业务场景中,可能会遇到一种情况,需要调用其他报表的数据来发送或者二次加工,这个时候又不想对源程序做大的改动、有以下几种思路解决。

    1.修改源程序,将需要展示的数据存储到DB中,然后主程序再从DB中读取;(增加存储开销)

    2.Submit配合EXPORT/IMPORT :将数据临时存放到内存中,然后主程序再从内存中读取,及时Free Memory ID;(增加内存开销)

    3.修改主程序和源程序的逻辑,增加耦合;(后期运维困难)

    4.Copy出源程序的代码逻辑后,将源程序大卸八块,只要逻辑不变,随便怎么改就要能跑起来就行;(推荐这一种)

    下面推荐第二种方法:

    源程序【被调用程序】:

     1 *&---------------------------------------------------------------------*
     2 *& Report  ZCHENH072
     3 *&
     4 *&---------------------------------------------------------------------*
     5 *&
     6 *&
     7 *&---------------------------------------------------------------------*
     8 
     9 REPORT zchenh072.
    10 PARAMETERS:p_call TYPE c NO-DISPLAY. " 被调用的标志
    11 
    12 IF p_call IS INITIAL.
    13   WRITE:/,'未被其他程序调用'.
    14 ELSE.
    15 *  WRITE:/,'被其他程序调用开始'.
    16 
    17   DATA:lv_key TYPE i,
    18        lv_value TYPE string,
    19        BEGIN OF lt_tab OCCURS 0,
    20          key TYPE i,
    21          value TYPE string,
    22          END OF lt_tab.
    23   DO 3 TIMES.
    24     lv_key = sy-index.
    25     lv_value = '测试值'.
    26     lt_tab-key = lv_key.
    27     lt_tab-value = lv_value.
    28     APPEND lt_tab.
    29   ENDDO.
    30   EXPORT lt_tab TO MEMORY ID 'EXPORTID'.
    31 *  WRITE:/,'被其他程序调用结束'.
    32 ENDIF.

    接口【主程序】:

     1 *&---------------------------------------------------------------------*
     2 *& Report  ZCHENH072_1
     3 *&
     4 *&---------------------------------------------------------------------*
     5 *&
     6 *&
     7 *&---------------------------------------------------------------------*
     8 
     9 REPORT zchenh072_1.
    10 DATA:BEGIN OF lt_tab OCCURS 0,
    11         key TYPE i,
    12         value TYPE string,
    13       END OF lt_tab.
    14 
    15 
    16 SUBMIT zchenh072 WITH p_call = 'X'
    17                   AND RETURN.
    18 IMPORT lt_tab FROM MEMORY ID  'EXPORTID'.
    19 FREE MEMORY ID 'EXPORTID'.
    20 BREAK-POINT.


    此处注释掉Write的原因,请自行尝试后体会.

    使用时注意以下几点:

    1.export与import两边的内表(包含内表名称),字段结构(包括长度/内型/小数位数/字段的多少)保持完全一致,建议Copy源程序中的内表到主程序【接口】中,或SE11定义全局结构和内表。

    2.Submit后要and return,将数据返回到主程序中。

    3.该方法缺点:当后期源程序逻辑变动或者内表结构发生改变,风险极大,不轻易推荐使用。

    欢迎访问我的博客! http://www.cnblogs.com/1187163927ch/
  • 相关阅读:
    可空类型转换为不可空的普通类型
    如何使用AspNetPager分页控件和ObjectDataSource控件进行分页
    TFS映射后丢失引用的问题
    (很好用)JS时间控件实现日期的多选
    取两个日期之间的非工作日的天数(指的是周六、周日)
    在日期格式化的时候提示错误:Tostring没有采用一个参数的重载
    Linq返回的集合类型不是已有的表格类型时的写法(谨记:列表的时候用)
    系统缓存全解析6:数据库缓存依赖
    实现文本框动态限制字数的实现(好方法)
    实现GridView内容循环滚动
  • 原文地址:https://www.cnblogs.com/1187163927ch/p/10307346.html
Copyright © 2011-2022 走看看