需要将Visual Basic SAP登录应用程序转换为C#应用程序

2020-08-21 18:16发布

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

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


这是我的Visual Basic代码,可以正常工作!〜

================================================ ======================

公共子Logon_Click(作为对象发送,作为EventArgs发送)处理登录。单击

'===激活SAP登录板引擎

应用程序= CreateObject(" Sapgui.ScriptingCtrl.1")

'===启动预定义的SAPlogon pad连接之一

Sapgui = GetObject(" SAPGUI")

应用程序= Sapgui.GetScriptingEngine

connection = Application.OpenConnection(" SP1- ECC 6.0 Production [WM_MM_GRP]",真)

会话= connection.children(0)

'===填写登录屏幕字段

session.findById(" wnd [0]/usr/txtRSYST-BNAME")。text =" tuser_id_here"

session.findById(" wnd [0]/usr/pwdRSYST-BCODE")。text =" passwd_here"

'===发送回车

session.findById(" wnd [0]")。sendVKey(0)

结束子

================================================ =======================

任何人在c#中都有一个示例

我在WPF中使用框架4.72,但如果需要,Windows窗体也可以。

该应用程序的其余部分位于.NET CORE C#WPF中。 就示例而言,那里没有多少东西!

我开始怀疑我是否可以在C#中使用SAP GUI。

谢谢

Pete

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

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


这是我的Visual Basic代码,可以正常工作!〜

================================================ ======================

公共子Logon_Click(作为对象发送,作为EventArgs发送)处理登录。单击

'===激活SAP登录板引擎

应用程序= CreateObject(" Sapgui.ScriptingCtrl.1")

'===启动预定义的SAPlogon pad连接之一

Sapgui = GetObject(" SAPGUI")

应用程序= Sapgui.GetScriptingEngine

connection = Application.OpenConnection(" SP1- ECC 6.0 Production [WM_MM_GRP]",真)

会话= connection.children(0)

'===填写登录屏幕字段

session.findById(" wnd [0]/usr/txtRSYST-BNAME")。text =" tuser_id_here"

session.findById(" wnd [0]/usr/pwdRSYST-BCODE")。text =" passwd_here"

'===发送回车

session.findById(" wnd [0]")。sendVKey(0)

结束子

================================================ =======================

任何人在c#中都有一个示例

我在WPF中使用框架4.72,但如果需要,Windows窗体也可以。

该应用程序的其余部分位于.NET CORE C#WPF中。 就示例而言,那里没有多少东西!

我开始怀疑我是否可以在C#中使用SAP GUI。

谢谢

Pete

付费偷看设置
发送
6条回答
渐行渐远_HoldOn
1楼-- · 2020-08-21 18:38

最后,我设法使用此代码进行连接!

================================================ =

使用System.Windows;

使用sapfewse;

命名空间SAPGuiAutomated {

///<摘要>

///MainWindow.xaml的交互逻辑

//////

公共类SAPActive {

公共静态GuiApplication SapGuiApp {get; 组; }

公共静态GuiConnection SapConnection {get; 组; }

公共静态GuiSession SapSession {get; 组; }

私有无效Get_SAP(对象发送者,RoutedEventArgs e){

字符串connectString =" SP1-ECC 6.0生产[WM_MM_GRP],True";

SAPActive.SapGuiApp =新的GuiApplication();

SAPActive.SapConnection = SAPActive.SapGuiApp.OpenConnection(" SP1- ECC 6.0 Production [WM_MM_GRP]",Sync:false);

//创建连接

SAPActive.SapSession =(GuiSession)SAPActive.SapConnection.Sessions.Item(0);

//根据您建立的连接创建Gui会话

GuiTextField客户端=(GuiTextField)SAPActive.SapSession.ActiveWindow.FindByName(" RSYST-MANDT"," GuiTextField");

GuiTextField登录=(GuiTextField)SAPActive.SapSession.ActiveWindow.FindByName(" RSYST-BNAME"," GuiTextField");

GuiTextField pass =(GuiTextField)SAPActive.SapSession.ActiveWindow.FindByName(" RSYST-BCODE"," GuiPasswordField");

GuiTextField语言= GuiTextField)SAPActive.SapSession.ActiveWindow.FindByName(" RSYST-LANGU"," GuiTextField"); client.SetFocus();

client.Text =" 750";

login.SetFocus();

login.Text =" user_ID_HERE";

pass.SetFocus(); pass.Text =" PASSWD_HERE";

language.SetFocus(); language.Text =" EN";

//按下绿色的选中标记按钮,该按钮与Enter键大致相同

GuiButton btn =(GuiButton)SAPActive.SapSession.FindById("/img/app/con [0]/ses [0]/wnd [0]/tbar [0]/btn [0]"); btn.SetFocus();

btn.Press();

}

}

}

但是,如果我尝试使用FindByID,则(.text或.Text)不是SapSession的组件。

还有另一种使用FindByID的方法吗?

Pete

shere_lin
2楼-- · 2020-08-21 18:37

这是我<看着的!

============================================

使用sapfewse;

使用SAPGuiAutomated;

使用System.Windows;

命名空间SAP_Test1 {

///<摘要>

///MainWindow.xaml的交互逻辑

///

公共局部类MainWindow:Window

{

公共MainWindow()

{InitializeComponent(); }

私人void Button_Click(对象发送者,RoutedEventArgs e)

{

SAPActive.openSap(" Con_SENSITIVE");

SAPActive.Login(" 100"," USER_SENSITIVE"," PWD_SENSITIVE"," EN"); SAPActive.SapSession.StartTransaction(" IW59");

GuiMenu guiMenu;

GuiFrameWindow guiFrameWindow;

GuiTextField guiTextField;

GuiButton guiButton; guiMenu = SAPActive.MenuPath(" wnd [0]/mbar/menu [2]/menu [0]/menu [0]"); guiMenu.Select(); guiTextField = SAPActive.TextFieldPath(" wnd [1]/usr/txtV-LOW"); guiTextField.SetFocus(); guiTextField.Text ="敏感";

guiTextField = SAPActive.TextFieldPath(" wnd [1]/usr/txtENAME-LOW");

guiTextField.Text =""; guiFrameWindow = SAPActive.FrameWindowPath(" wnd [1]"); guiFrameWindow.SendVKey(8); guiFrameWindow = SAPActive.FrameWindowPath(" wnd [0]"); guiFrameWindow.SendVKey(8);

}

}

}

================================================ ==========

但是它说找不到MenuPath,TextFieldPath

FrameWindowPath和从SapActive.Login登录。

Pete

我是小鹏鹏啊
3楼-- · 2020-08-21 18:38

你好 PETER GROVES

我们两年前在这里讨论了这段代码,但观点有所不同。

FindById有效,但是您的ID错误。

 GuiButton btn =(GuiButton)SAPActive.SapSession.FindById("/img/app/con [0]/ses [0]/wnd [0]/tbar [0]/btn [0]"  ); 

this

 GuiButton btn =(GuiButton)SAPActive.SapSession.FindById(" wnd [0]/tbar [0]/btn [0]"); 
>

您处于会话级别,因此无法使用整个ID来标识对象。 仅从会话级别开始,没有/app/con [0]/ses [0]。

这里是我的测试代码:

//-开始------  --------------------------------------------------  -------

//css_host/platform:x86
//css_ref" C:\ Program Files(x86)\ SAP \ NWBC70 \ Interop.SAPFEWSELib.dll"

 使用Interop.SAPFEWSELib;
 使用System.Runtime.InteropServices;

 班级考试{

   静态void Main(string [] args){

     GuiApplication Appl =新的GuiApplicationClass();
     Appl.OpenConnection(" NSP",true);

     var COMConn = Appl.Children.ElementAt(0);
     GuiConnection Conn =(GuiConnection)Marshal.CreateWrapperOfType(COMConn,typeof(GuiConnectionClass));
    
     var COMSess = Conn.Children.ElementAt(0);
     GuiSession Sess =(GuiSession)Marshal.CreateWrapperOfType(COMSess,typeof(GuiSessionClass));

     var COMtxtMandt = Sess.FindById(" wnd [0]/usr/txtRSYST-MANDT");
     GuiTextField txtMandt =(GuiTextField)Marshal.CreateWrapperOfType(COMtxtMandt,typeof(GuiTextFieldClass));
     txtMandt.Text =" 500";

     var COMbtnEnter = Sess.FindById(" wnd [0]/tbar [0]/btn [0]");
     GuiButton btnEnter =(GuiButton)Marshal.CreateWrapperOfType(COMbtnEnter,typeof(GuiButtonClass));
     btnEnter.Press();

     Sess.ActiveWindow.Close();

   }

 }

//-结束 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  --------------------
 

最诚挚的问候
Stefan

昵称总是被占用
4楼-- · 2020-08-21 18:34

什么是SAPActive?

(来自在这里,我想)

clasier
5楼-- · 2020-08-21 18:48

这是另一个 大块的代码! SapActive是它的来源!

================================================ ====

使用sapfewse;

命名空间SAPGuiAutomated {

//它已经为SAP应用程序,连接和会话对象以及常见功能创建了一个类。

公共类SAPActive {

公共静态GuiApplication SapGuiApp {get; 组;

}

公共静态GuiConnection SapConnection {get; 组;

}

公共静态GuiSession SapSession {get; 组; }

公共静态无效openSap(string env)

{

SAPActive.SapGuiApp =新的GuiApplication();

string connectString = null;

如果(env.ToUpper()。Equals(" DEFAULT")){

connectString =" WM_MM_GRP";

}其他{

connectString = env;

}

SAPActive.SapConnection = SAPActive.SapGuiApp.OpenConnection(connectString,Sync:true); //创建连接

SAPActive.SapSession =(GuiSession)SAPActive.SapConnection.Sessions.Item(0);

//根据您建立的连接创建Gui会话

}

公共无效登录(字符串forclient01,字符串forlogin01,字符串forpass01,字符串forlang01)

{

GuiTextField客户端=(GuiTextField)SAPActive.SapSession.ActiveWindow.FindByName(" RSYST-MANDT"," GuiTextField");

GuiTextField登录=(GuiTextField)SAPActive.SapSession.ActiveWindow.FindByName(" RSYST-BNAME"," GuiTextField");

GuiTextField pass =(GuiTextField)SAPActive.SapSession.ActiveWindow.FindByName(" RSYST-BCODE"," GuiPasswordField");

GuiTextField语言=(GuiTextField)SAPActive.SapSession.ActiveWindow.FindByName(" RSYST-LANGU"," GuiTextField");

GuiButton btn;

client.SetFocus();

client.Text = forclient01; login.SetFocus();

login.Text = forlogin01; pass.SetFocus();

pass.Text = forpass01; language.SetFocus();

language.Text = forlang01;

//按下绿色的选中标记按钮,该按钮与输入键GuiButton大致相同

btn =(GuiButton)SapSession.FindById("/img/app/con [0]/ses [0]/wnd [0]/tbar [0]/btn [0]");

btn.SetFocus();

btn.Press();

}

}

}

=================================

Pete

wang628962
6楼-- · 2020-08-21 18:40

感谢您的反馈:-)

我想Stefan给出的答案是正确的。

一周热门 更多>