将结构的组件分配给指针ASSIGN COMPONENT
程序
*&---------------------------------------------------------------------*
*& Report Z_ASSIGN_COMPONENT
*&---------------------------------------------------------------------*
*& Description:测试ASSIGN COMPONENT
*& Create On:2024.4.24
*& Creater:Liuhongyu
*&---------------------------------------------------------------------*
REPORT z_assign_component.
*&-------------------------Variable------------------------------------*
FIELD-SYMBOLS:<f1> TYPE any,
<f2> TYPE any.
TYPES: BEGIN OF gty_data,
werks TYPE marc-werks,
matnr TYPE marc-matnr,
bwtty TYPE marc-bwtty,
END OF gty_data.
DATA: gs_data TYPE gty_data,
gt_data TYPE TABLE OF gty_data.
DATA: gs_fieldcat TYPE lvc_s_fcat,
gt_fieldcat TYPE lvc_t_fcat.
*&-----------------------------Logic-----------------------------------*
gs_data = VALUE #( werks = '1010' matnr = 'gs_data的物料' bwtty = '1' ).
gt_data = VALUE #( ( werks = '1710' matnr = 'RM2_CP' bwtty = '1' )
( werks = '1710' matnr = '000000000000001480' bwtty = '2' )
( werks = '1710' matnr = '000000000000002181' bwtty = '3' ) ).
DATA: lo_tabdescr TYPE REF TO cl_abap_structdescr.
DATA: ls_field_in TYPE dfies,
lt_dfies TYPE ddfields.
DATA: ls_dfies LIKE LINE OF lt_dfies.
lo_tabdescr ?= cl_abap_structdescr=>describe_by_data( gs_data ).
CALL METHOD cl_salv_data_descr=>read_structdescr
EXPORTING
r_structdescr = lo_tabdescr
RECEIVING
t_dfies = lt_dfies.
LOOP AT lt_dfies INTO ls_dfies.
ASSIGN COMPONENT ls_dfies-fieldname OF STRUCTURE gs_data TO <f1>. "根据组件的名称,将这个组价分配给F1这个指针
ASSIGN COMPONENT sy-tabix OF STRUCTURE gs_data TO FIELD-SYMBOL(<fs_temp>)."临时定义指针,通过索引动态的访问结构成员
IF <f1> IS ASSIGNED.
gs_fieldcat-fieldname = ls_dfies-fieldname. "字段名
gs_fieldcat-coltext = ls_dfies-scrtext_l. "字段描述
APPEND gs_fieldcat TO gt_fieldcat.
ENDIF.
ENDLOOP.
cl_demo_output=>display( gt_data ).
可以通过组件名访问组件
ASSIGN COMPONENT ls_dfies-fieldname OF STRUCTURE gs_data TO . "根据组件的名称,将这个组价分配给F1这个指针
通过下标来访问组件
ASSIGN COMPONENT sy-tabix OF STRUCTURE gs_data TO FIELD-SYMBOL(<fs_temp>)."临时定义指针,通过索引动态的访问结构成员