【整理】ABAP 7.40新特性介绍(下)
ABAP 7.40 Quick Reference
9.Strings - 字符串
I. String Templates 字符串模板
A string template is enclosed by two characters “|” and creates a character string.
字符串模板由两个“|”字符括起来,创建一个字符串。
Literal text consists of all characters that are not in braces {}. The braces can contain:
字面文本包含所有不在大括号{}内的字符。 大括号内可包括如下内容:
- data objects, 数据对象
- calculation expressions, 计算表达式
- constructor expressions, 构造器表达式
- table expressions, 内表表达式
- predefined functions, 预定义功能
- functional methods and method chainings, 功能方法和方法链
下面这个例子就是在大括号内包含了内表表达式,取的内表条件满足某个条件的某个值字段。
II. Concatenation 串联
III. Width/Alignment/Padding 宽度/对齐/填充
WRITE / |{ 'LEFT' WIDTH = 20 ALIGN = LEFT PAD = '0' }|.
WRITE / |{ 'CENTRE' WIDTH = 20 ALIGN = CENTER PAD = '0' }|.
WRITE / |{ 'RIGHT' WIDTH = 20 ALIGN = RIGHT PAD = '0' }|.
IV. Case
原态,大写,小写
WRITE / |{ 'Text' CASE = (CL_ABAP_FORMAT=>C_RAW) }|.
WRITE / |{ 'Text' CASE = (CL_ABAP_FORMAT=>C_UPPER) }|.
WRITE / |{ 'Text' CASE = (CL_ABAP_FORMAT=>C_LOWER) }|.
V. ALPHA conversion
DATA(LV_VBELN) = '0000012345'.
WRITE / |{ LV_VBELN ALPHA = OUT }|. "or use ALPHA = IN to go in other direction
VI. Date conversion
WRITE / |{ PA_DATE DATE = ISO }|. "Date Format YYYY-MM-DD
WRITE / |{ PA_DATE DATE = USER }|. "As per user settings
WRITE / |{ PA_DATE DATE = ENVIRONMENT }|. "Formatting setting of language environment
10. Loop at Group By
I. Definition 定义
LOOP AT itab result [cond] GROUP BY key ( key1 = dobj1 key2 = dobj2 …
[gs = GROUP SIZE] [gi = GROUP INDEX] )
[ASCENDING|DESCENDING [AS TEXT]]
[WITHOUT MEMBERS]
[{INTO group}|{ASSIGNING <group>}]
…
[LOOP AT GROUP group|<group>
…
ENDLOOP.]
…
ENDLOOP.
II. Explanation 解释
The outer loop will do one iteration per key. So if 3 records match the key there will only be one iteration for these 3 records. The structure “group” (or “<group>” ) is unusual in that it can be looped over using the “LOOP AT GROUP” statement. This will loop over the 3 records (members) of the group. The structure “group” also contains the current key as well as the size of the group and index of the group ( if GROUP SIZE and GROUP INDEX have been assigned a field name). This is best understood by an example.
外部循环将对每个键执行一次迭代。因此,如果3条记录与关键值匹配,那么这3条记录将只有一次迭代。结构“group”(或“<group>”)不常见,因为它可以使用“LOOP AT group”语句循环。这将循环访问组的3个记录(成员)。结构“group”还包含当前键、组的大小和组的索引(如果组大小和组索引已分配了字段名)。这一点最好通过一个例子来理解。
III. Example 举例
TYPES: BEGIN OF TY_EMPLOYEE,NAME TYPE CHAR30,ROLE TYPE CHAR30,AGE TYPE I,END OF TY_EMPLOYEE,TY_EMPLOYEE_T TYPE STANDARD TABLE OF TY_EMPLOYEE WITH KEY NAME.
DATA(GT_EMPLOYEE) = VALUE TY_EMPLOYEE_T(
( NAME = 'Mao' ROLE = 'ABAP guru' AGE = 29 )
( NAME = 'Zhangjie' ROLE = 'FI Consultant' AGE = 33 )
( NAME = 'Hujianchun' ROLE = 'ABAP guru' AGE = 37 )
( NAME = 'XiaoLiu' ROLE = 'FI Consultant' AGE = 31 )
( NAME = 'Xiuxianhai' ROLE = 'ABAP guru' AGE = 30 )
( NAME = 'Huangping' ROLE = 'SD Consultant' AGE = 42 ) ).
DATA: GV_TOT_AGE TYPE I,GV_AVG_AGE TYPE DECFLOAT34.
"Loop with grouping on Role
LOOP AT GT_EMPLOYEE INTO DATA(LS_EMPLOYEE)GROUP BY ( ROLE = LS_EMPLOYEE-ROLESIZE = GROUP SIZEINDEX = GROUP INDEX )ASCENDINGASSIGNING FIELD-SYMBOL(<GROUP>).CLEAR: GV_TOT_AGE."Output info at group levelWRITE: / |Group:{ <GROUP>-INDEX } Role: { <GROUP>-ROLE WIDTH = 15 }|& | Number in this role: { <GROUP>-SIZE }|."Loop at members of the groupLOOP AT GROUP <GROUP> ASSIGNING FIELD-SYMBOL(<LS_MEMBER>).GV_TOT_AGE = GV_TOT_AGE + <LS_MEMBER>-AGE.WRITE: /13 <LS_MEMBER>-NAME.ENDLOOP."Average ageGV_AVG_AGE = GV_TOT_AGE / <GROUP>-SIZE.WRITE: / |Average age: { GV_AVG_AGE }|.SKIP.
ENDLOOP.
IV. Output 输出结果
11. Classes/Methods 类/方法
I. Referencing fields within returned structures 引用返回结构中的字段
II. Methods that return a type BOOLEAN 返回布尔类型的方法
NB : The type “BOOLEAN” is not a true Boolean but a char1 with allowed values X,- and <blank>.
Using type “FLAG” or “WDY_BOOLEAN” works just as well.
注意 :类型“BOOLEAN”不是真正的布尔类型,而是一个char1,其允许值为X,-和空。使用类型“FLAG”或“WDY_BOOLEAN”也同样可以。
III. NEW operator - NEW运算符
This operator can be used to instantiate an object.此运算符可用于实例化对象。
12. Meshes 网格
Allows an association to be set up between related data groups.
允许在相关数据组之间设置关联。
I.Problem
Given the following 2 internal tables:
给出以下两个内表:
TYPES: BEGIN OF t_manager,
name TYPE char10,
salary TYPE int4,
END OF t_manager,
tt_manager TYPE SORTED TABLE OF t_manager WITH UNIQUE KEY name.TYPES: BEGIN OF t_developer,
name TYPE char10,
salary TYPE int4,
manager TYPE char10, “Name of manager
END OF t_developer,
tt_developer TYPE SORTED TABLE OF t_developer WITH UNIQUE KEY name.
Populated as follows:填充如下值
Get the details of Jerry’s manager and all developers managed by Thomas.
II. Solution
TYPES: BEGIN OF MESH M_TEAM,MANAGERS TYPE TT_MANAGER ASSOCIATION MY_EMPLOYEE TO DEVELOPERSON MANAGER = NAME,DEVELOPERS TYPE TT_DEVELOPER ASSOCIATION MY_MANAGER TO MANAGERSON NAME = MANAGER,END OF MESH M_TEAM.
DATA: LS_TEAM TYPE M_TEAM.
LS_TEAM-MANAGERS = LT_MANAGER.
LS_TEAM-DEVELOPERS = LT_DEVELOPER.
*Get details of Jerry’s manager *
"get line of dev table
ASSIGN LT_DEVELOPER[ NAME = 'JERRY' ] TO FIELD-SYMBOL(<LS_JERRY>).
DATA(LS_JMANAGER) = LS_TEAM–DEVELOPERS\MY_MANAGER[ <LS_JERRY> ].
WRITE: / |Jerry's manager:{ LS_JMANAGER-NAME }|,30|Salary:{ LS_JMANAGER-SALARY }|."Get Thomas’ developers
SKIP.
WRITE: / |Thomas'developers:|.
"line of manager table
ASSIGN LT_MANAGER[ NAME = 'Thomas' ] TO FIELD-SYMBOL(<LS_THOMAS>).
LOOP AT LS_TEAM–MANAGERS\MY_EMPLOYEE[ <LS_THOMAS> ]ASSIGNING FIELD-SYMBOL(<LS_EMP>).WRITE: / |Employee name: { <LS_EMP>-NAME }|.
ENDLOOP.
III. Output
Jerry's manager: Jason Salary: 3000
Thomas'developers:
Employee name: David
Employee name: Jack
Employee name: John
13. Filter 过滤器
Filter the records in a table based on records in another table.
根据另一个表中的记录筛选表中的记录。
I.Definition
… FILTER type( itab [EXCEPT] [IN ftab] [USING KEY keyname]
WHERE c1 op f1 [AND c2 op f2 […]] )
II. Problem
Filter an internal table of Flight Schedules (SPFLI) to only those flights based on a filter table that contains the fields Cityfrom and CityTo.
将航班计划的内表(SPFLI)筛选出仅包含基于Cityfrom和CityTo字段的航班表。
III. Solution
TYPES: BEGIN OF TY_FILTER,CITYFROM TYPE SPFLI-CITYFROM,CITYTO TYPE SPFLI-CITYTO,F3 TYPE I,END OF TY_FILTER,TY_FILTER_TAB TYPE HASHED TABLE OF TY_FILTERWITH UNIQUE KEY CITYFROM CITYTO.
DATA: LT_SPLFI TYPE STANDARD TABLE OF SPFLI.
SELECT * FROM SPFLI APPENDING TABLE LT_SPLFI.
DATA(LT_FILTER) = VALUE TY_FILTER_TAB( F3 = 2( CITYFROM = 'NEW YORK' CITYTO ='SAN FRANCISCO' )( CITYFROM = 'FRANKFURT' CITYTO = 'NEW YORK' ) ).
DATA(LT_MYRECS) = FILTER #( LT_SPLFI IN LT_FILTERWHERE CITYFROM = CITYFROMAND CITYTO = CITYTO ).
"Output filtered records
LOOP AT LT_MYRECS ASSIGNING FIELD-SYMBOL(<LS_REC>).WRITE: / <LS_REC>-CARRID,8 <LS_REC>-CITYFROM,30<LS_REC>-CITYTO,45 <LS_REC>-DEPTIME.
ENDLOOP.
Note: using the keyword “EXCEPT” (see definition above) would have returned the exact opposite records i.e all records EXCEPT for those those returned above.
注意:使用关键字“EXCEPT”(参见上面的定义)将返回完全相反的记录,即除上面返回的记录之外的所有记录。
【整理】ABAP 7.40新特性介绍(下)相关推荐
- 【整理】ABAP 7.40新特性介绍(上)
ABAP 7.40 Quick Reference 1. Inline Declarations - 内联声明 Description Before 7.40 With 7.40 Data stat ...
- SAP PI 7.3新特性介绍
PI 7.3新特性介绍 自从SAP TechEd 2010 年在Berlin对PI7.3的新特性作了介绍之后,类似于single Java Stack, central monitoring, ID ...
- hadoop3.0新特性介绍
hadoop3.0新特性介绍 1. 基于jdk1.8(最低版本要求) 2. mr采用基于内存的计算,提升性能(快spark 10倍) 3. hdfs 通过最近black块计算,加快数据获取速度(块大小 ...
- 移动周刊第 177 期:Android 新特性介绍、iOS 客户端框架演进
写在前面 本期移动周刊第 177 期如约而至,聚焦 Android.iOS.VR/AR/MR.直播等前沿移动开发技术,收录一周最热点,解读开发技巧,我们希望从中能够让你有一些收获,如果你有好的文章以及 ...
- Angular8 - 稳定版修改概述(Angular 8的新特性介绍)
Angular 8的新特性介绍 在之前Angular团队发布了8.0.0稳定版.其实早在NgConf 2019大会上,演讲者就已经提及了从工具到差分加载的许多内容以及更多令人敬畏的功能.下面是我对8. ...
- 技术前沿资讯-Apache Flink 1.14 新特性介绍
一.简介 1.14 新版本原本规划有 35 个比较重要的新特性以及优化工作,目前已经有 26 个工作完成:5 个任务不确定是否能准时完成:另外 4 个特性由于时间或者本身设计上的原因,会放到后续版本完 ...
- chrome 63 android分类,Chrome 63 Beta新特性介绍
原标题:Chrome 63 Beta新特性介绍 除非另外注明,否则,下面介绍的更改均适用于最新 Chrome Beta 渠道版(Android.Chrome 操作系统.Linux.Mac 和 Wind ...
- 蚂蚁金服 SOFAArk 0.6.0 新特性介绍 | 模块化开发容器...
SOFAStack Scalable Open Financial Architecture Stack 是蚂蚁金服自主研发的金融级分布式架构,包含了构建金融级云原生架构所需的各个组件,是在金融场景里 ...
- JDK 9-17 新特性介绍
Java新特性介绍 Java 8是Oracle 公司于 2014 年 3 月 18 日发布的,距离今天已经过了近十年的时间了,但是由于Java 8的稳定和生态完善(目前仍是LTS长期维护版本),依然有 ...
最新文章
- JavaScript 利用location对象实现跨页面传参
- 云服务器搭建代挂,服务器上搭建个人博客
- 【Python】函数外定义变量并在函数内进行更新
- 14_面向对象API绘图、图中图 (A Plot inside of Another Plot)、设定绘图范围Setting the Plot Range、对数尺度Logarithmic Scale
- 【1024】我的CSDN博客之路,感谢CSDN,我们一路同行!深度学习系列专栏回顾
- 【报告分享】抖音短视频营销之“梗”的应用(借梗造梗13招).pdf
- gps频率范围_如何计量检定频率计数器
- 如何在阿里云里申请并使用免费https证书SSL、nginx下配置https证书
- 【sketchup 2021】草图大师的场景优化工具2【草图大师动态组件的详细使用说明和各个函数说明】【重要】
- QQ登录界面测试用例--最全的书写以及测试用例设计,你须知道的7个小技巧
- php ma,第十四届萌芽杯优秀作品展示第一期
- dataFrame(DF)将数据插入ES时报错 org.elasticsearch.hadoop.EsHadoopIllegalArgumentException: Cannot detect E
- break 通过自定义标签跳到指定位置
- 实现树莓派模拟wifi进行打卡签到
- Lempel-Ziv算法 具体过程
- 从团队协作与主题解读ios主流思维导图软件
- 关于苹果的iOS cercertificate的创建问题
- JUC-07-CAS
- C语言中的字符常量与变量
- 数学之美:e^x 是如何得到的
热门文章
- 创业公司死亡公式:人越多死得越快!
- 听说这里有让你膜拜的产品方法论?
- 深度复盘 | 滴滴专车会员项目如何做好设计优化
- 啊啊啊...每次需求评审总被boss虐成狗?解药来了
- PMCAFF微课堂视频合集 | O2O产品的颠覆与布局
- 论文笔记系列-Efficient Neural Architecture Search via Parameter Sharing
- “物联网”架构有多重要?
- 轻松学习JavaScript十七:JavaScript的BOM学习(二)
- javascript创建多行字符串的方法(转)
- 基于哈希算法的web账户口令存储方法