关于SAPGUI 自动登录 程序启动登录 节约SAP用户license

有一种节约SAP 用户license的办法:


关于SAPGUI 自动登录 程序启动登录 节约SAP用户license 图1
赛锐信息,SAP ERP定制,ERP定制

设定一个帐号池,比如30个帐号放这个池里: U1,U2,U3,U4,,,U30。

用户在使用SAPGUI登录SAP服务器时,不需要用户输入账号。【桌面程序】会自动在帐号池中拿一个没有用帐号,登入SAP服务器。

【桌面程序】它怎么会知道哪个用户没用呢? 可以先连接到SAP服务器查询。

怎么把用户同SAP帐号池联系起来呢?【桌面程序】自己搞一个用户帐号记录系统,把系统外用户和SAP帐号对应的记录下来。

账号池的账号,A用户用完就可以给B用户用,如果用户交替登录SAP服务器,这种方式确实可以节省帐号。

这套做法有一个关键点,就是对SAPGUI要用程序去让它登入服务器。

方法1、用WINDOWS提供的功能:  找对SAPGUI应用程序窗口的2个控件,填入用户名,密码,再对SAPGUI窗口发一个回车。

方法2、用SAP官方的sap gui scripting api: 测试后发现登入界面不是标准的SAPGUI,看来官方的办法不理想。

关于SAPGUI 自动登录 程序启动登录 节约SAP用户license

开发环境是VS2010,C# ,例子代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
using SAPFEWSELib; //这里需要把dll添加到【引用】

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            SAPActive.openSap("WPRD");
            SAPActive.login("800", "liuxin", "123456", "EN");
            SAPActive.SapSession.StartTransaction("SU3");            
        }
 
 
        //created a class for the SAP app, connection, and session objects as well as for common methods. 
        public class SAPActive
        {
            public static GuiApplication SapGuiApp { get; set; }
            public static GuiConnection SapConnection { get; set; }
            public static GuiSession SapSession { get; set; }
 
            public static void openSap(string env)
            {
                SAPActive.SapGuiApp = new GuiApplication();
 
                string connectString = null;
                if (env.ToUpper().Equals("DEFAULT"))
                {
                    connectString = "1.0 Test ERP (DEFAULT)";
                }
                else
                {
                    connectString = env;
                }
                SAPActive.SapConnection = SAPActive.SapGuiApp.OpenConnection(connectString, Sync: true); //creates connection
                SAPActive.SapSession = (GuiSession)SAPActive.SapConnection.Sessions.Item(0); //creates the Gui session off the connection you made
            }
 
            public static void login(string myclient, string mylogin, string mypass, string mylang)
            {
                GuiTextField client = (GuiTextField)SAPActive.SapSession.ActiveWindow.FindByName("RSYST-MANDT", "GuiTextField");
                GuiTextField login = (GuiTextField)SAPActive.SapSession.ActiveWindow.FindByName("RSYST-BNAME", "GuiTextField");
                GuiTextField pass = (GuiTextField)SAPActive.SapSession.ActiveWindow.FindByName("RSYST-BCODE", "GuiPasswordField");
                GuiTextField language = (GuiTextField)SAPActive.SapSession.ActiveWindow.FindByName("RSYST-LANGU", "GuiTextField");
 
                client.SetFocus();
                client.Text = myclient;
                login.SetFocus();
                login.Text = mylogin;
                pass.SetFocus();
                pass.Text = mypass;
                language.SetFocus();
                language.Text = mylang;
 
                //Press the green checkmark button which is about the same as the enter key 
                GuiButton btn = (GuiButton)SapSession.FindById("/app/con[0]/ses[0]/wnd[0]/tbar[0]/btn[0]");
                btn.SetFocus();
                btn.Press();
 
            }
        }
 
    }
 
}

相关文章

联系我们

联系我们

130-0752-1773

在线咨询:点击这里给我发消息

邮件:info@sapzx.com

工作时间:周一至周五9:00-18:00,节假日正常休息

关注微信
关注微信
分享本页
返回顶部