ABAP开发基础知识:11)子程序的建立与调用

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

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

      1.子程序的定义

       通过FORM...ENDFORM语名可以实现子程序的定义,通过PERFORM语句来实现子程序的调用。
       [For Example]
     
PERFORM welcome. "调用子程序
      FORM welcome.      "定义子程序
         WRITE / 'subrouting'.
      ENDFORM.

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

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

      1)FORM TABLES itab2...itabn:以表的方式传输数据。
      [For Example]
      DATA:BEGIN OF staff OCCURS 0,
         name(10) TYPE C,
      END OF staff.

      staff-name = 'jack'.
      APPEND staff.  "对内表赋值


      PERFORM u TABLES staff. "输出jack.

      FORM u TABLES x STRUCTURE staff.
        WRITE:/ x-name.
      ENDFORM

       2)FORM TABLES USING [VALUE(p1)...pn]:向子程序中直接传输参数,该传输值在子程序中不改变。
       [For Example]
       DATA:str1(10) TYPE C,
               str2(10) TYPE C.
       str1 = 'Hello'.
       str2 = 'SAP'.

       PERFORM CON_STR USING str1 str2.

       FORM CON_STR USING s1 s2.
         DATA:str_all(20) TYPE C.
         CONCATENATE s1 s2 INTO str_all.
         WRITE:/ str_all.
       ENDFORM.

       3)FORM CHANGING [value(p1...pn)]:向子程序传输表或参数,程序执行结果可通过该表或参数返回给供主程序。
       [For Example]
       DATA:num TYPE I 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能够调用指定程序中的子程序,并执行子程序中包含的功能。
      [For Example]
      *例如一程序名:ZTEST,它包含一个子程序ADD_VALUE与上例结构一致
      DATA:num2 TYPE I VALUE 10.
      PERFORM ADD_VALUE CHANGING num2 IN PROGRAM ZTEST.
      WRITE:num2."调用子程序加10,输出值为20.

      4)通过TCode调用指定程序中的子程序

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

     [For Example]
     CALL TRANSACTION 'ICON' and skip first screen.  "调用TCODE:ICON并展开初始界面。

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

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

     调用某一程序语法如:
     SUBMIT ZTEST.
       VIA SELECTION-SCREEN
       USING SELECTION-SCREEN 1000
       AND RETURN.

 


     


    

目录
相关文章
|
7月前
|
程序员
开发语言漫谈-ABAP
ABAP是SAP公司专门用于SAP软件环境的专门语言
|
SQL 设计模式 前端开发
【置顶】SAP ABAP开发实战——从入门到精通系列目录
本文章为SAP ABAP开发实战——从入门到精通系列的目录以及关于该教程的后续写作计划表
1676 0
【置顶】SAP ABAP开发实战——从入门到精通系列目录
|
BI
SAP ABAP在线预览文档对象的开发实现
应用场景:有些定制化开发(报表/功能增强等)完成之后,客户需要将其操作手册或者相关文档放在某个报表的初始画面,供实际操作者在线查阅,当然这个功能也同样类似于模板的下载,这里就以在线预览(直接打开)为例进行说明。
231 0
|
前端开发 JavaScript 数据库
如何使用 Restful ABAP Programming 编程模型开发一个支持增删改查的 Fiori 应用(二)
Restful ABAP Programming 编程模式是 ABAP 这门编程语言在不断向前进化的过程中,诞生的一门新的编程模型,简称为RAP模型。
164 0
如何使用 Restful ABAP Programming 编程模型开发一个支持增删改查的 Fiori 应用(二)
|
程序员 BI
也谈SAP业务顾问如何避免被ABAP开发顾问怒打
也谈SAP业务顾问如何避免被ABAP开发顾问怒打
也谈SAP业务顾问如何避免被ABAP开发顾问怒打
abap开发function module时使用tables传递参数报错过时的解决方法
如下图,我写了一个Function Module我要在tables中添加一个参数TABLES参数已过时不管怎么点击保存按钮,一直报错,怎么办呢?不管是不是过时,狂点回车,就保存了
1749 0
ABAP开发基础知识:1) ABAP基础程序类型(ABAP Elementary Data Types)
ABAP程序共包含8种基本数据类型定义,下表 数据类型名称 描述 属性 C Character Text(字符类型) 默认长度=1,默认值=blank,最大长度无限制 N Numeric Text(数字类型) 默认长度=1,默认值=“0.
853 0
ABAP开发基础知识:2) 变量的声明(Declaring Variables)
本篇文件主要讲解的是在ABAP编程过程中如何声明变量。     1.按类型定义变量     ABAP的变量需要通过关键字DATA进行声明,当同时声明多个变量时,需要在DATA后面加冒号,如“DATA:”,每个变量可以分配默认值,使用"VALUE ‘默认值’"进行定义,基本语法如下:     DATA  (长度)  TYPE   VALUE  . 例如:定义一个C类型变量“TEST1”,长度为10,默认值为“Hello Sap” 。
1640 0
ABAP开发基础知识:3) 自定义数据类型(User-Defined Data Types)
在前面曾经介绍过,ABAP共有8种基本数据类型,但是这些数据类型属性太为单一,为了方便开发人员操作和理解,SAP还提供自定义数据类型,让用户能自行定义数据类型的名称及属性,通过关键字TYPES能够实现自定义功能,其语法格式与变量定义类似,通过TYPES声明的参数可以被其它常量、变量引用,不能直接赋值。
1077 0
|
索引 机器学习/深度学习
ABAP开发基础知识:12)ABAP宏的应用
宏(Macros)是一段独立的代码,能实现数据的运算与输出,功能与子程序类似,主要应用于同一程序中某些重复的运算,以简化代码,其定义语法如下:        DEFINE INCREMENT.    "INCREMENT为自定义宏的名称。
932 0