ABAP74新特性.docx
- 文档编号:8942651
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:21
- 大小:55.36KB
ABAP74新特性.docx
《ABAP74新特性.docx》由会员分享,可在线阅读,更多相关《ABAP74新特性.docx(21页珍藏版)》请在冰点文库上搜索。
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(
2.
2.WRITE:
4.
3.ENDLOOP.
[plain]viewplaincopyprint?
1.READTABLEitabassigningfield-symbol(
行定义方便了我们的使用,在表中它会自动根据读取的表类型定义相应的工作区类型。
但是使用这种方法
注意作用域问题。
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-SYMBOLS
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)))).
v/span>dref
这个程序定义了两个结构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
1©
拿匚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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ABAP74 特性