B eware of monotony; it's the mother of all deadly sins.
当心一成不变; 它是万恶之母 。
1
程序效果
2
源码分享
BEGIN OF gty_student ,
name ( 10 ) TYPE c , "姓名
gender TYPE c , "性别
age TYPE i , "年龄
id ( 10 ) TYPE n , "学生ID
class ( 10 ) TYPE c , "班级
score TYPE p DECIMALS 1 , "成绩
level ( 10 ) TYPE c , "级别
ispass TYPE c , "是否通过
END OF gty_student .gt_student TYPE TABLE OF gty_student ,
gs_student TYPE gty_student .
gt_student = VALUE # ( LET pre = 'Student'
random = cl_abap_random_int => create ( seed = CONV # ( sy \- timlo
) min = 0 max = 100 ) IN
FOR n = 1 UNTIL n > 10
( id = n
name = |{ pre } { n }|
gender = COND # ( WHEN n < 6 THEN '男'
ELSE '女' )
age = 10 \+ n
class = |{ n }班|
score = random -> get_next ( ) ) ).
*&\----------------------------------------------------------------------
*& 2\. 内表表达式 理解:内表表达式,相当于Read Table
*&\----------------------------------------------------------------------
*& 语法:itab[ idx ].
*& itab[ col1 = … col2 = … ].*&\----------------------------------------------------------------------
"不存在会抛出异常(cx_sy_itab_line_not_found)
IF 1 <> 1 .
DATA ( ls_index ) = gt_student[ 1 ] . "index读取
DATA ( ls_key ) = gt_student[ id = '0000000005' age = 15 ] ."key读取
DATA ( lv_index_name ) = gt_student[ 1 ] \- name . "index读取结构字段
DATA ( lv_key_name ) = gt_student[ id = '0000000002' ] \- name ."key读取字段
ENDIF ."避免抛出异常的几种方式
ASSIGN gt_student[ id = '0000000003' name = 'Student 3' ] TO FIELD
\- SYMBOL ( <stu> ).
IF sy \- subrc EQ 0 .
ENDIF .IF line_exists ( gt_student[ 1 ] ).
DATA ( ls_stu01 ) = gt_student[ 1 ] .
DATA ( lv_name ) = gt_student[ 1 ] \- name .
ENDIF .DATA ( ls_stu02 ) = VALUE # ( gt_student[ 11 ] OPTIONAL ).DATA ( ls_stu03 ) = VALUE # ( gt_student[ 11 ] DEFAULT VALUE # (id = '0000000010' name = 'Student 10' ) ).
DATA ( ls_stu04 ) = VALUE # ( gt_student[ 11 ] DEFAULT VALUE # (gt_student[ 10 ] OPTIONAL ) ).
DATA ( ls_stu05 ) = COND # ( LET c = lines ( gt_student ) IN WHENc > 10 THEN gt_student[ 11 ] ).
DATA ( ls_stu06 ) = COND # ( WHEN line_exists ( gt_student[ 11 ] )THEN gt_student[ 11 ] ).
TRY .
DATA ( ls_stu07 ) = gt_student[ 11 ] .
CATCH cx_sy_itab_line_not_found .• WRITE : 'Not Found!'.
ENDTRY .3
AI解释
仅供参考
这段ABAP代码主要演示了使用新的ABAP语法内表表达式的用法,其中核心点如下:
** 索引和关键字读取: ** 使用 ` gt_student[1] ` 进行索引读取,获取内表的第一个元素。使用 ` gt_student[id
= '0000000005' age = 15] ` 进行关键字读取,根据指定条件获取内表中的元素。
**结构字段读取:** 通过 ` gt_student[1]-name ` 和 ` gt_student[id =
'0000000002']-name ` 的方式,直接从内表元素中读取结构字段的值。
**避免抛出异常的几种方式:** 使用 ` ASSIGN gt_student[id = '0000000003' name = 'Student 3']
TO FIELD-SYMBOL(<stu>) ` ,通过 ` ASSIGN ` 语句避免抛出异常。
**条件表达式和行是否存在的检查:** 使用 ` line_exists(gt_student[1]) ` 检查内表中是否存在指定的行。
**内表表达式的默认值和OPTIONAL选项:** 使用 ` VALUE #(gt_student[11] OPTIONAL) ` ,通过 `
OPTIONAL ` 选项在索引越界时避免抛出异常。使用 ` VALUE #(gt_student[11] DEFAULT VALUE #(id =
'0000000010' name = 'Student 10')) ` ,在索引越界时提供默认值。
**使用条件表达式处理异常情况:** 使用 ` COND ` 表达式,例如 ` COND #(LET c = lines(gt_student) IN
WHEN c > 10 THEN gt_student[11]) ` ,在特定条件下选择内表中的元素。
**使用TRY-CATCH处理异常:** 使用 ` TRY...CATCH ` 语句,捕获特定的异常类型,这里是 `
cx_sy_itab_line_not_found ` 。
总体而言,这些例子展示了如何使用新的ABAP语法来简化内表的操作,处理越界、异常以及条件选择的情况。
以上是今日分享,希望对你有所帮助~~~
欢迎点赞、留言、分享
往期推荐
[ ABAP 新语法-构建演示数据
](https://mp.weixin.qq.com/s?__biz=Mzg3OTE2Njg0OQ==&mid=2247495390&idx=1&sn=55b0041df577df441aecbbe5891acfd6&chksm=cf0a3a30f87db326b5fde73627d116158d2ada96a929979de6705ab67a6fbfd0a686f11455b4&scene=21#wechat_redirect)
[ ABAP 新语法-DATA、FIELD-SYMBOL
](https://mp.weixin.qq.com/s?__biz=Mzg3OTE2Njg0OQ==&mid=2247495411&idx=1&sn=b1b305a357e0704b39c885a63d772c7d&chksm=cf0a3a1df87db30b55bbabb6862694ca5f23265683895a30f278d26b10530686790f6ca412fa&scene=21#wechat_redirect)
[ ABAP OOALV-基本显示
](https://mp.weixin.qq.com/s?__biz=Mzg3OTE2Njg0OQ==&mid=2247494292&idx=1&sn=214e02d67346801142db4a6e90c93f79&chksm=cf0a3e7af87db76c1b8146388878c5afe2a6ba90466af37d9b91831ff12b70c5a982399ba51f&scene=21#wechat_redirect)
[ ABAP SALV-基本显示、外观设置、列设置
](https://mp.weixin.qq.com/s?__biz=Mzg3OTE2Njg0OQ==&mid=2247493394&idx=1&sn=59eb6a2448a28c6c9d0e6d57b9f1e16a&chksm=cf0a33fcf87dbaea56fc1e465ec11caa4dc078e8fb6c0404634c2cac4393aa1dfd94fd371ea9&scene=21#wechat_redirect)
点个 在看 你最好看