博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
子程序的建立及调用
阅读量:7238 次
发布时间:2019-06-29

本文共 2253 字,大约阅读时间需要 7 分钟。

     ABAP子程序(Subrouting)是包含在程序中的一段具有一定功能的代码,能够将某个功能单独作业一个小程序包含在主程序中,以方便程序分析及阅读。特别一一些程序中多次用到的功能,可以简化代码,增加程序的可读性且便于维护。

   1.子程序的定义

  通过FORM...ENDFORM语句可以实现子程序的定义,通过PERFORM语句来实现子程序的调用。

FORM WELCOME.
  WRITE:'HELLO SAP'.
ENDFORM.          

   2.子程序接口参数的定义及使用

  子程序实现了将某段功能的封装处理,那么子程序怎样实现在ABAP程序中其他变量的数值的交换呢?可以通过定 义子程序接口来实现,该方法共包括三种模式。

2.1 FORM TABLES itab1...itabn:以表的方式传输数据。

DATA:BEGIN OF TAB OCCURS 0,

     NAME(10TYPE C,
  END OF TAB.
TAB-NAME 'SANLLY'.
APPEND TAB.
PERFORM TABLES TAB.
FORM TABLES STRUCTURE TAB.
  WRITE:X-NAME."输入:SANLLY
ENDFORM.   

2.2 FORM TABLES USING[VALUE(p1)...pn]:向子程序中直接传输参数,该传输值在子程序中不可改变

DATA:STR1(10TYPE C,

     STR2(20TYPE C.
STR1 'hello'.
STR2 'sap'.
PERFORM CON_STR USING STR1 STR2.

FORM CON_STR USING S1
                   S2.
 DATA:STR_ALL(20TYPE C.
 CONCATENATE S1 S2 INTO STR_ALL.
 WRITE:/ STR_ALL."输出:hellosap
 ENDFORM.

 2.3 FORM CHANGING [VALUE(p1)...pn]:向子程序传输表或参数,程序执行的结果可以通过该表或参数返回给供主程序

DATA:NUM TYPE VALUE 10.

PERFORM ADD_VALUE CHANGING NUM.
WRITE:NUM."輸出:20
FORM ADD_VALUE CHANGING NUM.
  NUM NUM + 10.
ENDFORM.        

 3.調用指定程序中的子程序

不同ABAP程序中的子程序是可以共用的,通過ABAP語句PERFORM form IN PROGRAM prog能夠調用指定程序中的子程序,並執行該子程序中包含的功能。

*例如一程序名:ZTEST,它包含一子程序ADD_VALUE 与上例结构一致

DATA:NUM2 TYPE VALUE 10.

PERFORM ADD_VALUE CHANGING NUM2
                  IN PROGRAM ZTEST2.
WRITE:NUM."调用子程序加10,输出值为20.

4.通过Tcode調用指定程序中的子程序

  在SAP 业务中,通常会将程序与Tcode绑定以方便记忆.同样,在ABAP中可通过语句CALL来实现对某TCODE中相对应的子程序的调用,相关语法请参考以下代码:CALL TRANSACTION TCODE.

CALL TRANSACTION 'ICON' AND SKIP FIRST SCREEN.  "调用TCODE:ICON并展开初始界面。

5. 使用SUBMIT方法调用另一程序

  在ABAP中可以直接调用具体程序来实现该程序的所有功能。使用语句SUBMIT可以直接通过程序名来调用程序,并提供程序执行中所需要输入的字段及参数,其语法及属性如下:

     SUBMIT <程序名>.

     ...USING SELECTION-SCREEN <SCR>.   "调用子屏幕
     ...IVA  SELECTION-SCREEN.       "显示所调用程序的初始屏幕
     ...AND RETURN.    "调用指定程序执行后可返回上一屏幕

 调用某一程序语法如例:

SUBMIT ZTEST.

VIA SELECTION-SCREEN
USING SELECTION-SCREEN 1000
AND RETURN.

 

 

 

***ABAP宏的应用

宏(Macros)是一段独立的代码,能实现数据的运算与输出,功能与子程序类似,主要用于同一程序中某些重复的运算,以简化代码,其定义语法如下:

       DEFINE INCREMENT.    "INCREMENT为自定义宏的名称。

       ......
       END-OF-DEFINITION.

对宏的参数传递通过&N来实现,N为整数,即调用该宏的参数顺序。

DEFINE INCREMENT.   "定义宏
  ADD TO &1.
  WRITE/ &1.
  WRITE/ &2.
END-OF-DEFINITION.
DATA:NUMBER  TYPE VALUE 1,
     STR(10TYPE VALUE 'HELLO SAP'.
INCREMENT NUMBER STR.   "调用宏

与子程序不同的是,宏通过&N接收传入参数,不需要定义接收参数的类型及格式。宏只能被本程序中定义于宏后面的语句所调用,宏一般定义于程序最开始,而子程序则可以放在程序中的任意位置。

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/sanlly/p/3230687.html

你可能感兴趣的文章
3和b
查看>>
Solr4:加入中文分词IKAnalyzer2012 FF
查看>>
Java 容器集合框架概览
查看>>
Linux echo命令
查看>>
用C#一步步创建Window Service (转)
查看>>
javascript library
查看>>
Mono 3.0.12 支持可移植类库
查看>>
js操作label,给label赋值,和取label的值
查看>>
MySQL主从复制与读写分离
查看>>
BZOJ 2049: [Sdoi2008]Cave 洞穴勘测 (动态树入门)
查看>>
解决/dev/fb0无法打开的问题
查看>>
勤快的程序猿都没啥前途的,赶紧改掉你的坏毛病吧!
查看>>
OpenCV学习(9) 分水岭算法(3)
查看>>
Android WebView漏洞(转)
查看>>
ExtJS4.2:自定义主题 入门
查看>>
【Android】事件输入系统-代码层次解读
查看>>
js 对文件操作
查看>>
MySQL 5.6学习笔记(数据表基本操作)
查看>>
复制控制---复制构造函数
查看>>
bash把所有屏幕输出重定向到文件并保持屏幕输出的方法
查看>>