C#

2012-12-05 43 views
7

मैं सी # .net करने के लिए एक VB6 कार्यक्रम की ओर पलायन करने के लिए एसएपी लॉगऑन VB6 चलाने का GuiApplication प्राप्त 3.5 उपयोगकर्ता एसएपी लॉगऑन और प्रमाणित करता है शुरू होता है, तो वह उपकरण का उपयोग कर लाए जाने और डेटा सम्मिलित करने के लिए उपकरण का उपयोग कर सकते हैं समस्या: मैं प्रतिबिंब के साथ एक नया GuiApplication बना सकते हैं, लेकिन मैं इसके साथ वर्तमान में खोला GuiSessions को नहीं लाया जा सकता है:/ यहाँ कोड है कि वर्तमान में सभी खोला GuiSessions साथ GuiApplication खोला जाता है की VB6 हिस्सा है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 

मैंने प्रतिबिंब के साथ कोशिश की:

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

मैं एक उदाहरण मिल गया है, लेकिन कोई मौजूदा सत्र

उत्तर

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


     } 

उपयोग इस विधि, आप संदर्भ के लिए SapROTWr.DLL जो अपने एसएपी स्थापना की sapgui फ़ोल्डर में है के लिए सक्षम होने के लिए पहुंच एसएपी सहयोगी होना चाहिए।

+0

धन्यवाद, अगर यह काम करता है तो –

+0

उत्तर के रूप में चिह्नित होगा, यह मेरी जांच करेगा। वास्तव में अपने समय की सराहना करते हैं। –

1

कि SAPGUI मान लिया जाये कि एक COM वस्तु तो आप इसके लिए एक संदर्भ लेने के लिए और प्रतिबिंब का उपयोग कर के बिना एक नई वस्तु के रूप में यह बनाने में सक्षम होना चाहिए। अर्थात उपयोग जल्दी बंधन और न लेट बाइंडिंग भले ही मूल VB6 कोड उपयोग कर रहा है 'लेट बाइंडिंग'

दूसरे, लेट बाइंडिंग के बावजूद नहीं Type.GetTypeFromProgID("SapGui.S‌criptingCtrl.1") टुकड़ा मूल VB6 मैच के लिए Type.GetTypeFromProgID("SapGui") होना चाहिए? यह सुनिश्चित करने के लिए कि आप सही ऑब्जेक्ट का संदर्भ दे रहे हैं, आपको SAPGUI के ऑब्जेक्ट मॉडल पर जांच करने की आवश्यकता हो सकती है।

+0

समस्या यह है कि मैं एक नई वस्तु बनाने के लिए नहीं करना चाहती है, मैं के लिए के रूप में वर्तमान में चल रहे saplogon.exe के सत्र प्राप्त करना चाहते हैं Type.GetTypeFromProgID ("SapGui") मुझे SiGui.ScriptingCtrl.1 के साथ GuiAplication (मुझे शून्य मिलती है) भी नहीं मिलता है। मुझे saplogon.exe बाध्य किया जाता है लेकिन सत्र नहीं:/ –

+0

निश्चित रूप से VB6 में GetScriptingEngine कॉल कनेक्ट होता है वर्तमान में चल रहे उदाहरण? वीबी 6 कोड में कुछ और नहीं है जो इसके बराबर हो सकता है। इस प्रकार आप अपने .NET कोड में एक ही कॉल का उपयोग करेंगे। या क्या ऐसा कुछ और है जो आपके प्रश्न में नहीं दिखाया गया है? –

+0

मैं उस वीबी 6 कोड एटीएम को कॉल करता हूं और यह मुझे सभी कनेक्शन और सत्र के साथ guiapplication देता है अगर मैं वही करता हूं (प्रतिबिंब + स्क्रिप्टिंग इंजन प्राप्त करें और सिस्टम संदेशों को अनुमति दें) मुझे केवल कनेक्शन के बिना guiapplication मिलता है और कनेक्शन में संग्रहीत सत्रों के बिना , शुरू करने के बाद, मुझे स्क्रिप्टिंग इंजन तक पहुंच है लेकिन यह मेरे लिए दुखद नहीं है (अनुप्रयोगों के लिए आवश्यकताएं: /) –

0

एकमात्र समाधान है कि मैं चल सत्र के साथ काम करने के लिए पाया गया है कि कोड के भीतर से एसएपी प्रणाली के साथ बातचीत करने standartized तरीका प्रदान करने

0

एसएपी जारी किया एसएपी नेट कनेक्टर सी # के माध्यम से एक dll और यह उपयोग में लोड करने के लिए है .NET आवेदन। http://service.sap.com/connectors को देखो, तो आप पेज

+0

इसलिए, यदि मैं सैप लॉगऑन में सत्र खोलता हूं और सभी डेटा भरता हूं, जब मैं सैप नेट का उपयोग करता हूं कनेक्टर मैं डेटा का उपयोग कर सकते हैं? –

+1

@ गोरान Štuc अगर डेटा डीबी में सहेजा जाएगा - हाँ। अगर यह केवल स्क्रीन पर होगा - नहीं। .NET कनेक्टर की सहायता से आप आसानी से एसएपी पक्ष से कार्यात्मक मॉड्यूल को कॉल कर सकते हैं, लेकिन 'saplogon स्क्रीन acct नहीं कर सकते हैं। इस मामले में आप पूरे guiT –

+1

धन्यवाद के लिए उत्तरदायी होंगे, इसका मतलब है कि मुझे किसी अन्य समाधान की आवश्यकता है:/ –

2

यह मेरे लिए काम करता (एसएपी 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

यह मेरे लिए काम कर रहा है – user2682809