问题!!!! 同时多个OOP ALV

2020-09-26 06:15发布

         点击此处--->   EasySAP.com群内免费提供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)

         点击此处--->   EasySAP.com群内免费提供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)
付费偷看设置
发送
6条回答
追夢秋陽
1楼 · 2020-09-26 06:40.采纳回答

正如已经写的,创建不同的引用/出现,因此建议使用内部表记录或CREATE DATA语句。 尤其要注意在ALV类方法中未按值传递的变量(因此包括内部数据表)

也要防止不同的ALV之间出现歧义,请不要忘记在变体/布局管理(结构DISVARIANT)中也使用不同的HANDLE或LOG_GROUP

我是小鹏鹏啊
2楼-- · 2020-09-26 06:40

感谢Sandra。

我不知道"不再释放与全局或静态变量不再相关的引用"。

感谢您的帮助。

SAP小菜
3楼-- · 2020-09-26 06:35

您应该将不同的ALV引用存储到不同的全局引用变量(例如内部引用表)中,因为不再与全局引用相关的引用 或静态变量被释放。

大简至美
4楼-- · 2020-09-26 06:32

嗨,Sandra Rossi,

谢谢你的建议。 抱歉,我在每次迭代中都在准备容器名称,但我没有分享。 对于每个标签,我都有不同的容器,并且我在不同的容器中而不是在单个容器中显示ALV。

 lv_name = sy-tabix。
  清除cont_name。
  CONCATENATE'CONT'lv_name INTO cont_name。
 
CPLASF-自律
5楼-- · 2020-09-26 06:56

我无法为您提供整个需求的解决方案,但是很明显,您的代码可以一次创建所有ALV,并将它们全部显示在同一自定义控件(CONT_NAME)中 ,因此只显示一个。 相反,如果您正在使用带有服务器分页的标签页(每次选择一个标签页,都会触发PAI),那么您一次只能加载一个ALV,一个对应于当前标签页。

shere_lin
6楼-- · 2020-09-26 06:35

我们做了类似的事情,并为所有选项卡使用了相同的容器和ALV,并使用了全局定义的字段符号作为ALV的数据表。

切换选项卡导致更改了全局字段符号所引用的表,重建字段目录并更新了ALV。

一周热门 更多>