2012-12-05 73 views
7

tôi phải di chuyển một chương trình vb6 đến C# .net 3.5 người dùng bắt đầu đăng nhập SAP và xác thực, sau đó ông có thể sử dụng công cụ để lấy và chèn dữ liệu bằng công cụ vấn đề: tôi có thể tạo ra một GuiApplication mới với suy nghĩ, nhưng tôi không thể lấy GuiSessions hiện đang mở với nó:/ đây là phần vb6 của mã hiện được mở GuiApplication với tất cả GuiSessions mởđược GuiApplication chạy VB6 Sap đăng nhập để C#

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 

tôi đã thử nó với sự phản ánh:

GuiApplication Application = (GuiApplication)System.Activator.CreateInstance(Type.GetTypeFromProgID("SapGui.S‌​criptingCtrl.1")); 

tôi đã nhận một thể hiện nhưng không có phiên hiện

Trả lời

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); 


     } 

Sử dụng phương pháp này, bạn phải tham khảo SapROTWr.DLL đó là trong thư mục cài đặt sapgui của SAP của bạn.

+0

cảm ơn, sẽ kiểm tra nó, nếu nó hoạt động sẽ đánh dấu là câu trả lời –

+0

Nó đã giúp tôi. Thực sự đánh giá cao thời gian của bạn. –

1

Giả sử SAPGUI đó là một đối tượng COM sau đó bạn sẽ có thể để có một tham chiếu đến nó và tạo ra nó như là một đối tượng mới mà không sử dụng phản ánh. tức là Sử dụng ràng buộc sớm và không ràng buộc muộn ngay cả khi mã VB6 ban đầu đang sử dụng mã 'cuối ràng buộc'

Thứ hai, giả sử ràng buộc muộn, không nên đoạn Type.GetTypeFromProgID("SapGui.S‌criptingCtrl.1")Type.GetTypeFromProgID("SapGui") để khớp với VB6 gốc? bạn có thể cần phải kiểm tra mô hình đối tượng cho SAPGUI để đảm bảo bạn đang tham chiếu đúng đối tượng.

+0

vấn đề là tôi không muốn tạo ra một đối tượng mới, tôi muốn để có được những saplogon.exe hiện đang chạy của phiên như đối với Loại.GetTypeFromProgID ("SapGui") tôi thậm chí không nhận được GuiApplication (tôi nhận được null), với SapGui.ScriptingCtrl.1 tôi nhận được saplogon.exe binded nhưng không phải là phiên:/ –

+0

Chắc chắn các cuộc gọi GetScriptingEngine trong VB6 kết nối với hiện đang chạy? Không có gì khác trong mã VB6 có thể tương đương với nó. Vì vậy, bạn sẽ sử dụng cùng một cuộc gọi trong mã .NET của bạn. Hoặc có cái gì khác không được hiển thị trong câu hỏi của bạn? –

+0

tôi gọi là mã vb6 atm và nó cho tôi guiapplication với tất cả các kết nối và phiên nếu tôi làm như vậy (reflection + get scripting engine và cho phép thông báo hệ thống) tôi chỉ nhận được guiapplication mà không cần kết nối và không có phiên được lưu trữ trong các kết nối , sau khi tôi bắt đầu, tôi có quyền truy cập vào công cụ tạo kịch bản nhưng điều đó không đủ cho tôi một cách đáng buồn (yêu cầu cho các ứng dụng: /) –

0

giải pháp duy nhất mà tôi tìm thấy để làm việc với các phiên chạy là để tải mã trong một dll và truy cập nó qua C#

0

SAP phát hành SAP NET nối để cung cấp cách standartized để tương tác với hệ thống SAP từ bên trong của Ứng dụng .NET. Nhìn vào http://service.sap.com/connectors, bạn phải là SAP đối tác để được truy cập có thể trang

+0

vì vậy, nếu tôi mở phiên trong sap logon và điền tất cả dữ liệu, khi tôi sử dụng sap .net kết nối tôi có thể truy cập dữ liệu? –

+1

@Goran Štuc nếu dữ liệu sẽ được lưu vào DB - có. Nếu nó chỉ có trên màn hình - không. Với sự trợ giúp của .NET Connector, bạn có thể dễ dàng gọi mô-đun chức năng từ phía SAP, nhưng không thể truy cập màn hình saplogon. Trong trường hợp này, bạn sẽ chịu trách nhiệm tạo ra toàn bộ guiT –

+1

cảm ơn, điều đó có nghĩa là tôi cần một số giải pháp khác:/ –

2

này làm việc cho tôi (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; 
     } 
    } 
} 
+0

Cảm ơn bạn rất nhiều nó làm việc cho tôi – user2682809