点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
大家好,
我需要显示多个ALV。 我必须使用OOPS方法,因为我必须在不同的TABS中显示ALV。 如下所示
选项卡数是动态的,最多可以显示20个。
为了达到要求,我在循环中调用了方法SET_TABLE_FOR_FIRST_DISPLAY。 下面是代码段。
在gt_zco_csprot00处将LOOP放入ls_zco_csprot00。 lv_name = sy-tabix。 清除cont_name。 CONCATENATE'CONT'lv_name INTO cont_name。 创建对象gref_con 出口 container_name =连续名称 例外情况 cntl_error = 1 cntl_system_error = 2 create_error = 3 lifetime_error = 4 lifetime_dynpro_dynpro_link = 5 其他= 6。 创建对象gref_alv_grid 出口 i_parent = gref_con 例外情况 error_cntl_create = 1 error_cntl_init = 2 error_cntl_link = 3 error_dp_create = 4 其他= 5。 呼叫方法gref_alv_grid-> set_table_for_first_display 出口 is_layout = ls_layout i_save ='A' 改变 it_outtab = gt_final1 it_fieldcatalog = gt_fcat 例外情况 invalid_parameter_combination = 1 程序错误= 2 too_many_lines = 3 其他= 4。 ENDLOOP。
每次迭代都为我提供了新的参考,但我的ALV并未显示正确的数据,并且所有先前ALV中的最后一个ALV的数据均被覆盖。
我知道我可以创建不同的对象来解决该问题,但是由于它本质上是动态的,因此我需要一个动态的解决方案。
我们将不胜感激!!!!!
报告ztest_dna。 初始化。 CLASS lcl_class定义。 公共部分。 方法显示。 方法输入IMPORTING VAL TYPE i。 数据:值类型i。 ENDCLASS。 CLASS lcl_class实施。 方法显示。 写:/我->值。 终结法。 方法进入。 me-> value = val。 终结法。 ENDCLASS。 选择开始。 数据:lo_class类型参考lcl_class。 做20次。 创建对象lo_class。 呼叫方法lo_class-> enter 出口 val = sy-index。 lo_class-> display()。 ENDDO。
以上程序用于测试,但此程序可以正常工作。 但是使用ALV不能正常工作。
P.S。 :方法set_table_for_first_display中的数据正确无误。
此致
Nooruddin Bohra
(14.5 kB)
正如已经写的,创建不同的引用/出现,因此建议使用内部表记录或CREATE DATA语句。 尤其要注意在ALV类方法中未按值传递的变量(因此包括内部数据表)
也要防止不同的ALV之间出现歧义,请不要忘记在变体/布局管理(结构DISVARIANT)中也使用不同的HANDLE或LOG_GROUP
感谢Sandra。
我不知道"不再释放与全局或静态变量不再相关的引用"。
感谢您的帮助。
您应该将不同的ALV引用存储到不同的全局引用变量(例如内部引用表)中,因为不再与全局引用相关的引用 或静态变量被释放。
嗨,Sandra Rossi,
谢谢你的建议。 抱歉,我在每次迭代中都在准备容器名称,但我没有分享。 对于每个标签,我都有不同的容器,并且我在不同的容器中而不是在单个容器中显示ALV。
我无法为您提供整个需求的解决方案,但是很明显,您的代码可以一次创建所有ALV,并将它们全部显示在同一自定义控件(CONT_NAME)中 ,因此只显示一个。 相反,如果您正在使用带有服务器分页的标签页(每次选择一个标签页,都会触发PAI),那么您一次只能加载一个ALV,一个对应于当前标签页。
我们做了类似的事情,并为所有选项卡使用了相同的容器和ALV,并使用了全局定义的字段符号作为ALV的数据表。
切换选项卡导致更改了全局字段符号所引用的表,重建字段目录并更新了ALV。
一周热门 更多>