GuiUserArea中的C#迭代控件

2020-08-14 02:09发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我正在用C#winforms构建...

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

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


我正在用C#winforms构建应用程序。

如果我们按照元数据的思路考虑,我将尽我所能捕获有关用户打开会话的尽可能多的信息。


我已经获得了所需的所有会话信息。


现在我很好奇我可以捕获多少关于屏幕上可见数据的信息。
我的直觉是想对控件进行迭代,看看是否可以捕获文本框和标签。

但是,我在挣扎。

查看文档,我看到有各种各样的" FindBy"功能,但是只有当您已经知道各个控件的名称时,所有这些功能才被设计为有用。


有人知道我如何浏览/迭代用户区域中的所有控件并捕获其名称/值吗?


非常感谢您的提示!

:)




到目前为止的代码....



sap_helper类


{

公共静态字典 get_sapInfo()

{

字典 sapInfo =新字典();

GuiApplication sapGuiApp;


SapROTWr.CSapROTWrapper sapROTWrapper =新的SapROTWr.CSapROTWrapper();

object SapGuilRot = sapROTWrapper.GetROTEntry(" SAPGUI");


对象引擎= SapGuilRot.GetType()。InvokeMember(" GetSCriptingEngine",System.Reflection.BindingFlags.InvokeMethod,

null,SapGuilRot,null);


sapGuiApp =引擎为GuiApplication;


int i = sapGuiApp.Children.Count;


如果(sapGuiApp.Connections.Length> 0)

{

GuiConnection connection = sapGuiApp.Connections.ElementAt(0)作为GuiConnection;


foreach(连接中的GuiSession child_session.Children)

{

GuiSession session = child_session作为GuiSession; //connection.Children.ElementAt(0)作为GuiSession;


//填充用户定义的结构

SapInfoItem sii =新的SapInfoItem();

sii.system_name = session.Info.SystemName;

sii.client = session.Info.Client;

sii.program = session.Info.Program;

sii.screen_number = session.Info.ScreenNumber;

sii.handle = session.ActiveWindow.Handle;

sii.transaction = session.Info.Transaction;

//向字典集合中添加结构

sapInfo.Add(sii.handle.ToString(" X"),sii);

}

connection = null;

}

sapGuiApp = null;

SapGuilRot = null;

sapROTWrapper = null;


返回sapInfo;

}


}


2条回答
浮生未央
2020-08-14 02:59

您好,西蒙,

可以肯定,您可以很容易地理解扫描过程。 这是带有子过程GetID的递归调用。 在此子过程中,我将控件的ID,名称和文本(值)添加到outText变量中。我从一个会话的集合开始在主子过程中进行扫描。

'-Begin--  --------------------------------------------------  -------------

 '-指令---------------------------------------------------  -------------
 显式期权

 昏暗的文本

 '-Sub GetIDs ----------------------------------------------  --------------
 子GetID(集合)

   关于错误继续

   昏暗的我,孩子

   如果InStr(1,collection.Id(),"/img/usr/",1)然后
     outText = outText和collection.Id()&vbCrLf
     'outText = outText和collection.Name()&vbCrLf
     'outText = outText和collection.Text()&vbCrLf
   万一


   设置Child = collection.Children()
   如果IsObject(Child)然后
     如果Child.Count()> 0然后
       对于i = 0到Child.Count()-1
         GetIDs Child.Item(CInt(i))
       下一个
     万一
   万一


 结束子

 '-Sub Main ----------------------------------------------  ----------------
 子Main()

   Dim SapGuiAuto,应用程序,连接,会话,i

   设置SapGuiAuto = GetObject(" SAPGUI")
   如果不是IsObject(SapGuiAuto)然后
     退出子
   万一

   设置应用程序= SapGuiAuto.GetScriptingEngine
   如果不是IsObject(application)然后
     退出子
   万一

   设置连接= application.Children(0)
   如果不是IsObject(连接),则
     退出子
   万一

   设置会话= connection.Children(0)
   如果不是IsObject(session)然后
     退出子
   万一

   对于i = 0到session.Children()。Count()-1
     GetIDs session.Children(CInt(i))
   下一个


 结束子

 '-主要 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - -  -------------------
 主要()
 MsgBox outText

 '-结束 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - -  -------------------- 

在GetIDs函数中,我捕获了GuiUserArea并仅使用其中的控件。 GUIUserArea具有这样的ID-/app/con [0]/ses [0]/wnd [0]/usr/...希望以C#语法传输它没有问题。

这是SAP登录屏幕上的示例。

 Logon.jpg

享受它。

干杯

Stefan

一周热门 更多>