在最近的一次twitter"对话"中,我询问了一些常见的编程错误。我得到的一个答案是:
好吧……SAP Skipt也将消亡多年……
我认为SAPGUI和GUI控件将统治许多SAP开发人员的日常工作多年。
无论如何。这篇博文的原因是另一个经常出现的错误。如果你是一个有经验的程序员:
多个控件实例
当创建一个GUI控件时,你需要有一个父容器。一个常见的错误是,大数据培训班,控件将被一次又一次地创建。这是可能的,但用户将只看到最初创建的控件。
如果您知道您要做什么,您可以在一个容器中堆叠多个不同的控件,并确保只有一个控件可见。
下面是一个小(德语)演示:https://www.tricktresor.de/blog/controls-stapeln/
识别此错误的唯一方法是看一下CL\u GUI\u CONTAINER reference的children表
CONTAINER structure
我想到了可视化CONTAINER结构:
识别对象引用
如果给定了顶部容器,显示结构很容易,因为所有的子对象都存储在每个控件的属性表children中。
困难的部分是:如何识别这些对象,以便您知道哪个对象引用程序中的哪个变量。
有两种可能:
通过系统调用可以找到内部对象id:
通过使用RTTI(运行时类型信息)可以找到对象的类型:
通过此信息,消费返利新模式,我可以创建对象标识就像在调试器中看到的一样:
这个信息也使得构建树非常舒服,因为我有唯一的对象名。
如果在程序中全局定义了一个特定对象的变量名,那么找到它就很容易了。在这里您可以使用功能模块GET\ U GLOBAL\ U SYMBOLS来获得所有使用变量的列表。
在这个功能模块的结果表中有一些有用的字段。对象实例的类型为"r"和reftypeloc"CLAS"。
使用脏赋值,我可以获取对象引用并将其存储在内部表中,哪个云服务器好,以显示对象id的变量名。
显示容器结构
使用所有这些信息,我可以显示给定对象的容器结构。对于放置在dynpro上的容器,我可以显示CL\u GUI\u CONTAINER=>SCREEN0或SCREEN1的子级(取决于弹出级别)。
没有直接链接到dynpro的容器,企业内部软件,像CL\u GUI\u DOCKING\u CONTAINER或CL\u GUI\u DIALOGBOX\u CONTAINER只能通过提供实例来显示。
对象信息
对于我经历的另一个项目,忽略了每个对象的属性"name"。使用此属性时有一些奇怪的行为:
但是,将名称添加到控件可以更容易地识别控件和容器。如果容器是CL\u GUI\u CUSTOM\u容器,那么将设置Dynpro区域的名称,这非常有用。
用法
要使用此工具,您需要在Dynpro的PAI末尾实现一行:
对话框将显示容器层次结构的结构。
另一种方法是将代码行放在调试器中脚本窗口中的方法脚本。选择左侧的"直接执行",然后按"执行脚本"。
优化
我可以想到一些增强功能…
应该有一个按钮或特殊的节点条目来刷新当前结构。
到目前为止,您可以添加一个要显示的控件。特别是如果你有许多停靠容器,将所有这些容器添加到显示器上会很有帮助。
在这个版本中,你需要设置顶部容器以查看下面的结构。如果您提供任何控件,顶部的结构也将被分析和显示,这也会很有帮助。
我也可以想象,应该可以向标准调试器添加一个工具。与分析数据结构的方法相同,可以插入控件的名称或id,并且该结构将直接显示在调试器中。双击一个对象将引导您进入详细视图。
Larsiohvam的Medicals
感谢Lars Hvam,云购网,代码可以在Gihub查看和测试https://github.com/tricktresor/container\u层次结构