ABAP模块化编程 FORM 传递参数的方法。

子程序用 using 和 changing 语句 传递参数 ,其方法共分为三种。

1.call by value : 传入参数实参和传出参数的虚参有不同的物理内存。

使用using 关键字传递参数时与value语句一起搭配使用的情况。

例子:

DATA:GV_VAL TYPE C LENGT 20 VALUE 'CALL BY VALUE TEST'

PERFORM CALL_BYVALUE USING GV_VAL.

FORM CALL_BYVALUE USING VALUE (P_VAL)
    WRITE P_VAL .
ENDFORM. 

2.call by reference : 共有相同的物理内存并且互相传递地址。

使用changing 关键字传递参数时的情况,此时会修改传递到程序的参数值。

DATA: GV_VAL TYPE C LENGTH 30 VALUE 'Call by reference Test'.

write / gv_val.

PERFORM CALL_BYVREF CHANGING GV_VAL.

WRITE / GV_VAL.

FORM CALL_BYVREF CHANGING P_VAL.

P_VAL = 'Value is changed'

endform. 

3.call by value and result : 传入传出变量语句执行时返回变更后的值。拥有不同的物理地址。

using 与 value 语句 一起搭配使用,则无法修改子程序中的实参值,但是changing 语句与value 语句 一起配套使用时,

当正常结束子程序时会修改实参值。

DATA: GV_VAL1 TYPE I VALUE 2.

DATA:GV_VAL2 TYPE I VALUE 3.

DATA: GV_SUM TYPE I.

PERFORM SUM_DATA USING GV_VAL1 GV_VAL2

    CHANGING GV_SUM.

WRITE : / 'Result is :' , gv_sum.

FORM SUM_DATA USING VALUE(P_VAL1)

                                VALUE(P_VAL2)

                            CHANGING VALUE(P_SUM).

P_SUM =  P_VAL  +  P_VAL2.

ENDFORM.

参数与结构体

DATA : BEGIN OF GS_STR,

            COL1 VALUE 'A',

            COL2 VALUE 'B',

ENDOF GS_STR.



PERFORM WRITE_DATA USING GS_STR.



FORM WRITE_DATA USING PS_STR STRUCTURE GS_STR.

    WRITE: PS_STR-COL1 , PS_STR-COL2.

ENDFORM.

参数与内表:

参数还可以为内表 , 当子程序参数为内表的时候也可以使用关键字 using changing .

TYPES: BEGIN OF T_STR,

COL1 TYPE C ,

COL2 TYPE I,

END OF T_STR.



TYPES: T_ITAB TYPE TABLE OF T_STR.



DATA: GS_STR TYPE T_STR,

            GT_ITAB TYPE T_ITAB.



GS_STR-COL1 = 'A'.

GS_STR-COL2 = 1.

APPEND GS_STR TO GT_ITAB.



PERFORM TEST_ITAB USING GT_ITAB.



FORM TEST_ITAB USING PT_ITAB TYPE ITAB



READ TABLE PT_ITAB WITH KEY COL1 = 'A' INTO GS_STR.



IF    SY-SUBRC EQ 0 .

    WRITE : GS_STR-COL1 , GS_STR-COL2.

ENDIF.

ENDFORM.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值