7

我必须将 vb6 程序迁移到 C# .net 3.5 用户启动 SAP 登录并进行身份验证,然后他可以使用该工具使用该工具获取和插入数据问题:我可以使用反射创建一个新的 GuiApplication,但我可以't fetch 当前打开的 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.S‌​criptingCtrl.1"));

我有一个实例,但没有现有会话

4

5 回答 5

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。

于 2014-02-24T20:37:18.567 回答
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;
        }
    }
}
于 2015-03-13T17:01:43.463 回答
1

假设 SAPGUI 是一个 COM 对象,那么您应该能够对其进行引用并将其创建为新对象,而无需使用反射。即使用早期绑定而不是后期绑定,即使原始 VB6 代码使用“后期绑定”

其次,假设后期绑定,Type.GetTypeFromProgID("SapGui.S‌criptingCtrl.1")片段不应该Type.GetTypeFromProgID("SapGui")与原始的 VB6 匹配吗?您可能需要检查 SAPGUI 的对象模型,以确保您引用了正确的对象。

于 2012-12-10T15:42:25.453 回答
0

我发现使用运行会话的唯一解决方案是将代码加载到 dll 中并通过 c# 访问它

于 2012-12-14T06:20:56.127 回答
0

SAP 发布了 SAP .NET 连接器,以提供从 .NET 应用程序内部与 SAP 系统交互的标准化方式。查看http://service.sap.com/connectors,您必须是 SAP 合作伙伴才能访问该页面

于 2012-12-14T06:35:05.177 回答