GUI脚本。 如何不每次遍历对象树?

2020-08-25 12:51发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)嗨, 我有几个问题 1。 ...

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

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


嗨,

我有几个问题

1。 每次我想访问特定字段时,是否都可能不遍历对象树?

到目前为止,我使用Object.children.item()等等。 但是,无论如何,SAP似乎遍历了所有要素。

我认为这样做会更好,但分析后似乎没有。

如何避免这种情况? 保留某种缓存以直接访问元素

2。 某些GUI事件无效:命中,错误。

我从Session对象(Session_Hit等)中捕获了它们。

CreateSession和DestroySession可以正常工作。

这个想法与内置记录器相同:侦听用户事件并记录脚本,但是有效载荷不同(试图避免连续会话。FindById...并使元素名称易于阅读)。

提前谢谢!

7条回答
callcenter油条
2020-08-25 13:27

你好康拉德,

非常有趣的问题和非常有趣的观点。

1 。 我从来没有做过这样的分析。 这是我的示例:

 TStart = Timer()
 对于i = 1至100
   session.findById(" wnd [0]/usr/txtRSYST-MANDT")。Text = CStr(i)
 下一个
 TEnd = Timer()
 MsgBox CStr(TEnd-TStart)'结果0,8

 设置字段= session.findById(" wnd [0]/usr/txtRSYST-MANDT")
 TStart = Timer()
 对于i = 1至100
   Field.Text = CStr(i)
 下一个
 TEnd = Timer()
 MsgBox CStr(TEnd-TStart)'结果0,4
 

使用对象而不是使用ID为findById的对象快大约两倍。

哇...

Sandra Rossi ,然后给出答案,将UI元素缓存在对象中。 我不知道另一种方式。

2。 hit事件适用于以下示例。

 Sub ses_Error(Sess,ErrID,Desc1,Desc2,Desc3,Desc4)
   MsgBox(Desc1&vbCrLf&Desc2&vbCrLf&Desc3&vbCrLf&Desc4)
 结束子

 Sub ses_Hit(Sess,Comp,IObj)
   MsgBox(IObj)'完美的作品
 结束子

 设置SapGuiAuto = GetObject(" SAPGUI")
 设置应用程序= SapGuiAuto.GetScriptingEngine
 设置连接= application.Children(0)
 设置会话= connection.Children(0)

 如果IsObject(WScript)然后
   WScript.ConnectObject会话" ses_"
 万一

 '-要使用点击事件,必须设置此属性-----------------
 session.findById(" wnd [0]")。ElementVisualizationMode = True

 MsgBox"按一下即可结束"
 

我无法模拟错误事件,但是我认为此代码示例有效。

如何在运行的脚本中模拟对SAP GUI ActiveX控件的访问拒绝?/p>

让我们知道您的经验。

最诚挚的问候
Stefan

一周热门 更多>