python和abap的关系_ABAP模块化函数

类似于C中的函数,java中的方法。

ABAP中的方法

创建和调用子程序

格式:

FROM#开始

。。。。#函数内容

END FORM#结束

调用子程序(即函数)

用REPORT调用子程序

例如

REPORT test.#调用子程序

FROM test.#创建子程序

WRITE “test”.

END FORM

子程序的参数

子程序可以使用Using和Changing语句来传递参数

里面有三种不同的传递方式

CALL BY VALUE :传入的实参和形参有不同的物理地址

CALL BY REFERENCE:有相同的物理地址

CALL BY VALUE AND RESULT :传入和传出语句执行后返回的是变更后的值,有不同的物理地址。

CALL BY VALUE是指在USING和VALUE两个关键字一起使用的时候,这里事先要先定义好参数,即形参value1,就需要先定义一个value1,不像java可以直接定义形参,而且此时的value1在FORM中是局部变量。

例如:

DATA:value1 TYPE c LENGTH 20 VALUE “11111111”.#定义变量

FORM test USING VALUE(value1).#创建子程序

WRITE value1.

ENDFORM.

CALL BY REFERENCE:这个是指用用CHANGING关键字传递参数的情况,这时候就会更改传到子程序的参数值。

例如:

DATA:value1 TYPE c LENGTH 20 VALUE “11111111”.#定义变量

WRITE / value1.

PERFORM test CHANGING value1.

WRITE / value1.

FORM test CHANGING(value1).#创建子程序

value1 = “22222222”.

ENDFORM.

前后两次的write的值会不一样,调用了子程序后value1的值就被改变了。使用USING替换CHANGING,结果也是一样,前面USING后面的FORM中使用CHANGING也不会发生改变,总结来说就是不在FORM中使用VALUE语句,USING和CHANGING的功能其实是相同的,但是为了区分在使用USING的时候要加上VLAUE一起搭配使用。

CALL BY VALUE AND RESULT,USING 和VALUE语句一起使用的时候不会改变子程序中的实参,但是CHANGING关键字和VALUE关键字一起使用的时候,在程序的结束时候就会修改实参值。

例如:

DATA:value1 TYPE i LENGTH 20 VALUE “1”.#参数1

DATA:value2 TYPE i LENGTH 20 VALUE “2”.#参数2

DATA:value3 TYPE i LENGTH 20.#参数3

PERFORM test USING value2 value3 CHANGING value3.

WRITE / value3.

FORM test USING VALUE(value1) VALUE(value2)CHANGING VALUE(value3).#创建子程序

value3 = value1 + value2.

ENDFORM.

注意:value关键字就是value,value语句是指定义变量时必须使用value给初始值。

定义参数的数据类型

可以使用like和type定义数据类型。

例如:

使用type定义类型

FORM test CHANGING value1 TYPE i.

使用like定义类型

FORM test CHANGING value1 LIKE value2.

使用like就是定义value1与value2一样的数据类型

注意:这里定义的类型需要和value语句中定义的类型相同不然会报错。

虚参数可定义所有的数据类型,所以也可以定义为结构体,即java中的类,使用STRUCTURE定义数据类型为结构体。

例如:

DATA:BEGIN OF value1,#定义结构体

col1 VALUE “1”,

col2 VALUE “2”,

END OF value.

PERFORM test USING value.

FORM test USING value STRUCTURE value1.#创建子程序

WRITE:value1-col1,value1-col2.

ENDFORM.

调用程序外部的子程序

使用PERFORM test IF FOUND.

调用其他程序的子程序的时候需要在后面加一个IF FOUND语句检查是否有这个子程序。如果没有加这个语句,当子程序不存在的时候就会报错。

调用内部程序的子程序的时候就不需要加语句,直接PREFORM就行。

依次调用子程序

do 2 times.

PERFORM SY-index of value1 value2.

ENDDO.

idx为调用顺序的名字,这里调用的只能是内部子程序,并且不能有参数。

而且这里的调用的一次只调用一个,就是第一次调用value1,第二次调用value2,所以这里的do需要循环两次,而不是输出两次value1和value2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值