簡體   English   中英

長度可變的Char字段的動態類型定義

[英]Dynamic Type definition for a Char Field with variable length

對於內部使用,我需要定義一個結構化類型,其中一個字段是長度可變的char字段。

這樣的事情(我希望這個例子可以澄清我的問題):

DATA: lv_type TYPE char7.
lv_type = 'char128'. "The actual length will be determined during execution of the program

TYPES: BEGIN OF ty_satzcounter,
       satza TYPE zedist,
       addit TYPE (lv_type), "<----- Something like this (obviously, it doesn't work like 
                             "       this, but I think it clarifies my question)
       menge TYPE int1,
       END OF ty_satzcounter.

DATA: lt_satzcounter TYPE TABLE OF ty_satzcounter,
      ls_satzcounter TYPE ty_satzcounter.
...
...

這種類型的動態鍵入是不可能的,但是出於您的目的,具有動態長度的字符類型有一個string類型:

TYPES: satza TYPE zedist,
       addit TYPE string,
... 

我絕對支持JozsefSzikszai的解決方案,但是為了說明動態結構和表的額外復雜性,這里以一種可能的解決方案為例:

"your input
DATA(lv_charlength) = 128.
"or
DATA(lv_type) = 'CHAR128'.

DATA:
      lro_structdescr TYPE REF TO cl_abap_structdescr,
      lro_tabledescr  TYPE REF TO cl_abap_tabledescr,
      lro_datadescr   TYPE REF TO cl_abap_datadescr,
      lro_typedescr   TYPE REF TO cl_abap_typedescr,
      lt_component    TYPE abap_component_tab,
      ls_component    TYPE LINE OF abap_component_tab,
      lro_wa          TYPE REF TO data.

    FIELD-SYMBOLS: <fs_wa> TYPE any.
    FIELD-SYMBOLS: <fs_tab> TYPE table.


* determine components of structure -> lt_component    
    ls_component-name = 'SATZA'.
    ls_component-type ?= cl_abap_elemdescr=>describe_by_name( 'ZEDIST' ).
    APPEND ls_component TO lt_component.

    ls_component-name = 'ADDIT'.
    ls_component-type ?= cl_abap_elemdescr=>get_c( p_length = lv_charlength ).
    APPEND ls_component TO lt_component.

    "or
*   ls_component-name = 'ADDIT'.
*   ls_component-type ?= cl_abap_elemdescr=>describe_by_name( lv_type ).
*   APPEND ls_component TO lt_component.

    ls_component-name = 'MENGE'.
    ls_component-type ?= cl_abap_elemdescr=>describe_by_name( 'INT1' ).
    APPEND ls_component TO lt_component.

* get structure descriptor -> lro_STRUCTDESCR
    lro_structdescr ?= cl_abap_structdescr=>create( lt_component ).

* create work area of structure lro_STRUCTDESCR -> lro_WA
    CREATE DATA lro_wa TYPE HANDLE lro_structdescr.
*    ASSIGN lro_wa->* TO <fs_wa>. "work area/structure to use

    lro_datadescr ?= lro_structdescr.
    lro_tabledescr ?= cl_abap_tabledescr=>create( lro_datadescr ).

* Create dynmaic internal table
    CREATE DATA et_range_tab TYPE HANDLE lro_tabledescr.
*    ASSIGN et_range_tab->* TO <fs_tab>. "table to use

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM