欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

【ABAP】Field Symbol使用总结

发布时间:2025/3/20 编程问答 50 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【ABAP】Field Symbol使用总结 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

Field Symbol(以下简称FS),主要作用是程序更加灵活,有时可以实现一般做法无法实现的功能,比如动态ALV内表,LOOP使用FS还可以提高程序效率。FS缺点是影响程序可读性,为修改和维护代码造成困难,而且有时错误是编译器检查不出来的,只有运行时才会发生错误。下面是FS的一些使用总结。

 

首先请牢记,FS必须和某个变量,结构或者内表绑定后才能使用,这点和C语言里的指针(在ABAP里最接近指针的是TYPE REF TO)是不同的,在使用FS前必须分配给某个变量,不然会发生FS未分配的运行时错误。注意如果LOOP内表时ASSIGNINGFS.,那么之后假如有REFRESH内表的操作的话,FS也会再次回到初始未被ASSIGN的状态,这时如果使用FS也会发生FS未分配的RUNTIME ERROR

 

ASSIGN ‘200’ TO<fs1>.意思是指向常量的<fs1>,之后不可更改值,比如执行<fs1> = ‘300’会发生运行时错误。如果想实现改值的效果,那么需要ASSIGN一个变量给FS

DATA gv_abc(6).

gv_abc = '200'.

ASSGIN gv_abc TO <fs1>.

<fs1> = '300'.

这时<fs1>就从200变更为300了,另外如果直接改变变量的值,那么<fs1>也会发生变化。比如上例里gv_abc = '400',那么<fs1>也随之变为400,因为<fs1>gv_abc是绑定了的。

 

假设定义了<fs1><fs2>两个FS,分别ASSGIN到两个变量,变量A和变量B

ASSIGN <fs1> TO <fs2>的意思是,让<fs2>也指向<fs1>所指向的地方,即两个FS都指向变量A;而<fs2>= <fs1>的意思是,把<fs1>所指向的变量A的值赋给<fs2>所指向的变量B的值,<fs1>依然指向变量A<fs2>依然指向变量B

 

LOOP 内表 INTO 结构(工作区)和LOOP内表ASSIGNING <结构>的比较

LOOP内表INTO结构时,系统会把先把当前行的数据复制到结构,如果结构的值改了,还需要使用MODIFY语句把更改后的值传回内表。也就是说,结构是内表里的数据的一个副本,操作这个副本并不会影响内表里的数据。带表头的内表也是类似,LOOP内表时,把内表数据复制到表头

为了提高效率,可以使用FSFS直接指向内表数据,省去了复制数据到结构的过程,修改FS的值也就是相当于直接修改内表里的数据,不需要再使用MODIFY语句。

这里额外提一点,有一些人喜欢在ENDLOOP前使用CLEAR清空结构,首先这是没有必要的,为了提高效率,LOOP内的语句应该越精简越好,其次如果是LOOPFS的写法,是不能使用CLEAR清空FS的,因为刚刚说了FS是直接指向内表数据,如果清空了FS,那相当于把内表内对应的那行数据也给清空了。

此外,像LOOP AT 内表 INTO <结构>的写法,初学者容易混淆,其实这里的<结构>是指向一个结构,这种写法和LOOP 内表 INTO 结构没什么区别。

 

READ TABLE 内表 INTO 结构和READ TABLE 内表 ASSIGNING <结构>的比较。

效率上的区别同LOOP的情况,这里说下READ TABLELOOP不同的地方,主要差别是,LOOP 是不会失败的,而READ TABLE是可能失败的,一旦READ失败,那么结构或<结构>的值依然是上次READ成功的值(而不是清空),所以READ使用完建议根据情况CLEAR结构或<结构>

确定结构的FS和不确定结构的FS

FIELD-SYMBOLS <gs_ab> TYPE ty_ab. “ty_ab是个结构,有一个字段为col1

FIELD-SYMBOLS <gs_ab> TYPE ANY.

前者是指定了结构,后者是不指定结构。

之后在为<gs_ab>赋值时,

ASSIGN COMPONNET 'COL1' OF STUCTURE <gs_ab>TO <fs1>.

<fs1> = 'AAA'.

此种写法对确定结构的定义和未确定结构的定义的<gs_ab>都可行。

 但是有确定结构定义的<gs_ab>可以直接使用<gs_ab>-col1 = 'AAA'来赋值。

一般如果能事先知道结构的话,还是应该用确定结构的方式来定义FS,不确定结构的定义通常用于动态处理。

总结

以上是生活随笔为你收集整理的【ABAP】Field Symbol使用总结的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。