我必须将vb6程序迁移到C#.net 3.5 用户启动SAP登录并进行身份验证, 然后他可以使用该工具使用该工具获取和插入数据 问题: 我可以使用反射创建一个新的GuiApplication,但我无法用它来获取当前打开的GuiSessions:/ 这是当前打开的GuiApplication与所有已打开的GuiSessions的代码的vb6部分
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"));
我有一个实例但没有现有的会话
答案 0 :(得分:7)
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);
}
使用此方法,您必须引用SAP安装的sapgui文件夹中的SapROTWr.DLL。
答案 1 :(得分:2)
这对我有用(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;
}
}
}
答案 2 :(得分:1)
假设SAPGUI是一个COM对象,那么您应该能够对其进行引用并将其创建为新对象而不使用反射。即使最初的VB6代码使用'后期绑定'
,使用早期绑定而不是后期绑定其次,假设后期绑定,Type.GetTypeFromProgID("SapGui.ScriptingCtrl.1")
片段不应该Type.GetTypeFromProgID("SapGui")
与原始VB6匹配吗?您可能需要检查SAPGUI的对象模型,以确保引用正确的对象。
答案 3 :(得分:0)
我发现使用正在运行的会话的唯一解决方案是将该代码加载到dll中并通过c#
访问它答案 4 :(得分:0)
SAP发布了SAP .NET连接器,以提供从.NET应用程序内部与SAP系统交互的标准方式。查看http://service.sap.com/connectors,您必须是SAP合作伙伴才能访问该页面