动态声明变量名

时间:2013-07-03 17:30:30

标签: variables dynamic sap declaration abap

任务是使用动态名称创建变量。不是打字,而是名字!
向我提出的所有方式(例如通过cl_abap_typedescrcl_abap_elemdescr类)都是无用的 我想在语义上实现这样的东西,但这种语法不正确:

CREATE DATA (name) TYPE var_type.

有没有解决方案?

2 个答案:

答案 0 :(得分:4)

我认为如果'name'被声明为字段符号,它就会起作用。

效果 该语句声明了一个名为的符号字段。在运行时,您可以使用ASSIGN将具体字段分配给字段符号。使用字段符号执行的所有操作都会直接影响分配给它的字段。

试试这个:

data:
  b_1 type i,
  b_2 type i,
  b_3 type i,
  b_4 type i,
  num1(1) type n,
  fldname type fieldname.

FIELD-SYMBOLS:
  <fld> type i.

do 4 times.
  num1 = sy-index.
  CONCATENATE 'B_' num1 into fldname.
  ASSIGN (fldname) to <fld>.
  <fld> = sy-index.
enddo.

write: b_1, b_2, b_3, b_4.

答案 1 :(得分:0)

您基本上无法使用任何类型的ABAP语法执行此操作。您当然可以使用内部表编写一个模拟此函数的函数,类似于此(我省略了错误处理)

class cl_dyn_variable definition.
  public section.

    methods create_variable
      importing i_name type clike
                i_type type string.

    methods get_variable
      importing i_name type clike
      returning value(r_data) type ref to data.

  private section.
    types: begin of lty_s_variable,  
             name type string,
             r_data type ref to data,
           end of lty_s_variable,
           lty_t_variable type sorted table of lty_s_variable with unique key name.

    data mt_variable type lty_t_variable.

endclass.

class cl_dyn_varaible implementation.

  method create_varaible.
    data ls_new_var type lty_s_variable.

    ls_new_var-name = i_name.
    create data ls_new_var-r_data type (i_type).
    insert ls_new_var into table mt_variable.

  endmethod.

  method get_variable.
    data lsr_var type ref to lty_s_variable.

    read table mt_variable with table key name = i_name
         reference into lsr_var.
    if sy-subrc <> 0.
      "...error handling 
    else.
      r_data = lsr_var->r_data.
    endif.
  endmethod.

endclass.