ABAP 7.4新特性(一):行内定义 Inline Declarations

2016-09-20-更:

发现个坑,比如  SELECT SINGLE *
    INTO @DATA(WA_WMJXRW)
    FROM ZTA_WMJXRW
    WHERE ZJXDH @RLMOB-ZJXDH.  当这段代码在一个循环或者重复执行function里的话,如果第一次成功出数据,

第二次没有找到数据的话用IF WA_WMJXRW IS INITIAL判断会为假!!!! 还是用sy-subrc判断吧

以前我们要用一个变量的时候,需要在使用语句的前面先定义。现在,可以在使用的时候就定义了。

比如说我们经常要预先定义表的工作区,然后在loop时使用。现在可以在loop的时候就定义对于表的工作区了。

以前:

DATA itab TYPE TABLE OF scarr.
SELECT * FROM scarr into TABLE itab.
DATA wa LIKE LINE OF itab.
READ TABLE itab WITH KEY carrid = 'LH' INTO wa. 
现在:

DATA itab TYPE TABLE OF scarr.
SELECT * FROM scarr into TABLE itab.
READ TABLE itab WITH KEY carrid = 'LH' INTO DATA(wa). "行内定义(inline declaration)变量
LOOP AT同理,注意行内定义的变量作用域和以前定义的是一样的。

又比如在方法中接收返回变量时:

原:

	DATA a1 TYPE.....
	DATA a2 TYPE...
	oref->meth( IMPORTING p1=a1
			  IMPORTING p1=a2
			.... )

现在:

	oref->meth( IMPORTING p1 = DATA(a1)
			  IMPORTING p1=  DATA(a2)
			.... )

对于field symbols也是支持行内定义的。

以前1: 

DATA a TYPE string VALUE 'test'.
FIELD-SYMBOL <fs>.
ASSIGN  a to <fs>.
        现在:

DATA a TYPE string VALUE 'test'.
ASSIGN  a to FIELD-SYMBOL(<fs>).
还可以用在读取内表中:

LOOP AT itab ASSIGNING FIELD-SYMBOL(<line>) where carrid = 'LH'. "

   WRITE:<line>.

ENDLOOP.

READ TABLE itab assigning field-symbol(<line2>) INDEX 1.

行内定义方便了我们的使用,在内表中它会自动根据读取的内表类型定义相应的工作区类型。但是使用这种方法注意作用域问题。


     










评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值