2013-07-03 1 views
0

Задача состоит в создании переменной с динамическим именем. Не тип, но имя!
Все предложенные мной способы (например, через cl_abap_typedescr и cl_abap_elemdescr классы) были бесполезны.
Я хочу осуществить семантический что-то вроде этого, но этот синтаксис неверен:Динамически объявлять имя переменной

CREATE DATA (name) TYPE var_type. 

Есть ли решение?

+1

Зачем вам это нужно? – vwegert

+0

Вы действительно хотите создать совершенно новую переменную? (Почти наверняка вы не можете и задаетесь вопросом, почему вы захотите). Или вы пытаетесь ссылаться на одну из многих переменных, которые уже объявлены динамически? Например, если вы пытались ссылаться на INGRP10, но объявили INGRP01 на INGRP40, вы могли бы динамически присвоить переменную полевому символу. – Esti

+0

Ссылка на уже объявленную переменную проста и хорошо документирована, но дело не в этом. – Suncatcher

ответ

3

Я думаю, что если бы имя было объявлено как символ поля, это сработало бы.

Действие Это заявление объявляет символическое поле. Во время выполнения вы можете назначить конкретное поле символу поля с помощью 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. 
+0

Хорошо. На данный момент это самый близкий вариант. – Suncatcher

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. 

 Смежные вопросы

  • Нет связанных вопросов^_^