получить GuiApplication запуска SAP logon vb6 для c#
мне нужно перенести программу vb6 на C# .net 3.5 пользователь запускает SAP logon и аутентифицирует, затем он может использовать инструмент для извлечения и вставки данных с помощью инструмента проблема: я могу создать новый GuiApplication с отражением, но я не могу получить с ним открытые GuiSessions :/ вот часть VB6 кода, которая в настоящее время открывается GuiApplication со всеми открытыми GuiSessions
Dim obj As Object
Set obj = CreateObject("SAPGUI")
Set obj = obj.GetScriptingEngine
If TypeName(obj) = "GuiApplication" Then
Set SapAutomationObject = obj
SapAutomationObject.AllowSystemMessages = False
Debug.Print "SAP Automation OK"
End If
я попробовал это с размышлением:
GuiApplication Application = (GuiApplication)System.Activator.CreateInstance(Type.GetTypeFromProgID("SapGui.ScriptingCtrl.1"));
у меня есть экземпляр но нет существующих сеансов
5 ответов
public static void testConnection()
{
SapROTWr.CSapROTWrapper sapROTWrapper = new SapROTWr.CSapROTWrapper();
object SapGuilRot = sapROTWrapper.GetROTEntry("SAPGUI");
object engine = SapGuilRot.GetType().InvokeMember("GetSCriptingEngine", System.Reflection.BindingFlags.InvokeMethod,
null, SapGuilRot, null);
SAPconnection.sapGuiApp = engine as GuiApplication;
GuiConnection connection = sapGuiApp.Connections.ElementAt(0) as GuiConnection;
GuiSession session = connection.Children.ElementAt(0) as GuiSession;
MessageBox.Show(session.Info.User + " !!||!! " + session.Info.Transaction);
}
используйте этот метод, вы должны ссылаться на SapROTWr.DLL, которая находится в папке sapgui вашей установки SAP.
это работает для меня (SAP 730 / Win7):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SAPFEWSELib;
using SapROTWr;
namespace FIT.SapHelper
{
public static class stcSapHelper
{
public static void testConnection()
{
SapROTWr.CSapROTWrapper sapROTWrapper = new SapROTWr.CSapROTWrapper();
object SapGuilRot = sapROTWrapper.GetROTEntry("SAPGUI");
object engine = SapGuilRot.GetType().InvokeMember("GetScriptingEngine", System.Reflection.BindingFlags.InvokeMethod, null, SapGuilRot, null);
GuiConnection connection = (engine as GuiApplication).OpenConnection("BOX DESCRIPTION");
GuiSession session = connection.Children.ElementAt(0) as GuiSession;
}
}
}
предполагая, что SAPGUI является com-объектом, вы должны иметь возможность ссылаться на него и создавать его как новый объект без использования отражения. т. е. используйте раннюю привязку, а не позднюю привязку, даже если исходный код VB6 использует "позднюю привязку"
во-вторых, предполагая позднюю привязку, не должен Type.GetTypeFromProgID("SapGui.ScriptingCtrl.1")
фрагмент be Type.GetTypeFromProgID("SapGui")
чтобы соответствовать оригинальному VB6? возможно, Вам потребуется проверить объектную модель для SAPGUI, чтобы убедиться, что вы ссылаетесь на правильный объект.
единственное решение, которое я нашел для работы с запущенными сеансами, - загрузить этот код в dll и получить к нему доступ через c#
SAP выпустила SAP .NET connector, чтобы обеспечить стандартный способ взаимодействия с системой SAP из приложения .NET. Посмотрите наhttp://service.sap.com/connectors, вы должны быть партнером SAP, чтобы иметь доступ к странице