ABAP Field-Symbols 字段符号

发布时间 2024-01-04 16:00:47作者: 安生3399

参考地址:[https://www.cnblogs.com/jiangzhengjun/p/4293262.html](https://www.cnblogs.com/jiangzhengjun/p/4293262.html)

 Field-Symbols 字段符号

  在ABAP中,字段符号(Field Symbol)是现有数据对象的占位符或符号名。字段符号本身不直接为数据保留物理空间,而只是指向一个分配了内存空间的数据对象。

 字段符号的分配ASSIGN

 

点击查看代码
ASSIGN
{dobj[+off][(len)]}
|{ {(name)}|{dref->*}|{dobj INCREMENT inc }|{COMPONENT comp OF STRUCTURE struc} }
|{ {cref->(attr_name) }|{iref->(attr_name)}|{(class_name)=>(attr_name)}|{(class_name)=>attr }|{class=>(attr_name)} }

TO <fs>

{ }
| {CASTING { {}|{TYPE type|(name)}|{LIKE dobj} | {[TYPE p] DECIMALS dec} | {TYPE HANDLE handle} }}
| { { TYPE name } | { [TYPE name] DECIMALS dec } }

{ } | {RANGE range}.

  只有在使用动态分配 ASSIGN (name)… 时,才会修改sy-subrc系统变量(成功时sy-subrc为0,否则为4),而静态分配 ASSIGN dobj… 时后不会修改系统变量,所以在判断静态分配方式是否成功时,只能使用 IS [NOT] ASSIGNED语句来判断。 

静态分配:

  ASSIGN  {dobj[+off][(len)]}
  在指定了off的情况下,一定要指定len的长度,且区域不能超过dobj所在的数据区,否则编译不通过;

点击查看代码
DATA TEXT TYPE C LENGTH 4 VALUE '0ABC'.
FIELD-SYMBOLS <CHAR> TYPE C.
DATA OFF TYPE I.
DO 5 TIMES.
  OFF = SY-INDEX - 1.
  ASSIGN TEXT+OFF(1) TO <CHAR>.
  IF <CHAR> IS NOT ASSIGNED.
    WRITE / 'D'.
  ELSE.
    WRITE / <CHAR>.
  ENDIF.
ENDDO.

 动态分配:

  ASSIGN (NAME) TO <FS>.

点击查看代码
FIELD-SYMBOLS:<FS>.
DATA : STR(20) TYPE C VALUE 'Output String',
      NAME(20) TYPE C VALUE 'str'.
*静态分配:编译时就知道要分配的对象名
ASSIGN NAME TO <FS>.
WRITE / <FS>.
*动态分配:直到运行时才知道要分配的对象名
ASSIGN (NAME) TO <FS>.
WRITE / <FS>.
<FS> = 'aaa'.
WRITE / STR.