sap模块化编程

本文详细介绍了SAP模块化编程的各个方面,包括Function模块的维护与调用、子例程的定义与调试,以及宏和Include程序的使用。通过模块化编程,可以提高程序的透明度、代码重用性和维护性,简化调试过程。重点讲解了Function Group、参数接口、子例程的参数传递以及宏的使用场景。
摘要由CSDN通过智能技术生成

目录

一、概览

简介:

包括:

参数(接口):

二、Function(函数)

简介:

Function Group的维护:

function的维护:

Function的调用:

常用Function:

三、子例程

概述:

定义:

调用:

子例程的调试:

四、宏

五、Include程序(子程序)


一、概览

简介:

       把部分源代码储存到一个模块里封装成一个特定的功能,是程序的一部分,也可以为多个程序调用。优势:提高程序透明度,提高代码重用,简化程序维护,方便程序调试。

包括

      函数、子例程、宏、类。

参数(接口)

      用于在程序和模块之间交换数据,编写模块的时候已经决定了可以使用的参数,常用的有输入、导出、变更三种参数。

二、Function(函数)

简介:

       具有全局可见性并且只能在Function Group中定义并使用。Function Group可以包含多个对某一类对象操作的函数,专门用作Function的主程序,但不能直接运行。

Function Group的维护:

se37

  se80

function的维护:

       除了三个参数外,还有sy-subrc异常返回值。类型:常规函数模块(本系统都可调用)、远程启用模块RFC(可以在其他系统中调用,包括非SAP系统,要sm59中指定一个目的地)、更    新模块(主要用于数据库的更新,大批量)。

        异常:函数模块可引起异常,所以必须在接口中声明异常,为其选择一个名称,否则程序会终止。触发异常:RAISA<exception>,若有异常<exception>,则直接返回程序,若未列出该异常,则程序会因运行时错误而终止。

      源代码:FUNCTIONENDFUNCTION,写在注释以下。

      调试:SE37,点测试按钮或F8,显示运行时间和异常。

      

        

Function的调用:

        CALL FUNCTION调用,Function名称在‘’之中且大写;在EXPORTING块中,系统会将值传递给Function的导入参数,在IMPORTING块中,可使用导出参数访问调用结果,【和定义时正好相反】。

       异常(EXCEPTIONS)处理:会取消对Function的处理,返回调用程序;会返回sy-subrc,同时指定OTHERS。

        

常用Function:

  • GUI_DOWNLOAD                                    下载文件中的数据
  • GUI_UPLOAD                                          上载数据到文件里
  • WS_FILENAME_GET                               获得文件名
  • CLOI_PUT_SIGN_IN_FRONT                  将负号前置, SAP默认将负号放在数字后面
  • CONVERSION_EXIT_ALPHA_INPUT      数字串前补0

三、子例程

概述:

      是源代码里具有一定独立功能的模块单元。类型:1.内部子例程:与调用程序位于同一个程序中;2.外部子例程。注意:子例程应避免使用主程序的变量。

定义:

       用PERFORM调用,子例程可以访问主程序中所有数据对象且其定义不能互相嵌套,一般定义在程序的末尾。

FORM <subroutine> [<pass>].

   <statement block>

ENDFORM.

       

        形参:定义期间用form语句定义的参数。

        实参:调用期间用perform语句指定的参数。实参和形参数量要一致。

        参数传递:将主程序变量传递给子例程形式参数。 类型:1、值传【改变子例程中参数变量的值,不影响外部程序实际变量的值】;2、引用传【若改变参数变量的值,则实际变量的值也发生变化】;3、值传并返回结果【传递参数的方式同值传递相同,但在子例程执行过程中,变量值不改变,而结束执行后,把变量的最终值返回】。类型仅需了解

       参数类型声明:可以通用类型(TYPE ANY),也可以指定类型但实参形参类型要一致,还有是结构体和内表类型的形参必须要用指定类型。

        

引用传
值传
 值传并返回结果

       全局变量:主程序中定义的变量,在整个主程序和调用的每个子 例程中均可以进行处理。

       局部变量:子例程中定义的变量,只能在子例程中使用。

       注意:当全局变量和局部变量同名时,在子例程中的处理只影响局部变量;在子例程中改变了全局变量的值,但其值仅存在于子例程中。

调用:

        PERFORM <subroutine> [USING <actual input list>] [CHANGING <actual input list>]…

        调用指定程序(外部)中的子例程:PERFORM form IN PROGRAM prog

        通过Tcode调用程序:CALL TRANSACTION Tcode

        

       使用SUBMIT方法调用另一个程序:

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

子例程的调试:

        断点:当运行结果没有达到目的,将断点打到自己认为错误的语句上,然后执行看每一步的结果,找到真正错误的地方。

         

       在调试界面可以按F9创建断点指定语句来调试。

       VA03订单界面,tcode一个/h进入调试状态。

四、宏

      主要应用于同一程序中某些重复的运算,以简化代码。

DEFINE INCREMENT.    "INCREMENT为宏的名称。
   ......
END-OF-DEFINITION.

       通过&N(N为索引,数字)接收传入的参数,不需要定义接受参数的类型及格式;最多可以包含九个;只能被本程序中定义于宏后面的语名所调用,一般定义于程序最开始;宏不可以调试。

 

例子:当iv_base = 'X'时,clientdata-matl_group  =  ls_mat-matkl

DEFINE set_field_value.
    IF &3 = 'X'.
      &1 = &2.
    ENDIF.
  END-OF-DEFINITION.

set_field_value clientdata-matl_group ls_mat-matkl iv_base.  

 

五、Include程序(子程序)

       一般在主程序中通过一些路径来创建,可以使用Include加载另一个程序,通常用于共享数据项的定义,一般不包含执行语句,作用:使得主程序代码量大大减少。

        子例程也可以建在Include程序。

  包含的程序中不能包含PROGRAM REPORT语句

  包含程序不能调用自身

  包含的程序必须包含完整语句

创建
创建,命名前缀要与主程序一致
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值