SAP ABAP ALV创建动态树形菜单

创建动态树形菜单——ALV

创建的合同越多,使用树形菜单能比较直观的地显示,而且展开下阶也能明确的知识相关的信息,比如合同中的出口成品有哪些。

设计要点:

第一、 Node_key一定要区分,不能重复,否则出错;

第二、 每一级别,其node_key编制有规律性;这样才能处理复杂的事件响应;

第三、 四层级别,下一级别包括上一级别的相关信息,在创建内表时可能包括;比如子类可以拥有父类的一些信息,孙类级别则包含子类以上的相关信息。这些信息为后续数据处理更直接更方便的提供了需要的信息。

代码设计:

*编制树节点及项目

DATA: BEGIN OF root OCCURS 0 ,
rkey TYPE string,
rtext TYPE string,
rname TYPE char1,
rcount TYPE string,
rhname LIKE zsd19cont-hname,
END OF root.
DATA: BEGIN OF child OCCURS 0.
        INCLUDE STRUCTURE root.
DATA:ckey TYPE string,
ctext TYPE string,
cname TYPE char1,
ccount TYPE string.
DATA: END OF child.
DATA: BEGIN OF grandson OCCURS 0.
        INCLUDE STRUCTURE child.
DATA:gkey TYPE string,
gtext TYPE string,
gname TYPE char1,
gcount TYPE string.
DATA: END OF grandson.
DATA: BEGIN OF nitem OCCURS 0.
        INCLUDE STRUCTURE grandson.
DATA:nkey TYPE string,
ntext TYPE string,
nname TYPE char1,
ncount TYPE string.
DATA: END OF nitem.
*&---------------------------------------------------------------------*
*&      Form  set_root_info
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM set_root_info.
  CLEAR t_cont[].
  CLEAR root[].
  SELECT * FROM zsd19cont INTO CORRESPONDING FIELDS OF TABLE t_cont WHERE hname IN s_hname AND lvorm <> 'X'.
  LOOP AT t_cont.
    count = sy-tabix.
    CONCATENATE 'r' count INTO root-rkey.
    CONCATENATE '合同' t_cont-sname INTO root-rtext.
    CONDENSE root-rkey NO-GAPS.
    root-rname = '1'.
    root-rcount = count.
    root-rhname = t_cont-hname.
    APPEND root.
    CLEAR root.
  ENDLOOP.
* root-rkey = 'r2'.
* root-rtext = '合同-2009-138'.
* root-rname = '1'.
* root-rcount = 2.
* append root.
* clear root.
ENDFORM.                    "set_root_info
*&---------------------------------------------------------------------*
*&      Form  set_child_info
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM set_child_info.
  CLEAR child[].
  LOOP AT root.
    MOVE-CORRESPONDING root TO child .
    CONCATENATE root-rcount '1' INTO count.
    CONDENSE count NO-GAPS.
    CONCATENATE 'c' count INTO child-ckey.
    CONDENSE child-ckey NO-GAPS.
    child-ctext = '商品信息'.
    child-cname = '1'.
    child-ccount = count .
    APPEND child.
    CLEAR child.
    MOVE-CORRESPONDING root TO child .
    CONCATENATE root-rcount '2' INTO count.
    CONDENSE count NO-GAPS.
    CONCATENATE 'c' count INTO child-ckey.
    CONDENSE child-ckey NO-GAPS.
    child-ctext = '报关信息'.
    child-cname = '1'.
    child-ccount = count .
    APPEND child.
    CLEAR child.
  ENDLOOP.
ENDFORM.                    "set_child_info
*&---------------------------------------------------------------------*
*&      Form  set_grandson_info
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM set_grandson_info.
  CLEAR grandson[].
  LOOP AT child.
    IF child-ctext = '商品信息'.
      MOVE-CORRESPONDING child TO grandson .
      CONCATENATE child-ccount '1' INTO count.
      CONDENSE count NO-GAPS.
      CONCATENATE 'g' count INTO grandson-gkey.
      CONDENSE grandson-gkey NO-GAPS.
      grandson-gtext = '出口成品→维护'.
      grandson-gname = '1'.
      grandson-gcount = count .
      APPEND grandson.
      CLEAR grandson.
      MOVE-CORRESPONDING child TO grandson .
      CONCATENATE child-ccount '2' INTO count.
      CONDENSE count NO-GAPS.
      CONCATENATE 'g' count INTO grandson-gkey.
      CONDENSE grandson-gkey NO-GAPS.
      grandson-gtext = '进口料件→汇总'.
      grandson-gname = '1'.
      grandson-gcount = count .
      APPEND grandson.
      CLEAR grandson.
    ELSE.
      MOVE-CORRESPONDING child TO grandson .
      CONCATENATE child-ccount '1' INTO count.
      CONDENSE count NO-GAPS.
      CONCATENATE 'g' count INTO grandson-gkey.
      CONDENSE grandson-gkey NO-GAPS.
      grandson-gtext = '出口成品→报关'.
      grandson-gname = '1'.
      grandson-gcount = count .
      APPEND grandson.
      CLEAR grandson.
      MOVE-CORRESPONDING child TO grandson .
      CONCATENATE child-ccount '2' INTO count.
      CONDENSE count NO-GAPS.
      CONCATENATE 'g' count INTO grandson-gkey.
      CONDENSE grandson-gkey NO-GAPS.
      grandson-gtext = '进口料件→报关'.
      grandson-gname = '1'.
      grandson-gcount = count .
      APPEND grandson.
      CLEAR grandson.
      MOVE-CORRESPONDING child TO grandson .
      CONCATENATE child-ccount '3' INTO count.
      CONDENSE count NO-GAPS.
      CONCATENATE 'g' count INTO grandson-gkey.
      CONDENSE grandson-gkey NO-GAPS.
      grandson-gtext = '进料结转数→报关'.
      grandson-gname = '1'.
      grandson-gcount = count .
      APPEND grandson.
      CLEAR grandson.
    ENDIF.
  ENDLOOP.
ENDFORM.                    "set_grandson_info
*&---------------------------------------------------------------------*
*&      Form  set_item_info
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM set_item_info."曾孙处理
  CLEAR nitem[].
  DATA : tnum TYPE i ,
  tcount TYPE string.
  SELECT * FROM zsd19chuk INTO CORRESPONDING FIELDS OF TABLE i_chuk FOR ALL ENTRIES IN grandson WHERE hname = grandson-rhname.
* loop at grandson.
* select * from zsd19chuk into zsd19chuk where hname = grandson-rhname.
* if sy-subrc = 0 .
* move-corresponding zsd19chuk to i_chuk.
* append i_chuk.
* clear i_chuk.
* endif.
* endselect.
*
* clear zsd19chuk.
* endloop.
  LOOP AT grandson.
    IF grandson-gtext = '出口成品→维护' AND grandson-ctext = '商品信息'.
      LOOP AT i_chuk WHERE hname = grandson-rhname.
        tnum = tnum + 1 .
        tcount = tnum.
        MOVE-CORRESPONDING grandson TO nitem.
        CONCATENATE grandson-gcount tcount INTO count.
        CONCATENATE 'n' count INTO nitem-nkey.
        CONDENSE nitem-nkey NO-GAPS.
        nitem-ntext = i_chuk-extwo.
        nitem-nname = '1'.
        nitem-ncount = count.
        APPEND nitem.
        CLEAR nitem.
      ENDLOOP.
      tnum = 0 .
    ENDIF.
  ENDLOOP.
ENDFORM.                    "set_item_info
*&---------------------------------------------------------------------*
*& Form build_node_and_item_table
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM build_node_and_item_table
USING
node_table TYPE treev_ntab
item_table TYPE item_table_type.
  DATA: node TYPE treev_node,
  item TYPE mtreeitm.
  PERFORM set_root_info.
  PERFORM set_child_info.
  PERFORM set_grandson_info.
  PERFORM set_item_info.
  LOOP AT root.
    node-node_key = root-rkey.
    CLEAR node-relatkey.
    CLEAR node-relatship.
    node-hidden = ' '.
    node-disabled = ' '.
    node-isfolder = 'X'.
    CLEAR node-n_image.
    CLEAR node-exp_image.
    CLEAR node-expander.
    APPEND node TO node_table.
    CLEAR node.
    CLEAR item.
    item-node_key = root-rkey.
    item-item_name = '1'. " Item with name '1'
    item-class = cl_gui_list_tree=>item_class_text. " Text Item
    " the with of the item is adjusted to its content (text)
    item-alignment = cl_gui_list_tree=>align_auto.
    " use proportional font for the item
    item-font = cl_gui_list_tree=>item_font_prop.
    item-text = root-rtext.                                 "#EC NOTEXT
    APPEND item TO item_table.
  ENDLOOP.
*----------------------------------------------------------------------------------
  LOOP AT child.
    CLEAR node.
    node-node_key = child-ckey.
    node-relatkey = child-rkey..
    node-relatship = cl_gui_list_tree=>relat_last_child.
    node-isfolder = 'X'.
    APPEND node TO node_table.
    CLEAR item.
    item-node_key = child-ckey.
    item-item_name = '1'.
    item-class = cl_gui_list_tree=>item_class_text.
    item-alignment = cl_gui_list_tree=>align_auto.
    item-font = cl_gui_list_tree=>item_font_prop.
    item-text = child-ctext.                                "#EC NOTEXT
    APPEND item TO item_table.
  ENDLOOP.
*----------------------------------------------------------------------------------
  LOOP AT grandson.
    CLEAR node.
    node-node_key = grandson-gkey.
    node-relatkey = grandson-ckey.
    node-relatship = cl_gui_list_tree=>relat_last_child.
    node-isfolder = 'X'.
    APPEND node TO node_table.
    CLEAR item.
    item-node_key = grandson-gkey.
    item-item_name = '1'.
    item-class = cl_gui_list_tree=>item_class_text.
    item-alignment = cl_gui_list_tree=>align_auto.
    item-font = cl_gui_list_tree=>item_font_prop.
    item-text = grandson-gtext.                             "#EC NOTEXT
    APPEND item TO item_table.
  ENDLOOP.
  LOOP AT nitem.
    CLEAR node.
    node-node_key = nitem-nkey. "#ec notext
    node-relatkey = nitem-gkey.
    node-relatship = cl_gui_list_tree=>relat_last_child.
    APPEND node TO node_table.
    CLEAR item.
    item-node_key = nitem-nkey.
    item-item_name = '1'.
    item-class = cl_gui_list_tree=>item_class_text.
    item-length = 15.
    item-usebgcolor = 'x'.
    item-text = nitem-ntext.
    APPEND item TO item_table.
  ENDLOOP.
*----------------------------------------------------------------------------------
* CLEAR NODE.
* NODE-NODE_KEY = 'New2'. "#EC NOTEXT
* NODE-RELATKEY = 'Child1'.
* NODE-RELATSHIP = CL_GUI_LIST_TREE=>RELAT_LAST_CHILD.
* APPEND NODE TO NODE_TABLE.
*
* CLEAR ITEM.
* ITEM-NODE_KEY = 'New2'.
* ITEM-ITEM_NAME = '2'.
* ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.
* ITEM-LENGTH = 4.
* ITEM-USEBGCOLOR = 'X'.
* ITEM-TEXT = '0200'.
* APPEND ITEM TO ITEM_TABLE.
ENDFORM. " build_node_and_item_table

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/217581.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言--每日选择题--Day35

第一题 1. 有如下定义&#xff1a;(x y) % 2 (int) a / (int) b 的值是&#xff08;&#xff09; int x 3; int y 2;float a 2.5; float b 3.5; A&#xff1a;0 B&#xff1a;2 C&#xff1a;1.5 D&#xff1a;1 答案及解析 D 本题是考查强制类型转换和操作符优先级 操作…

JavaWeb 前端工程化

前端工程化是使用软件工程的方法来单独解决前端的开发流程中模块化、组件化、规范化、自动化的问题,其主要目的为了提高效率和降低成本。 前端工程化实现技术栈 前端工程化实现的技术栈有很多,我们采用ES6nodejsnpmViteVUE3routerpiniaaxiosElement-plus组合来实现 ECMAScri…

由11月27日滴滴崩溃到近两个月国内互联网产品接二连三崩溃引发的感想

文章目录 知乎文分析微信聊天截图微信公众号 滴滴技术 发文k8s 官方文档滴滴官方微博账号 近两个月国内互联网产品“崩溃”事件2023-10-23 语雀崩溃2023-11-12 阿里云崩溃2023-11-27 滴滴崩溃2023-12-03 腾讯视频崩溃总结 我的感想 知乎文分析 最近连续加班&#xff0c;打车较…

简单的界面与数据分离的架构

草图绘制于2021年2月19日 当时用到了&#xff1a;qt的子项目、delegate、view和widget的关系&#xff0c;有感而写的小备忘&#xff0c;2022年底考的软件设计师里面的设计模式虽然可能早已包含&#xff0c;但自己也得有自己啊&#xff0c;要把自己哪怕不成熟的东西也记录下来&…

操作系统概述及发展史、Linux内核、发行版及应用领域

一、 操作系统&#xff08;Operation System&#xff0c;OS&#xff09; 裸机&#xff1a;没有安装操作系统的计算机 如果想在 裸机 上运行自己所编写的程序&#xff0c;就必须用机器语言书写程序如果计算机上安装了操作系统&#xff0c;就可以在操作系统上安装支持的高级语言…

【算法刷题】Day12

文章目录 1004. 最大连续1的个数 III题干&#xff1a;算法原理&#xff1a;1、暴力枚举 计数器2、利用滑动窗口 代码&#xff1a; 746. 使用最小花费爬楼梯题干&#xff1a;算法原理&#xff1a;解法一&#xff1a;1.1 状态表示1.2 状态转移方程1.3 初始化1.4 填表顺序1.5 返回…

unity学习笔记18

模型文件属性简介 1.动画类型&#xff1a;一共有四种&#xff1a;无 表示没有动画&#xff0c;旧版 就表示这个模型文件里面的动画片段可以用animation组件来播放的&#xff0c;最后两个 ”泛型“和“人形”都是animator组件来播放的。区别是泛型支持所有类型的动画播放&#x…

LangChain的函数,工具和代理(四):使用 OpenAI 函数进行标记(Tagging) 提取(Extraction)

在上一篇博客LangChain中轻松实现OpenAI函数调用 中我们学习了如何使用Pydantic来生成openai的函数描述对象&#xff0c;并且通过在langchain中调用Pydantic生成的函数描述变量来轻松实现openai的函数调用功能&#xff0c;在此基础上今天我们再介绍两个非常实用的功能&#xff…

vue实现css过渡与css动画

一、过渡和动画的区别 过渡&#xff1a;通常用来表示元素上属性状态的变化。动画&#xff1a;通常用来表示元素运动的情况。 二、使用Vue实现基础得css过渡与动画 1. 动画 /* css */ keyframes leftToRight {0% {transform: translateX(-100px);}50% {transform: translateX(-5…

万兆多模光模块SFP-10G-SR:高速短距传输的最优选

随着信息技术的发展&#xff0c;企业和个人对数据传输速度和带宽需求不断增加。传统的千兆以太网已经不能满足高速数据传输的要求&#xff0c;因此万兆以太网技术崭露头角。作为万兆以太网中的重要组件之一&#xff0c;万兆多模SFP-10G-SR光模块引起了广泛的关注。本文将介绍万…

Sentinel基础知识

Sentinel基础知识 资源 1、官方网址&#xff1a;https://sentinelguard.io/zh-cn/ 2、os-china: https://www.oschina.net/p/sentinel?hmsraladdin1e1 3、github: https://github.com/alibaba/Sentinel 一、软件简介 Sentinel 是面向分布式服务架构的高可用流量防护组件…

【原神游戏开发日志1】缘起

【原神游戏开发日志1】缘起 版权声明 本文为“优梦创客”原创文章&#xff0c;您可以自由转载&#xff0c;但必须加入完整的版权声明 文章内容不得删减、修改、演绎 相关学习资源见文末 大家好&#xff0c;最近看到原神在TGA上频频获奖&#xff0c;作为一个14年经验的游戏开…

springboot集成docker

1、快速构建springboot-demo项目 地址&#xff1a;https://start.spring.io/

【C++】异常处理 ⑧ ( 标准异常类 | 标准异常类继承结构 | 常用的标准异常类 | 自定义异常类继承 std::exception 基类 )

文章目录 一、抛出 / 捕获 多个类型异常对象1、标准异常类2、标准异常类继承结构3、常用的标准异常类 二、自定义异常类继承 std::exception 基类1、自定义异常类继承 std::exception 基类2、完整代码示例 - 自定义异常类继承 std::exception 基类 一、抛出 / 捕获 多个类型异常…

万字长文带你搞定MMUTLBTWU

最近一直在学习内存管理&#xff0c;也知道MMU是管理内存的映射的逻辑IP&#xff0c;还知道里面有个TLB。 今天刚刚好看到了几篇前辈的文章&#xff0c;很是不错&#xff0c;于是这里来一起学习一下吧。 PART 一&#xff1a;MMU 架构篇 MMU&#xff08;Memory Management Uni…

线程池(Linux +C/C++)

参考 手写线程池 - C语言版 | 爱编程的大丙 (subingwen.cn) 1.为什么需要线程池&#xff1f; 1&#xff09;线程问题&#xff1a; &#xff08;1&#xff09;如果只使用线程创建函数&#xff0c;在不断有新的任务进来的时候&#xff0c;需要不断的创建任务&#xff1b;任务在…

Temu数据接口:为开发者提供的强大工具

在如今数字化的时代&#xff0c;数据成为了商业运营中不可或缺的一部分。为了满足开发者对数据获取和分析的需求&#xff0c;Temu平台推出了强大的数据接口&#xff0c;为开发者提供了丰富的API服务。通过Temu数据接口&#xff0c;开发者可以方便地获取商品信息、订单数据、用户…

【Avue】select的远程搜索 [模糊搜索]

一、需求 【模糊搜索】 二、实现avue的远程搜索 1、search为搜索 2、remote远程搜索 3、dictValue{{key}}为输入的值

@Scheduled,Quartz,XXL-JOB三种定时任务总结

Scheduled&#xff0c;Quartz&#xff0c;XXL-JOB三种定时任务总结 一、Scheduled 简介 Scheduled 是 Spring 框架中用于声明定时任务的注解。通过使用 Scheduled 注解&#xff0c;你可以指定一个方法应该在何时执行&#xff0c;无需依赖外部的调度器。 这个注解通常与Enab…

python的安装

python官网地址&#xff1a;https://www.python.org/ 以在windows下安装3.12.0版本为例。 下载安装包&#xff1a; 下载下来的安装包是python-3.12.0-amd64.exe&#xff0c;双击安装&#xff0c;按照提示&#xff0c;一步一步往下走&#xff1a; 到cmd下&#xff0c;输入py…