前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >matianl:SAP ABAP 7.40及以上新语法Line_exists

matianl:SAP ABAP 7.40及以上新语法Line_exists

作者头像
matinal
发布2023-10-14 15:44:18
3110
发布2023-10-14 15:44:18
举报
文章被收录于专栏:SAP TechnicalSAP Technical

1. DATA  

DATA(ls_data) = gt_data[ index ].     使用此语法,可以省去read,直接读取指定行号的数据,但需要判断gt_data不是否有指定index行,需要catch 异常CX_SY_ITAB_LINE_NOT_FOUND异常,会直接dump.

2. Line_exists

代码语言:javascript
复制
 IF line_exists( gt_data[ field1 = ' '  field2 = ' ' ] ). ENDIF.

使用此语法,可判断内表中行是否有满足条件的,无需LOOP判断,省去好多代码。

3. Select 内表

select 内表,可以i对内表使用sql的语法。例如:取内表某一列的最大值,就可以直接MAX,无需排序后,读第一行, 需要append a表 to B表时,但A表字段与B表字段数量不一致时,可以使用

代码语言:javascript
复制
   SELECT FROM @a表 AS a
          FIELDS field1
          APPENDING CORRESPONDING FIELDS OF TABLE @b表.

4. 前导0处理

 lv_field = |{ lv_field ALPHA = OUT }|.//去前导0

  lv_field = |{ lv_field ALPHA = IN }|.//加前导0

5. Value

代码语言:javascript
复制
 lr_data[] = VALUE #( sign = 'I' option = 'BT' ( low = 1 high = 2 )
                                             ( low = 3 high = 4 )
                                             ( low = 4 high = 5 )
                               option = 'EQ' ( low = 6 ) ).

对range表赋值,非常简便。

代码语言:javascript
复制
lt_data[]  = value #( for wa in gt_data
                                          where  ( field1 = '01' and field2 = '02 )   ( wa ) ).

赋值指定条件的数据

6.Group 分组循环

代码语言:javascript
复制
loop    at lt_data into data(ls_data) group by ( field = ls_data-field )
                             ascending  assigning field-symbol(<group>).
    loop    at group <group> assigning field-symbol(<fs>).
        
    end loop.
endloop.    

动态条件分组

代码语言:javascript
复制
DATA: lv_field TYPE c VALUE 'B'.
LOOP AT <dy_table> ASSIGNING <dyn_wa> GROUP BY SWITCH string( lv_field  WHEN 'A'
                                                                         THEN | BELNR = <DYN_WA>-BELNR|
                                                                        WHEN 'B'
                                                                        THEN | BELNR = <DYN_WA>-BELNR WAERS = <DYN_WA>-WAERS | ) ASSIGNING FIELD-SYMBOL(<group>).
  LOOP AT GROUP <group> ASSIGNING FIELD-SYMBOL(<fs1>).
  ENDLOOP.
ENDLOOP.

分组处理,不像at end of 那样需要调整字段顺序。

7. Replace

代码语言:javascript
复制
lv_string1 = 'statements'.
lv_string2 = 'asffasfa'..
write:  replace(    val = lv_string1
                    sub = 'sta'
                    case = abap_true
                    with = to_upper( lv_string2 ) "如果发现sta,用lv_char2的大写替换
                    occ = 2  )."如果occ为正,则从左边开始计数;如果occ为负,则从右数。值1、2、....表示第一,第二,事件。取值为-1、-2、....表示最后一个,倒数第二个,。

   8. Conv

代码语言:javascript
复制
WRITE: |Converte Date: { CONV d( sy-datum + 7 ) DATE = USER } |."CONV conversion data type

转换为当前用户的日期格式

9. Case

代码语言:javascript
复制
    TRY.
        
      CATCH cx_root INTO DATA(exc).
        CASE TYPE OF exc.
          WHEN TYPE cx_sy_arithmetic_error.
            out->display( 'Arithmetic error' ).
          WHEN TYPE cx_sy_conversion_error.
            out->display( 'Conversion error' ).
          WHEN OTHERS.
            out->display( 'Other error' ).
        ENDCASE.
    ENDTRY.

抓异常,分异常类型报错

10. Conditional Operator

根据不同条件赋值,一般是写Case或If,下面这些可以在定义时赋值,并且在else中抓取异常

COND:

代码语言:javascript
复制
    DATA(time) = COND string(
          WHEN sy-timlo < '120000' THEN |{ sy-timlo TIME = ISO } AM|
          WHEN sy-timlo > '120000' THEN |{ CONV t( sy-timlo - 12 * 3600 ) TIME = ISO } PM|
          WHEN sy-timlo = '120000' THEN |High Noon|
          ELSE THROW cx_cant_be( ) ).

Switch:

代码语言:javascript
复制
  DATA(number) = SWITCH string( sy-index
                                WHEN 1 THEN 'one'
                                WHEN 2 THEN 'two'
                                WHEN 3 THEN 'three'
                                ELSE THROW cx_overflow( ) ).
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. DATA  
  • 2. Line_exists
  • 3. Select 内表
  • 4. 前导0处理
  • 5. Value
  • 6.Group 分组循环
  • 7. Replace
  •    8. Conv
  • 9. Case
  • 10. Conditional Operator
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档