每次按Enter或任何命令按钮,程序都会提示错误信息。
基于这个帖子http://scn.sap.com/thread/65856我应该声明我的内部表 全球最重要的包括。
即使我已经全局添加了所有变量,但错误仍然相同。
Top Include。
data: gr_data type ref to data.
data: la_data type ref to data.
field-symbols: <gt_data> type standard table.
班级声明
me->get_data( CHANGING c_data = <f_tab> ). " Fetch Dynamic Data
METHOD get_data.
GET REFERENCE OF c_data INTO la_data.
move la_data TO gr_data.
assign gr_data->* to <gt_data>.
me->display( ).
assign gr_data->* to <gt_data>.
IF gc_custom_container is initial.
CREATE OBJECT gc_custom_container
EXPORTING
container_name = gv_mycontainer.
ENDIF.
if table is not bound.
try.
"// Create ALV Instance
cl_salv_table=>factory(
exporting
r_container = gc_custom_container
container_name = 'TC_MIXING'
importing
r_salv_table = table
changing
t_table = <gt_data>
).
catch cx_salv_msg. "#EC NO_HANDLER
endtry.
"// Setup ALV Attributes
functions = table->get_functions( ).
functions->set_all( abap_true ).
columns = table->get_columns( ).
columns->set_optimize( abap_true ).
try.
column = columns->get_column( 'MANDT' ).
column->set_technical( if_salv_c_bool_sap=>true ).
catch cx_salv_not_found.
endtry.
"// Dispalay ALV Model
table->display( ).
else.
table->refresh( ).
endif.
ENDMETHOD.
和另一个问题: 如何基于field-symbol动态创建结构。这可能吗?
ls_testvar like line of <f_tab>.
感谢和问候, Mapet
答案 0 :(得分:0)
问题二是可能的,使用运行时类型服务。
看看运行时类型服务。
SE24 CL_ABAP_CLASSDESCR运行时类型服务 CL_ABAP_DATADESCR运行时类型服务 CL_ABAP_ELEMDESCR运行时类型服务 CL_ABAP_INTFDESCR运行时类型服务 CL_ABAP_OBJECTDESCR运行时类型服务 CL_ABAP_REFDESCR运行时类型服务 CL_ABAP_STRUCTDESCR运行时类型服务 CL_ABAP_TABLEDESCR运行时类型服务 CL_ABAP_TYPEDESCR运行时类型服务
你可以获得fieldsymbol的类型并根据它创建一个结构,也许你必须遍历fieldsymbol,如果它是组合类型并添加每个组件。
答案 1 :(得分:0)
我同意,你不应该将字段符号传递给表数据的更改参数!使用全局或静态表。您还应该使用类型化表而不是数据,并在设计时创建字段目录。这大大提高了性能。
干杯
答案 2 :(得分:0)
持有ALV的table
变量也必须全局声明。
cl_salv_table=>factory(
exporting
r_container = gc_custom_container
container_name = 'TC_MIXING'
importing
r_salv_table = table
changing
t_table = <gt_data>
).
您应该将数据检索与显示代码分开,如下所示:
START-OF-SELECTION.
gr_class->get_data( ).
CALL SCREEN 2000.
PBO:
gr_class->display.
您的显示方式:
METHOD display IMPLEMENTATION.
IF me->gr_container IS NOT BOUND.
gr_table->display( ).
ELSE.
gr_table->refresh( ).
ENDIF.