0
点赞
收藏
分享

微信扫一扫

ABAP 之指针的常见使用方式


HELLO.这里是百里,一个学习中的ABAPER ,在SAP 开发中,我们会经常遇到数据变更.数据修改等内容,数据赋值等内容. 我们可以使用传统方式的modify ,move to ,或者等于都可以进行数据赋值. 其实有更方便的方式,就是指针. 他可以不用参考对应的类型.

什么是指针

在ABAP 中的指针 和C语言的指针类似, 如果你定义并且分配了相应的结构或者变量给它,其实它就指向这个结构或者变量的地址,如果修改了field symbol的值,则相应结构或者变量的值也随之更改。

如何定义ABAP 中的指针

1、定义指针:
指针的定义主要有以下语句
定义任意类型的指针,但是不具备栏位结构(仅仅是一个地址)
  FIELD-SYMBOLS <carrid> TYPE ANY.
  参考数据库表定义(这种指针是含有栏位结构的,参考内表同理)

  FIELD-SYMBOLS <sflight> TYPE sflight.
  FIELD-SYMBOLS <sflight> LIKE sflight.
  FIELD-SYMBOLS <sflight> LIKE LINE OF sflight.
  动态定义具有栏位结构的指针类型

   DATA: tabname TYPE tabname VALUE 'SFLIGHT' ,
   dref TYPE REF TO data.
   FIELD-SYMBOLS: <itab> TYPE ANY TABLE.
   CREATE DATA dref TYPE TABLE OF (tabname).
   ASSIGN dref->* TO <itab>.
2、指针的分配(常用句法)
分配某个变量给指针
   ASSIGN var TO <field-symbols>
  分配结构中的某个字段的地址给指针

  ASSIGN COMPONENT pos OF STRUCTURE struc TO <field-symbols>.
  分配整个内表行给指针(指针必须定义为有栏位结构的类型)
  READ TABLE itab INDEX/WITH KEY ASSIGNING <field-symbols>.
  LOOP AT itab
  ASSIGNING <field-symbols>.
  ENDLOOP.
分配类的方法或借口给指针
  ASSIGN dref->* TO <field-symbols>.

语法及案例

DATA: BEGIN OF LINE,
COL1 TYPE I VALUE '11',
COL2 TYPE I VALUE '22',
COL3 TYPE I VALUE '33',
END OF LINE.
DATA COMP(4) VALUE 'COL3'.
FIELD-SYMBOLS: <F1>, <F2>, <F3>.
ASSIGN LINE TO <F1>.
ASSIGN COMP TO <F2>.
DO 3 TIMES.
ASSIGN COMPONENT SY-INDEX OF STRUCTURE <F1> TO <F3>. "按具体列数
WRITE <F3>.
ENDDO.
ASSIGN COMPONENT <F2> OF STRUCTURE <F1> TO <F3>. "按具体值
WRITE / <F3>.

ABAP 之指针的常见使用方式_工作区

ABAP指针用法修改项目内容

我们正常修改数据内容是,采用loop 循环数据内容,然后将数据存入到工作区内,在修改工作区对应的内容值. 修改完毕后,通过modify 的方式进行赋值,同时在清空工作区内容. 这是我们传统的赋值方式.
通过修改指针我们可以减少一些动作,比如清空工作区,modify 动作.

我们这里讲一个demo,是通过po号,料号,等数据内容获取对应值 .

内表行项目内容修改(不需要MODIFY ... INDEX SY-TABIX)

LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs_out>).
"默认X销售需求,可选择Y试验,C零时插单
<fs_out>-zjhlx = 'X'.

READ TABLE gt_makt INTO DATA(ls_makt) WITH KEY matnr = <fs_out>-matnr.
IF sy-subrc = 0.
<fs_out>-maktx = ls_makt-maktx.
ENDIF.

READ TABLE gt_mkal INTO DATA(ls_mkal) WITH KEY matnr = <fs_out>-matnr
werks = <fs_out>-pwwrk
verid = <fs_out>-verid.
IF sy-subrc = 0.
<fs_out>-verid_desc = ls_mkal-text1.
ENDIF.

<fs_out>-zrets = p_zrets.

ENDLOOP.

ABAP指针用法内表新增行项目

我们平时增加内表数据采用的APPEND 对应数据到对应的内表 . 我们此时使用指针的方式,可以减少对应的清空工作区数据的动作.

"新增行项目到内表GT_OUT.

LOOP AT lt_out INTO DATA(ls_out).
APPEND INITIAL LINE TO gt_out ASSIGNING <fs_out>.
CHECK <fs_out> IS ASSIGNED.

MOVE-CORRESPONDING ls_out TO <fs_out>.

"销售组织
READ TABLE lt_tvkot INTO DATA(ls_tvkot) WITH KEY vkorg = <fs_out>-vkorg.
IF sy-subrc = 0.
<fs_out>-vkorg_desc = ls_tvkot-vtext.
ENDIF.

"部门
READ TABLE lt_tspat INTO DATA(ls_tspat) WITH KEY spart = <fs_out>-spart.
IF sy-subrc = 0.
<fs_out>-spart_desc = ls_tspat-vtext.
ENDIF.

"审核状态
IF <fs_out>-sdabw = 'X'.
<fs_out>-sdabw_desc = gc_sdabw_1.
ENDIF.

UNASSIGN <fs_out>.

ENDLOOP.

技术总结

指针是一个非常实用的动作,在工作中熟练的使用指针,可以减少我们大量工作量.比如动态内表, 逻辑修改, 以及以及 就是修改 别人的代码的时候 ,我们看到别人杂乱无章的数据 ,你敢写个modify么? 此时必须使用指针.

这里是百里,一个努力的学习者.. 努力学习好好记录,点滴进步,就是成功.

ABAP 之指针的常见使用方式_后端_02

举报

相关推荐

0 条评论