ABAP74新特性.docx

上传人:b****8 文档编号:8942651 上传时间:2023-05-16 格式:DOCX 页数:21 大小:55.36KB
下载 相关 举报
ABAP74新特性.docx_第1页
第1页 / 共21页
ABAP74新特性.docx_第2页
第2页 / 共21页
ABAP74新特性.docx_第3页
第3页 / 共21页
ABAP74新特性.docx_第4页
第4页 / 共21页
ABAP74新特性.docx_第5页
第5页 / 共21页
ABAP74新特性.docx_第6页
第6页 / 共21页
ABAP74新特性.docx_第7页
第7页 / 共21页
ABAP74新特性.docx_第8页
第8页 / 共21页
ABAP74新特性.docx_第9页
第9页 / 共21页
ABAP74新特性.docx_第10页
第10页 / 共21页
ABAP74新特性.docx_第11页
第11页 / 共21页
ABAP74新特性.docx_第12页
第12页 / 共21页
ABAP74新特性.docx_第13页
第13页 / 共21页
ABAP74新特性.docx_第14页
第14页 / 共21页
ABAP74新特性.docx_第15页
第15页 / 共21页
ABAP74新特性.docx_第16页
第16页 / 共21页
ABAP74新特性.docx_第17页
第17页 / 共21页
ABAP74新特性.docx_第18页
第18页 / 共21页
ABAP74新特性.docx_第19页
第19页 / 共21页
ABAP74新特性.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

ABAP74新特性.docx

《ABAP74新特性.docx》由会员分享,可在线阅读,更多相关《ABAP74新特性.docx(21页珍藏版)》请在冰点文库上搜索。

ABAP74新特性.docx

ABAP74新特性

ABAP7.4新特性

(一):

行定义InlineDeclarations

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

现在,可以在使用的时候就定义了。

比如说我们经常要预先定义表的工作区,然后在loop时使用。

现在可以在loop的时候就定义对于表的工作区了。

以前:

[plain]viewplaincopyprint?

C

1.DATAitabTYPETABLEOFscarr.

2.SELECT*FROMscarrintoTABLEitab.

3.DATAwaLIKEl_INEOFitab.

4.READTABLEitabWITHKEYcarrid='LH'INTOwa.

现在:

[plain]viewplaincopyprint?

1.

DATAitabTYPETABLEOFscarr.

2.

SELECT*FROMscarrintoTABLEitab.

3.

READTABLEitabWITHKEYcarrid='LH'INTODATA(wa)."

行定义(inlinedeclaration

)变量

LOOPAT同理,注意行定义的变量作用域和以前定义的是一样的又比如在方法中接收返回变量时:

原:

[plain]viewplaincopyprint?

C

1.DATAalTYPE..…

2.DATAa2TYPE...

3.oref->meth(IMPORTINGp仁al

4.IMPORTINGp1=a2

5.....)

现在:

[plain]viewplaincopyprint?

1.oref->meth(IMPORTINGpl=DATA(a1)

2.IMPORTINGp1=DATA(a2)

3.....)

对于fieldsymbols也是支持行定义的。

以前1:

[plain]viewplaincopyprint?

C

1.DATAaTYPEstringVALUE'test'.

2.FIELD-SYMBOL.

3.ASSIGNato.

1.DATAaTYPEstringVALUE'test'.

2.ASSIGNatoFIELD-SYMBOL(vfs>).

还可以用在读取表中:

[plain]viewplaincopyprint?

C

1.LOOPATitabASSIGNINGFIELD-SYMBOL()wherecarrid='LH'.

2.

2.WRITE:

.

4.

3.ENDLOOP.

[plain]viewplaincopyprint?

1.READTABLEitabassigningfield-symbol()INDEX1.

行定义方便了我们的使用,在表中它会自动根据读取的表类型定义相应的工作区类型。

但是使用这种方法

注意作用域问题。

ABAP7.4新特性

(二):

NEW操作符

NEW实例操作符

了解JAVA的知道,我们可以new一个对象实例出来,现在ABAP也可以这样了。

NEW可以创建匿名的数据对象或者类的实例。

匿名就是new出来的对象没有名字。

因为后面不需要这个对象了,只是为

了new出来赋值给左边的对象(赋值也不太对,就指向。

),一次使用,简化代码。

具体参考java

匿名类

一般用到的3种形式后面例子详细解释

1.…NEWdtype(value)...

创建一个类型为dtype的匿名数据对象,然后传值给创建的对象(左操作符)。

2....NEWclass(p1=a1p2=a2...)...

创建一个名为class类的实例,并且传参到实例的构造函数。

3....NEW#(...)...

根据操作数类型创建一个匿名数据对象或者一个类的实例。

女口a=new#(...),new#(...)这里创建的匿

名类是参考a的类型来的,即和a的类型一致。

举例说明一下:

1.new数据对象

before7.4

[plain]viewplaincopyprint?

'匚

1.FIELD-SYMBOLSTYPEdata.

2.DATAdrefTYPEREFTOdata.

3.CREATEDATAdrefTYPEi.

4.ASSIGNdref->*TO.

5.vfs>=555.

with7.4

[plain]viewplaincopyprint?

1.DATAdrefTYPEREFTOdata.

2.dref=NEWi(555).

2.new类实例

before7.4

[plain]viewplaincopyprint?

1.

是一个类名

DATAorefTYPEREFTOclass."这里class

2.CREATEOBJECTorefEXPORTING...

with7.4

[plain]viewplaincopyprint?

1.DATAorefTYPEREFTOclass.

2.oref=NEW#(...).

或者:

[plain]viewplaincopyprint?

<

1.DATAorefTYPEREFTOclass.

2.oref=NEW#(...).

最后举一个综合的例子:

[plain]viewplaincopyprint?

C

1.TYPES:

BEGINOFt_struct1,

2.col1TYPEi,

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

col2TYPEi,

ENDOFt_struct1,

BEGINOFt_struct2,

col1TYPEi,

col2TYPEt_struct1,

col3TYPETABLEOFt_struct1WITHEMPTYKEY,

ENDOFt_struct2,

t_itabTYPETABLEOFt_struct2WITHEMPTYKEY.

DATA(dref)=

NEWt_itab((col1=1

col2-col1=1

col2-col2=2

col3=VALUE#((col1=1col2=2)"VALUE下篇会讲

(col1=3col2=4)))

(col1=2

col2-col1=2

col2-col2=4

col3=VALUE#((col1=2col2=4)

(col1=6col2=8)))).

WRITEvspanclass="L0S55">:

v/span>dref->v/span>*[1]-col1,dref->*[2]-col1."

这个程序定义了两个结构t_struct1禾口t_struct2,其中t_struct2为deepstruct,因为它的col3是参考t_struct1

的表类型。

那么后面那段代码,就是定义了一个dref引用类型变量,该变量指向的

对象类型和t_itab类型相同。

然后利用new和value来为匿名对象初始化数据,然后把这个匿名对象赋值

给dref。

这时候dref就有2行数据了。

可以拷贝这段代码然后断点看dref指向的容。

1able?

「ableContents

A,

 

TableDREF-》*jf

ABihtesStanfard[2x3(24)]*¥

InsertColumnCobmns…

Row

8L1[I⑴]

COL2[FlatStructure]

COL3[InternalTeble]

Structure:

flat¬char1ike

StandardTable[2x2(8)]

2

Struct.lire!

flatEnotchar1

StandardTable

ABAP7.4新特性(三):

VALUE操作符

关于VALUE前面也提到过了,其主要是用来给一个结构、表等对象初始化值。

主要有下面三个方式:

...valuedtype\#()构造一个任意类型的初始值

...valuedtype\#(comp1=a1comp2=a2....)构造一个任意类型的结构体的初始值

...valuedtype\#((...)(...)...)...构造一个任意类型的表的初始值

上面dtype\#意思是可以指定一个dtype的类型或者直接用#,用#时,其类型和被赋值的对象的数据类型一样。

如果value后的dtype是个表,则必须指定key值,或者声明为emptykey。

sen.sap./community/abap/blog/2013/06/27/abap-news-for-release-740--internal-tables-with-empty-key。

Whenyoudeclareastandardtabledataobjectwithoutspecifiyingtheprimarykey,thedefaultkeyis

taken.Thedefaultkeyconsistsofallcharacterandbytelikefieldsofthetablestructrure.Ifthestructurecontainsonlynumericfields,duh!

ThesamewouldhavehappenedifyoudeclaredtheDEFAULT

KEYexplicitly.Butnotethatanemptykeyisnotpossibleforsortedandhashedtables.

Withoutexplicitkeydeclarationthetypewouldnotbeusablefortheinlinedatadeclarationshownhere.

SinceIdon'tcareaboutthekey,Iusetheemptykey.ASORTitabwithoutspecifyingasortkeywilldonothingandproduceawarningfromthesyntaxcheck.

Startingwithrelease7.40youdeclareyourstandardtableseitherwithagoodkeyoranemptykeybutneverwiththechancydefaultkey!

例1

[plain]viewplaincopyprint?

1.

CLASSc1DEFINITION.

2.

PUBLICSECTION.

3.

TYPES:

BEGINOFt_struct.

4.

col1TYPEi,

5.

col2TYPEi,

6.

ENDOFt_struct.

7.

CLASS-METHODSm1IMPORTINGpTYPEt_struct.

8.

ENDCLASS.

9.

10.

CLASSc1IMPLEMENTATION.

11.

METHODm1.

12.

WRITE:

'col1:

',p-col1,'col2:

',p-col2.

13.

ENDMETHOD.

14.

ENDCLASS.

15.

16.

START-OF-SELECTION.

17.

c1=>m1(VALUE#(col1=1col2=2)).

输出就是col:

1col:

2.

例2

[plain]viewplaincopyprint?

'匚

1.DATAitabTYPERANGEOFi.

2.itab=VALUE#(sign=Toption='BT'(low=1high=10)

3.(low=21high=30)

4.(low=41high=50)

5.option='GE'(low=61)).

6.cl_demo_output=>DISPLAY(itab).

&Output

ITAB

SIGNOPTIONLOWHIGH

BT

1

10

I

BT

21

30

I

ET

41

5Q

I

GE

61

0

例3

[plain]viewplaincopyprint?

C

1.TYPESt_date_tabTYPEtableofstringwithemptykey.

2.DATA(date_tab)=VALUEt_date_tab(

3.(|{convd(sy-datlo-1)DATE=environment}|)

4.(|{sy-datloDATE=environment}|)

5.(|{convd(sy-datlo+1)DATE=environment}|)).

6.

6.cl_demo_output=>DISPLAY(date_tab).

s

Output

 

这里DATE=environment是用来格式化日期的,表达式里必须有日期类型d才能使用。

environment对应

的值是CL_ABAP_FORMAT=>D_ENVIRONMENT

另外对日期进行加减时还需conv。

如果第二行不用DATE=environment,那么输出就是20160606这样的

格式。

关于嵌入表达式可以F1看看

例4

为每一行赋值指定列名的好处:

可以指定某一行的某一列都是同一个值而不用每一行都要输入该列值。

Tmnle

ABC

111213

212223

3丄3233

20

ABAP编辑器录昼*报表

■哗丨%召&◎丨

£—2]*室根丸

7

:

ST

拿匚TYPE—

L*上切OFit.

12iE

』types;3EGINOF

13.

14

15

16.

T

iTVPEi,

bTYPEi,

cTYPEi.

三NDOFty.

DAIAitMEIA3LEOFty.

:

t=¥ALUE申

(a

b-1?

-=13)

(a

21b-22c=23)

(i

JIb=c=))・

ty二

X―-3C

 

CL_DEMO_OHTP(JT->dispJayiit..

 

ASAP骗棘器:

显示报表ZYRYTEST

-/■富口m孙龜阳霸

做IST运ih

](b■12c*jb二22c二

J;-CL_DEMO丄EHdisplayit

IQ:

补充:

Constructinnnfaniriterue」tableilfih2fromline拆andcolumnsofaninternaltable

itabI.You仁w〕ofcourseaIsou曲the(OHR1>fP<}\I)I\Goperatortorrmstruett.h^lines*

DATA(itab2)=VALUEt_itab2(FOB阿丹INitab"河旺R£(collc30)

(coll=wa-coL2co!

2=■wa-col3))*

ABAP7.4新特性(四):

CONDSWITCH操作符

在新语法中,可以使用COND、SWITCH来根据逻辑表达式或情况的不同确定指定变量的结果。

语法格式:

...CONDdtype|#(WHENIog_exp1THENresultl

[WHENlog_exp2THENresult2]

[ELSEresultn])...

...SWITCHdtype|#(operand

WHENconst1THENresult1

[WHENconst2THENresult2]

[ELSEresultn])...

[]里可填,THEN后面都是返回的结果。

在SWITCH中operand是一个变量类似caseoperand

例一:

[plain]viewplaincopyprint?

C

1.DATA(time)=CONDstring(

2.WHENsy-timlo<'120000'THEN|{sy-timloTIME=ISO}AM|

3.WHENsy-timlo>'120000'THEN|{CONVt(sy-timlo-12*3600)TIME=ISO}PM

I

4.WHENsy-timlo='120000'THEN|Highnoon|

5.*ELSE

6.).

7.WRITE:

time.

sy='120000'就是时间12点。

程序就是根据sy-timlo是否超过12点然后设置不同的格式赋值给

例二:

[plain]viewplaincopyprint?

:

1.DATA(a)=11.

2.DATA(text)=SWITCH#(a

3.WHEN'11'THEN'11yyagd'

4.WHEN'12'THEN'12dkdkkd'

5.*ELSE

6.).

7.WRITE:

text.

when..

time

A

这段代码就是根据变量a的值,赋不同的值给text。

ABAP7.4新特性(四):

表访问表达式

现在新语法支持itab[]这种类似数组的形式了,不过注意的是如果表不含deepstruct,itab[1][2]是不

允许的,这是和二维数组区别之一。

只能通过itab[1卜colname的形式,也就是说用itab[]一般用来返回某一行的数据,如果你想访问改行的

某一列则加上-和列名即可。

使用主索引访问表

wa=itab[idx].

相当于READTABLEitabINDEXidxINTOwa.

使用次级/二级索引访问表

wa=itab[KEYkeyINDEXidx].

相当于READTABLEitabINDEXidxUSINGKEYkeyINTOwa.这里注意itab必须指定次级索引,key为

次级索引名不是表字段。

举例:

[plain]viewplaincopyprint?

C

1.types:

BEGINOFty,

2.aTYPEi,

3.bTYPEi,

4.cTYPEi,

5.ENDOFty.

6.DATAit2TYPETABLEOFtyWITHKEYa.

7.DATAwalikeLINEOFit.

8.DATAaaTYPESORTEDTABLEOFtyWITHUNIQUEKEYa

9.WITHNON-UNIQUESORTEDKEYsecond_key

10.COMPONENTSbc.

11.

12.aa=VALUE#(

13.

(a=11b=32c=13)

14.

(a=21b=22c=23)

15.

(a=31b=42c=33)).

16.

*wa=it2[1].

17.

wa=aa[KEYsecond_keyINDEX1].

18.

CL_DEMO_OUTPUT=>display(wa).

 

这里aa定义了主索引keya,还定义了二级索引second_key,这个二级索引由字段bc组成

wa-aa[KEYsecondkeyINDEX1].这里指疋了以二级索引secondkey的

方式访问表aa,那么默认是按照升序排列的,所以index1实际上是aa的第二行(B=22最小)。

结果:

@Output

WA

ASC

212223

如果你把第一行的b改为22那么wa就是第一行了,应为b第一、第二行都最小,那么就比较二级所以的C字段,看哪个最小。

使用表KEY访问表

类似上面

wa=itab[KEYkeycoll=...col2=...].

wa=itab[KEYkeyCOMPONENTScoll=...col2=...].

相当于READTABLEWITHTABLEKEYkeyCOMPNENTScol1=..col2=....INTOwa.

注意的是这种方式必须指定完所以构成key的字段。

链/深结构的访问

?

...itab[..

.]-comp

?

...struct-comp[…]...

?

...itab[.

..]【...]...

举个例子

上代码和结果图:

[plain]

viewplaincopyprint?

4

1.

TYPES:

2.

BEGINO

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2