如何在WDA ALV中具有动态列

2020-09-08 08:07发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我想根据输入的字段动态获取wda alv列的数量。

就像我在输入文件中输入日期一样,如果我输入3个月,我的alv中需要3列,

如果我花4个月作为输入,我的alv中需要4列。

请帮忙。

谢谢

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我想根据输入的字段动态获取wda alv列的数量。

就像我在输入文件中输入日期一样,如果我输入3个月,我的alv中需要3列,

如果我花4个月作为输入,我的alv中需要4列。

请帮忙。

谢谢

付费偷看设置
发送
2条回答
宇峰Kouji
1楼-- · 2020-09-08 08:33

您好Kashiap,

ALV中的列将基于节点中的ATTRIBUTE,即节点的每个属性都链接到ALV表中的各个列。

现在可以有多种情况:

1。 您要显示的ALV中的列已链接到某些标准后端表/结构。

2。 ALV中的列仅供最终用户使用,不与任何后端表/结构映射,在ALV中输入的数据将进一步用于某些计算,然后转储到DB表中或其他位置。

  • 在COMPONENTCONTROLLER的上下文中创建一个节点,并将同一节点拖放到接口控制器的DATA节点中(我认为您可能已经做过)。
  • 在WDDOINIT方法中,编写代码以创建动态属性。

在下面的示例中,我将节点的名称保留为" ND_TABLE"。

LIST_OF_ALL_FIELDS_OF_TBL_STR表示任何表/结构中的字段列表。

WA_OF_ALL_FIELDS_OF_TBL_STR表示上述表/结构的工作区。

LV_COUNT是用户输入,即所需的列数。

数据lo_nd_nd_table类型参考if_wd_context_node。

数据lo_nd_nd_table_info类型参考if_wd_context_node_info。

数据lv_attribute类型wdr_context_attribute_info。

lo_nd_nd_table = wd_context-> get_child_node(名称= wd_this-> wdctx_nd_table)。

lo_nd_nd_table_info = lo_nd_nd_table-> get_node_info()。

将" LIST_OF_ALL_FIELDS_OF_TBL_STR"放入" WA_OF_ALL_FIELDS_OF_TBL_STR"。

lv_attribute-name = WA_OF_ALL_FIELDS_OF_TBL_STR-NAME

lv_attribute-type_name = WA_OF_ALL_FIELDS_OF_TBL_STR-TYPE_NAME。

呼叫方法lo_nd_nd_table_info-> add_attribute(导出attribute_info = lv_attribute)。

如果是sy-tabix EQ LV_COUNT。

退出。

ENDIF。
ENDLOOP。

如果没有任何表或结构链接到我们的ALV表,那么我们可以使用DO语句来代替LOOP语句,如下所示。

DATA lv_index TYPE C VALUE 1。

执行LV_COUNT次。

CONCATENATE'ATT'lv_index INTO lv_attribute-name用'_'分隔。
lv_attribute-type_name ='CHAR30'。
调用方法lo_nd_nd_table_info-> add_attribute(导出attribute_info = lv_attribute)。

> lv_index = lv_index +1。

ENDDO。

请告诉我这种方法是否适合您。

此致

Harish

ZJXianG
2楼-- · 2020-09-08 08:35
  1. wda alv =动态节点中的动态列
  2. 动态节点=动态表

因此,最好使用RTS类创建动态内部表,使用if_wd_context_node_info-> add_new_child_node将新节点添加到根节点

一周热门 更多>