День добрый всем.
Помогите, пожалуйста, разобраться с одной проблемой с CL_SALV_TABLE. Суть моей задачи: есть необходимость выводить в гриде внутренние таблички со схожей структурой и практически идентичным набором функций. Соответственно, я хочу всю логику, связанную с показом таблички и обработкой кое-каких событий засунуть в свой класс, чтобы код не дублировать. В самом классе я просто планирую держать ссылки на показываемую табличку и грид, ее отображающий.
В коде сие выглядит примерно следующим образом:
Code:
CLASS lcl_my_class DEFINITION.
PUBLIC SECTION.
METHODS: constructor IMPORTING im_data TYPE STANDARD TABLE,
show_grid.
PRIVATE SECTION.
DATA: mr_data TYPE REF TO data.
ENDCLASS.
CLASS lcl_my_class IMPLEMENTATION.
METHOD constructor.
GET REFERENCE OF im_data INTO me->mr_data.
ENDMETHOD.
METHOD show_grid.
DATA: lo_grid TYPE REF TO cl_salv_table.
FIELD-SYMBOLS: <lt_data> TYPE TABLE.
ASSIGN me->mr_data->* TO <lt_data>.
cl_salv_table=>factory(
IMPORTING r_salv_table = lo_grid
CHANGING t_table = <lt_data> ).
lo_grid->display( ).
ENDMETHOD.
ENDCLASS.
Использование:
Code:
DATA: lo_cls TYPE REF TO lcl_my_class,
lt_table TYPE STANDARD TABLE OF ... .
CREATE OBJECT lo_cls EXPORTING im_data = lt_table.
lo_cls->show_grid( ).
Проблема в том, что при вызове метода FACTORY я получаю эксепшн CX_SY_DYN_CALL_ILLEGAL_TYPE: дескать, тип таблички (T_TABLE) рожей не вышел. Под отладкой проверял: и ссылка, и символ ведут к нормальной таблице с данными, внешне прикопаться не к чему. Конечно, можно перенести параметр IM_DATA из конструктора в метод SHOW_GRID и там его скармливать FACTORY (проверял, так работает), но по ряду причин это не слишком удобно. Опять же, хочется понять, что не так в текущей реализации. Сталкивался кто с подобным?