Abap 如何将动态表键从CDPOS表字段TABKEY提取到结构中?

Abap 如何将动态表键从CDPOS表字段TABKEY提取到结构中?,abap,sap-basis,Abap,Sap Basis,我需要从cdpos tabkey动态获取相应字段。比如说,我需要从tabkey那里获得植物、材料等 到目前为止,我尝试了下面的代码,但当我使用MOVE语句时,出现了类型冲突错误。当我使用ASSIGN语句时,赋值就像变量一样,而不像结构格式,并且我无法从结构中获得精确的字段 FIELD-SYMBOLS <table> TYPE any. DATA ls_data TYPE REF TO data. CREATE DATA ls_data TYPE (t_cdpos-tabname).

我需要从
cdpos tabkey
动态获取相应字段。比如说,我需要从tabkey那里获得植物、材料等

到目前为止,我尝试了下面的代码,但当我使用
MOVE
语句时,出现了类型冲突错误。当我使用
ASSIGN
语句时,赋值就像变量一样,而不像结构格式,并且我无法从结构中获得精确的字段

FIELD-SYMBOLS <table> TYPE any.
DATA ls_data TYPE REF TO data.
CREATE DATA ls_data TYPE (t_cdpos-tabname).
ASSIGN ls_data->* TO <table>.
*MOVE-CORRESPONDING t_cdpos-tabkey TO <table>.
*<table> = t_cdpos-tabkey.
ASSIGN t_cdpos-tabkey to <table>.
字段符号类型任意。
数据ls_数据类型引用到数据。
创建数据ls\ U数据类型(t\ U cdpos-tabname)。
将ls_数据->*分配给。
*将对应的t_cdpos-tabkey移动到。
*=t_cdpos-tabkey。
将t_cdpos-tabkey分配给。

任何人请帮我解决。

您可以在功能模块
CHANGEDOCU\u key\u ANY2CHAR
中找到组装钥匙的代码。功能模块
CHANGEDOCU\u KEY\u CHAR2ANY
执行相反的操作。功能组
SCD8
的其他功能模块也可能相关-检查内联文档。

您可以使用
CASTING TYPE
构造来完成此任务。以下是基于RTT的示例解决方案:

DATA: handle        TYPE REF TO data,
      lref_struct TYPE REF TO cl_abap_structdescr.

SELECT DISTINCT * UP TO 100 ROWS
  FROM cdpos
  INTO TABLE @DATA(t_cdpos)
  WHERE tabname NOT LIKE '/%'.

LOOP AT t_cdpos ASSIGNING FIELD-SYMBOL(<fs_cdpos>).
  lref_struct ?= cl_abap_structdescr=>describe_by_name( <fs_cdpos>-tabname ).

* get key fields
  DATA(key_fields) = VALUE ddfields( FOR line IN lref_struct->get_ddic_field_list( ) WHERE ( keyflag NE space ) ( line ) ).

* filling key field components
  DATA(key_table) = VALUE abap_component_tab( FOR ls_key IN key_fields
                                              ( name = ls_key-fieldname
                                                type = CAST #( cl_abap_datadescr=>describe_by_name( ls_key-domname ) )
                                               )
                                            ).
* create key fields type handle
  TRY.
      DATA(r_type_struct) = cl_abap_structdescr=>create( key_table ).
    CATCH cx_sy_struct_creation .
  ENDTRY.

* create key type
  CHECK r_type_struct IS NOT INITIAL.
  CREATE DATA handle TYPE HANDLE r_type_struct.
  ASSIGN handle->* TO FIELD-SYMBOL(<structure>).

* assigning final key structure
  ASSIGN <fs_cdpos>-tabkey TO <structure> CASTING TYPE HANDLE r_type_struct.
ENDLOOP.

是否要移动关键字段?@lausek是的,我的要求是将关键字段分解为结构格式,不建议使用偏移量,因为tabname将动态更改。我已经浏览了功能模块,为了更清楚,我需要显示工厂更改文档,我得到了所有数据的唯一瓶颈是在不使用偏移量方法的情况下从tabkey中分离工厂和其他细节。感谢这个示例,如何获取结构值,例如,我想从结构中获取werks,当我写入-werks时,我在程序中得到的数据对象“”没有结构,因此没有调用组件“WERKS”。称为“WERKS”。@ArchanaPalani,查看回答您问题的更新。非常感谢您如此聪明的回答:-)它解决了我的问题,学到了一些新东西:-)
ASSIGN COMPONENT 1 OF STRUCTURE <table> TO <component>.
LOOP AT r_type_struct->components[] ASSIGNING FIELD-SYMBOL(<fs_comp>).
  ASSIGN COMPONENT <fs_comp>-name OF STRUCTURE <table> TO <component>.
  IF <COMPONENT> IS ASSIGNED.
  "do smth
  ENDIF.
ENDLOOP.