`
JerryWang_SAP
  • 浏览: 1029551 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

一些我工作中经常使用的ABAP新语法和函数,关键字,可以提高工作效率

阅读更多
(1) 直接批量生成数据到ABAP内表里:

* 2017-05-14 7:17PM in Xun's house, Wiesloch

INSERT demo_join1 FROM TABLE @( VALUE #(

( a = 'a1' b = 'b1' c = 'c1' d = 'uu' )

( a = 'a2' b = 'b2' c = 'c2' d = 'uu' )

( a = 'a3' b = 'b3' c = 'c3' d = 'vv' )

( a = 'a4' b = 'b4' c = 'c4' d = 'ww' ) ) ).

(2) 采用内联方式遍历ABAP内表:

DATA address_annos TYPE STANDARD TABLE OF field_anno-annoname

WITH EMPTY KEY.

address_annos = VALUE #(

( 'SEMANTICS.NAME.FULLNAME' )

( 'SEMANTICS.ADDRESS.STREET' )

( 'SEMANTICS.ADDRESS.CITY' )

( 'SEMANTICS.ADDRESS.ZIPCODE' )

( 'SEMANTICS.ADDRESS.COUNTRY' ) ).

DATA address_components TYPE STANDARD TABLE OF field_anno-fieldname

WITH EMPTY KEY.

address_components = VALUE #(

FOR address_anno IN address_annos

( VALUE #( fieldannos[ annoname = address_anno ]-fieldname

DEFAULT '---' ) ) ).

(3) 两个内表间数据的复制,两个内表的列结构可以不同,开发人员需要额外传入一个映射表,告诉corresponding关键字,源内表的哪一列应该赋到目标内表的哪一列。

* This is exactly what I want!!

REPORT demo_corresponding_vs_for.

CLASS demo DEFINITION.

PUBLIC SECTION.

CLASS-METHODS:

main,

class_constructor.

PRIVATE SECTION.

TYPES:

BEGIN OF struct,

carrier TYPE spfli-carrid,

connection TYPE spfli-connid,

departure TYPE spfli-cityfrom,

destination TYPE spfli-cityto,

END OF struct.

CLASS-DATA:

itab TYPE HASHED TABLE OF spfli

WITH UNIQUE KEY carrid connid,

result1 TYPE HASHED TABLE OF struct

WITH UNIQUE KEY carrier connection,

result2 TYPE HASHED TABLE OF struct

WITH UNIQUE KEY carrier connection,

result3 TYPE HASHED TABLE OF struct

WITH UNIQUE KEY carrier connection,

in TYPE REF TO if_demo_input,

out TYPE REF TO if_demo_output.

ENDCLASS.



CLASS demo IMPLEMENTATION.

METHOD main.

DATA(iterations) = 10.

in->request( CHANGING field = iterations ).



DO iterations TIMES.



DATA t1 TYPE i.

GET RUN TIME FIELD DATA(t11).

result1 = CORRESPONDING #(

itab MAPPING carrier = carrid

connection = connid

departure = cityfrom

destination = cityto ).

GET RUN TIME FIELD DATA(t12).

t1 = t1 + t12 - t11.



DATA t2 TYPE i.

GET RUN TIME FIELD DATA(t21).

result2 = VALUE #( FOR wa IN itab ( carrier = wa-carrid

connection = wa-connid

departure = wa-cityfrom

destination = wa-cityto ) ).

GET RUN TIME FIELD DATA(t22).

t2 = t2 + t22 - t21.



DATA t3 TYPE i.

GET RUN TIME FIELD DATA(t31).

result3 = VALUE #( FOR wa IN itab (

CORRESPONDING #(

wa MAPPING carrier = carrid

connection = connid

departure = cityfrom

destination = cityto ) ) ).

GET RUN TIME FIELD DATA(t32).

t3 = t3 + t32 - t31.



ENDDO.



IF result1 = result2 AND result1 = result3.

out->write(

|CORRESPONDING: {

CONV decfloat16( t1 / iterations )

WIDTH = 10 ALIGN = RIGHT } Microseconds\n| &&

|FOR: {

CONV decfloat16( t2 / iterations )

WIDTH = 10 ALIGN = RIGHT } Microseconds\n| &&

|FOR CORRESPONDING: {

CONV decfloat16( t3 / iterations )

WIDTH = 10 ALIGN = RIGHT } Microseconds\n|

)->line(

)->display( result1 ).

ELSE.

out->display( `What?` ).

ENDIF.



ENDMETHOD.

METHOD class_constructor.

in = cl_demo_input=>new( ).

out = cl_demo_output=>new( ).

SELECT *

FROM spfli

INTO TABLE @itab.

ENDMETHOD.

ENDCLASS.



START-OF-SELECTION.

demo=>main( ).



(4) DISCARDING DUPLICATES的用法



REPORT demo_corresponding_duplicates.



CLASS demo DEFINITION.

PUBLIC SECTION.

CLASS-METHODS main.

ENDCLASS.



CLASS demo IMPLEMENTATION.

METHOD main.

TYPES:

BEGIN OF line,

a1 TYPE i,

a2 TYPE i,

END OF line,

ntab1 TYPE STANDARD TABLE OF line WITH EMPTY KEY,

ntab2 TYPE SORTED TABLE OF line WITH UNIQUE KEY a1,

BEGIN OF line1,

x1 TYPE i,

x2 TYPE ntab1,

END OF line1,

BEGIN OF line2,

y1 TYPE i,

y2 TYPE ntab2,

END OF line2,

itab1 TYPE STANDARD TABLE OF line1 WITH EMPTY KEY,

itab2 TYPE SORTED TABLE OF line2 WITH UNIQUE KEY y1.



DATA(itab1) =

VALUE itab1( ( x1 = 1 x2 = VALUE #( ( a1 = 1 a2 = 2 )

( a1 = 3 a2 = 4 ) ) )

( x1 = 2 x2 = VALUE #( ( a1 = 1 a2 = 2 )

( a1 = 1 a2 = 4 ) ) )

( x1 = 1 x2 = VALUE #( ( a1 = 1 a2 = 2 )

( a1 = 3 a2 = 4 ) ) ) ).



DATA(itab2) =

CORRESPONDING itab2( itab1 DISCARDING DUPLICATES

MAPPING y1 = x1

y2 = x2 DISCARDING DUPLICATES ).



DATA(out) = cl_demo_output=>new( ).

LOOP AT itab2 INTO DATA(wa).

out->write( wa-y1

)->write( wa-y2

)->line( ).

ENDLOOP.

out->display( ).



ENDMETHOD.

ENDCLASS.



START-OF-SELECTION.

demo=>main( ).



(5) DESCRIBE DISTANCE BETWEEN



REPORT demo_describe_distance.



CLASS demo DEFINITION.

PUBLIC SECTION.

CLASS-METHODS main.

ENDCLASS.



CLASS demo IMPLEMENTATION.

METHOD main.

DATA: BEGIN OF struc,

comp1 TYPE i,

comp2 TYPE x LENGTH 1,

comp3 TYPE c LENGTH 4 VALUE 'Hey',

comp4 TYPE c LENGTH 4 VALUE 'you!',

comp5 TYPE x,

END OF struc.



FIELD-SYMBOLS: <hex> TYPE x,

<result> TYPE c.



DESCRIBE DISTANCE BETWEEN:

struc AND struc-comp3 INTO DATA(off) IN BYTE MODE,

struc-comp3 AND struc-comp5 INTO DATA(len) IN BYTE MODE.



ASSIGN: struc TO <hex> CASTING,

<hex>+off(len) TO <result> CASTING.



cl_demo_output=>display(

|Offset off is { off }.\n| &&

|Length len is { len }.\n| &&

|<result> points to "{ <result> }".| ).

ENDMETHOD.

ENDCLASS.



START-OF-SELECTION.

demo=>main( ).



(6) 全动态方式调用RFC



REPORT demo_rfc_dynamic_dest.



CLASS demo DEFINITION.

PUBLIC SECTION.

CLASS-METHODS:

main.

ENDCLASS.



CLASS demo IMPLEMENTATION.

METHOD main.

DATA:

val_in TYPE string VALUE `val_in`,

val_in_out TYPE string VALUE `val_in_out`,

val_out TYPE string,

msg TYPE c LENGTH 80.



IF sy-uname IS INITIAL.

cl_demo_output=>display(

|Example not possible for anonymous user| ).

RETURN.

ENDIF.



DATA(in) = cl_demo_input=>new( ).

DATA(client) = sy-mandt.

in->add_field( CHANGING field = client ).

DATA(uname) = sy-uname.

in->add_field( CHANGING field = uname ).

DATA(langu) = sy-langu.

in->add_field( CHANGING field = langu ).

DATA(sysid) = sy-sysid.

in->add_field( CHANGING field = sysid ).

DATA(host) = CONV rfchost( sy-host ).

in->add_field( CHANGING field = host ).

DATA(group) = CONV rfcload( 'PUBLIC' ).

in->add_field( CHANGING field = group ).

in->request( ).



DATA(dest) = cl_dynamic_destination=>create_rfc_destination(

logon_client = client

logon_user = uname

logon_language = langu

sid = sysid

server = host

group = group ).



CALL FUNCTION 'DEMO_RFM_PARAMETERS'

DESTINATION dest

EXPORTING

p_in = val_in

IMPORTING

p_out = val_out

CHANGING

p_in_out = val_in_out

EXCEPTIONS

system_failure = 2 MESSAGE msg

communication_failure = 4 MESSAGE msg.



IF sy-subrc <> 0.

cl_demo_output=>display( |Error when calling sRFC.\n{ msg }| ).

RETURN.

ENDIF.

cl_demo_output=>display( |{ val_out }\n{ val_in_out }| ).

ENDMETHOD.

ENDCLASS.



START-OF-SELECTION.

demo=>main( ).



(7) 内联函数line_index



REPORT.



CLASS demo DEFINITION.

PUBLIC SECTION.

CLASS-METHODS: class_constructor,

main.

PRIVATE SECTION.

CLASS-DATA

flight_tab

TYPE STANDARD TABLE OF spfli

WITH EMPTY KEY

WITH UNIQUE HASHED KEY id COMPONENTS carrid connid

WITH NON-UNIQUE SORTED KEY cities COMPONENTS cityfrom cityto.

ENDCLASS.



CLASS demo IMPLEMENTATION.

METHOD main.

DATA idx TYPE TABLE OF i.



idx = VALUE #(

( line_index( flight_tab[ carrid = 'UA'

connid = '0941'

##primkey[id] ] ) )

( line_index( flight_tab[ KEY id

carrid = 'UA'

connid = '0941' ] ) )

( line_index( flight_tab[ KEY id

carrid = 'xx'

connid = 'yyyy' ] ) )

( line_index( flight_tab[ cityfrom = 'FRANKFURT'

cityto = 'NEW YORK'

##primkey[cities] ] ) )

( line_index( flight_tab[ KEY cities

cityfrom = 'FRANKFURT'

cityto = 'NEW YORK' ] ) )

( line_index( flight_tab[ KEY cities

cityfrom = 'xxxxxxxx'

cityto = 'yyyyyyyy' ] ) ) ).



cl_demo_output=>display( idx ).

ENDMETHOD.

METHOD class_constructor.

SELECT *

FROM spfli

ORDER BY carrid, connid

INTO TABLE @flight_tab.

ENDMETHOD.

ENDCLASS.



START-OF-SELECTION.

demo=>main( ).

 

0
0
分享到:
评论

相关推荐

    abap4 程序语法和 格式

    ABAP4中的关键字可以分为四类: - **说明性关键字**: 定义数据类型或数据对象的属性。如 `TYPES`, `DATA`, `TABLES` 等。这些关键字通常在程序初始化阶段由系统处理,用于声明变量等。 - **事件关键字**: 定义程序...

    SAP ABAP4语法

    作为第四代编程语言(4GL),它的语法结构与Visual Basic和Java相似,相比传统的第三代语言如C和PASCAL,ABAP4在设计时更注重提高开发效率和可读性。 ### ABAP4基本语言概述 1. **数据元素声明**:在ABAP4中,你...

    ABAP入门教程试用于初学者,很友好.pdf

    ABAP的数据字典还包括了对标准数据元素的定义,这些数据元素由SAP系统预先定义,并且可以直接在用户程序中使用。 总之,ABAP是一种专门为SAP R/3系统而设计的语言,它具有丰富的数据类型、完整的程序结构和高度集成...

    ABAP语法详解教材

    通过深入学习这本ABAP语法详解教材,开发者不仅能理解每种语法结构的用途,还能学会如何在实际项目中应用这些知识,从而提高在SAP环境下的编程效率和质量。无论是初学者还是经验丰富的开发者,都能从中受益匪浅。

    ABAP开发利器-ZSQLEXPLORER

    ABAP(Advanced Business Application Programming)是SAP系统中的一种编程语言,主要用于开发企业级的...通过熟练运用ZSQLEXPLORER,开发者可以更高效地调试代码,提高工作效率,从而在ABAP开发领域中取得更大的成就。

    带 ABAP 高亮的 Notepad2

    有了对这些文件类型的内置支持,开发者无需频繁切换编辑器,可以在同一个工具中处理所有相关文件,提升工作效率。 此版本的Notepad2还可能包含其他特性,如自动完成、代码折叠、查找替换、宏录制等功能,这些都是...

    ABAP Program Tips

    本文将围绕“ABAP Program Tips”这一主题,深入探讨ABAP编程的一些实用技巧和最佳实践,帮助开发者提升代码质量和效率。 1. **理解ABAP基本语法** ABAP语法基础是任何开发者必须掌握的。它包括数据类型定义、变量...

    一本介绍ABAP的文档

    3. ABAP/4程序语法和格式:遵循特定的语法规则,包括语句结构、变量声明、注释等,保持良好的代码格式有助于提高代码可读性。 4. 输出数据到屏幕:使用WRITE语句将数据输出到用户界面,也可以使用GUI STATUS进行更...

    sap abap经典中文帮助

    2. **ABAP语法** - SELECT语句:用于从数据库中查询数据,是ABAP数据处理的重要部分。 - DATA声明:用于声明变量和内部表,内部表类似于数组,可以存储多行数据。 - FORM和ENDFORM:用于定义子程序,是ABAP中的...

    SAP ABAP 大全

    二、ABAP语法基础 1. 数据类型:ABAP提供了多种数据类型,包括基本类型如CHAR、INT、FLOAT,以及结构化类型如STRING、TABLE等。 2. 变量声明:通过DATA关键字来声明变量,可以指定数据类型和初始值。 3. 控制结构:...

    Abap Editer Theme.zip

    ABAP(Advanced Business Application Programming)是SAP公司开发的一种编程语言,...通过调整颜色、字体和布局,开发者可以根据自己的视觉习惯和工作风格来定制最适合自己的编辑器界面,从而更好地进行ABAP开发工作。

    SAP ABAP 开发

    在SE80中,开发者可以创建、修改和维护各种ABAP对象,如报告、函数模块、表单等。 2. ABAP Editor:是编写代码的地方,具备语法高亮、自动完成、错误检查等功能,提高开发效率。 3. Transactional Data Processing...

    ABAP中文训练手册

    9. **ABAP工作流**:用于定义和管理业务流程,可以自动化处理审批、通知等任务。 10. **RFC(Remote Function Call)**:SAP系统间的通信协议,允许不同系统间调用ABAP函数模块。 11. **BADI(Business Add-In)**...

    sap abap 经典开发入门文档

    9. **ABAP工作区**:理解并使用ABAP工作区进行数据处理,例如在处理大量数据时使用工作区可以提高效率。 10. **Web Dynpro ABAP**:如果想开发现代的SAP UI,Web Dynpro ABAP是关键,它允许创建复杂的Web应用程序。...

    ABAP PA中文教材.zip

    2. **ABAP语法**:学习ABAP的基本语法结构,包括数据类型、变量声明、控制流语句(如IF、LOOP)、函数模块、类和对象等。 3. **报表开发**:掌握如何使用ABAP开发报表,例如员工名单报表、薪资统计报表等,这涉及到...

    ABAP编程开发实例详解

    在“ABAP编程开发实例详解”这个资源中,我们预计会找到一系列实践性的教程,帮助开发者深入理解ABAP语言的核心概念、语法结构以及在实际业务场景中的应用。 1. **ABAP基础** ABAP的基础包括数据类型、变量声明、...

    sub3+ ABAP高亮包

    该插件的核心功能在于代码高亮,它能将ABAP的关键字、数据类型、函数模块等元素用不同的颜色进行标识,提高代码的可读性和美观性。这对于ABAP开发者来说尤其重要,因为ABAP语言本身具有丰富的关键字和结构,良好的...

    abap程序员之路

    熟练使用这些工具能提高你的工作效率。 此外,ABAP的事务码(Transaction Codes)也是日常工作中必不可少的一部分。每个事务码对应一个特定的功能,比如SE38用于运行和调试ABAP程序,SE11用于查看数据字典等。 在...

    abap 中文资料

    ABAP(Advanced Business Application Programming)是SAP公司开发的一种编程语言,主要用于开发和维护SAP系统中的业务应用程序。中文资料对于非英语背景的学习者来说,无疑提供了更方便的学习途径。以下将详细介绍...

    三月 精通 ABAP 编程

    4. **函数模块**:函数模块是ABAP中的可重用代码单元,你可以学习如何定义和调用函数模块,理解输入和输出参数,以及如何使用全局数据。 5. **屏幕处理**:SAP GUI的用户界面设计也是ABAP的一部分。你将学习如何...

Global site tag (gtag.js) - Google Analytics