myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE7
   » Gadget für Vista
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin
» Accessoires

Ressourcen
» .NET-Glossar
» guide to C#
» openbook: Visual C#
» openbook: OO
» .NET BlogBook
» MSDN Webcasts
» dotnetjob.de
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Bankverbindung
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Netzwerktechnologien » [Gelöst]SAP: OBJNR aus Messpunkt via RFC lesen
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

[Gelöst]SAP: OBJNR aus Messpunkt via RFC lesen

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
EifelYeti EifelYeti ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-3408.jpeg


Dabei seit: 10.07.2012
Beiträge: 35
Entwicklungsumgebung: VS 2010
Herkunft: Eifel


EifelYeti ist offline

[Gelöst]SAP: OBJNR aus Messpunkt via RFC lesen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Experten,

ich habe versucht im Rahmen meiner Azubitätigkeit ein Programm zu entwickeln welches sich gegen das SAP System authentifiziert und hier einen RFC Call absetzt.

Hierzu benutze ich die rscp4n.dll sowie sapnco.dll und sapnco_utils.dll, die nicht im Standard enthalten sind.

Wenn ich nun den FUBA "MEASUREM_ENTRYLIST_READ_DB" aufrufe liefert er mir die gewünschten Daten zurück, genauso wie beim Aufruf des FUBAs zum anlegen eines Messpunktes, nur wenn ich die Objektnummer aus der Equipmentnummer lesen will, wird mir eine Inception geworfen.

In der __config Datei werden nur die Parameter zum verbinden mit dem SAP System gesichert

C#-Code:
.
.
.
using System.Text.RegularExpressions;
using SAP.Middleware.Connector;

   class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Bitte warten");
            MyBackendConfig config__ = new MyBackendConfig();
            try
            {
                RfcDestinationManager.RegisterDestinationConfiguration(config__);
            }
            catch   {Console.Write("Falsches PW");}

            RfcDestination rfcDest = RfcDestinationManager.GetDestination("U04");
            RfcRepository rfcRep = rfcDest.Repository;
            try
            {
                Console.Clear();
                Console.WriteLine("Verbinde mit SAP");
                IRfcFunction myfun = rfcRep.CreateFunction("MEASUREM_ENTRYLIST_READ_DB");
                myfun.SetValue("NUMBER_OF_LIST", "000000000002");

                string output = "";
                myfun.Invoke(rfcDest);

                /*------------------------------------------------------*\
                | Daten aus dem ersten Funktionsbaustein auslesen        |
                \*------------------------------------------------------*/


                for (int i = 0; i < myfun.Count; i++) //Daten in einem String sichern
                {
                    if (myfun.GetObject(i) != null) output += myfun.GetObject(i).ToString();
                    // Wenn das Rückgabeobjekt nicht gleich NULL ist soll die Rückgabe in den
                    // Output string gesichert werden.
                }

                Regex rgx = new Regex("POINT=\\d{12}");     // String nach Regulärem Ausdruck durchsuchen und diesen
                MatchCollection ma = rgx.Matches(output);   // in der Liste abspeichern (ma = Match Array)
                List <string> Messpunkte = new List<string>();
                foreach (Match m in ma)                             //Nur den Messpunkt (Daten hinter POINT= in Array schreiben
                {
                    Messpunkte.Add((m.ToString().Substring(6)));
                }

                /*------------------------------------------------------*\
                | Zweite Liste auslesen mit den Werten der ersten Liste  |
                \*------------------------------------------------------*/


                string funktion = "MEASUREM_POINT_READ";

                foreach (string s in Messpunkte)
                {
                    myfun = rfcRep.CreateFunction(funktion);
// Hier Tritt der Fehler auf !!
                    myfun.SetValue("MEASUREM_POINT", s);
                    myfun.Invoke(rfcDest);
                }
                Console.WriteLine("Success");
            } // TRY
            catch (Exception e)
            {
                Console.WriteLine("Exeption:\n" + e.Message);
                Console.WriteLine("Inner Exeption: \n" + e.InnerException);
                Console.WriteLine("Full Text: \n" + e.ToString());
            }
        }
    }

Fehlermeldung:
Exeption:
Data type UNKNOWN cannot be used for scalar metadata
Inner Exeption:

Full Text:
SAP.Middleware.Connector.RfcInvalidStateException: Data type UNKNOWN cannot be used for scalar metadata
bei SAP.Middleware.Connector.RfcScalarMetadata.CreateScalarMetadata(RfcDataType dataType, Int32 nucLength, Int32 ucLength, Int32 deci
mals)
bei SAP.Middleware.Connector.RfcScalarMetadata.GetScalarMetadata(RfcDataType dataType, Int32 nucLength, Int32 ucLength, Int32 decimal
s)
bei SAP.Middleware.Connector.RfcRepository.TypeMetadataFromParameters(IRfcTable parameters)
bei SAP.Middleware.Connector.RfcRepository.ProcessRfcMetadataGetResult(RfcFunction rfcMetadataGet, String[] functions, String[] struc
tures, String[] tables)
bei SAP.Middleware.Connector.RfcRepository.LookupFunctionMetadataNew(String name)
bei SAP.Middleware.Connector.RfcRepository.LookupFunctionMetadata(String name)
bei SAP.Middleware.Connector.RfcRepository.GetFunctionMetadata(String name)
bei SAP.Middleware.Connector.RfcRepository.CreateFunction(String name)
bei Test_SAP.Program.Main(String[] args) in H:\EDV\Projekte\Mini-Projekte\SAP\MP12-1155\02-Entwicklung\C# Code\SAP Auth\Test-SAP\Test
-SAP\Program.cs:Zeile 92.

Der Fehler tritt auch auf wenn ich sofort versuche den 2. RFC Call zu starten, also liegt es nicht an Altlasten aus dem rfcRep, denke ich

Vielen Dank im Vorraus und Gruß
EifelYeti

edit: Rechtschreibung etwas überarbeitet

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von EifelYeti am 06.08.2012 07:47.

10.07.2012 09:42 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Programmierhans
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-1651.gif


Dabei seit: 05.04.2005
Beiträge: 4.036
Entwicklungsumgebung: VS / Mono (IOS/LINUX)
Herkunft: Zentralschweiz


Programmierhans ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

MEASUREM_POINT_READ hat keinen Parameter mit dem Namen MEASUREM_POINT... das kann also so sicher nicht funktionieren.

Schau Dir diese Methode in SE37 nochmal an...

Gruss
Programmierhans
10.07.2012 14:33 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
EifelYeti EifelYeti ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-3408.jpeg


Dabei seit: 10.07.2012
Beiträge: 35
Entwicklungsumgebung: VS 2010
Herkunft: Eifel

Themenstarter Thema begonnen von EifelYeti

EifelYeti ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

erstmal danke für deine schnelle Antwort! Leider tritt der Fehler bereits hier auf:

C#-Code:
myfun = rfcRep.CreateFunction(funktion);

Und nicht erst beim setzen des Values, ich habe den Value jetzt auch auf "POINT" gesetzt (so steht er auch in der SE37) aber die Exeption bleibt die gleiche.

MfG
EifelYeti

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von EifelYeti am 11.07.2012 08:26.

10.07.2012 14:48 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Programmierhans
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-1651.gif


Dabei seit: 05.04.2005
Beiträge: 4.036
Entwicklungsumgebung: VS / Mono (IOS/LINUX)
Herkunft: Zentralschweiz


Programmierhans ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Das Problem kann ich reproduzieren...

Wenn Du den Baustein in SE37 anschaust, dann siehst Du, dass dieser NICHT RFC-fähig ist... das kann so nicht funktionieren.

Mit SAPNCO3 kannst Du nur RFC-fähige Bausteine aufrufen.

Mach Dir einen neuen Baustein im Z-Namensraum welcher dann intern auf den Standard-Baustein wrappt... dies geht aber auch nur, wenn im Baustein ausschliesslich RFC-fähige Parameter verwendet werden...

Ev. kannst Du auch den Baustein auf RFC-fähig setzen... müsstest Du einfach mal probieren... kann aber sein, dass dies nicht möglich ist, da es sich bei diesem Baustein um einen SAP-Standard-Baustein handelt.

Zitat von EifelYeti:
Der Fehler tritt auch auf wenn ich sofort versuche den 2. RFC Call zu starten, also liegt es nicht an Altlasten aus dem rfcRep, denke ich

Altlasten aus dem rfcRep kannst Du übrigens mit diesem Code gar nicht haben... Altlasten kannst Du theoretisch nur kriegen wenn Du mit RfcSessionManager.BeginContext(rfcDest) arbeitest...

Dies nur noch der Vollständigkeit halber.

Gruss
Programmierhans
10.07.2012 15:25 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
EifelYeti EifelYeti ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-3408.jpeg


Dabei seit: 10.07.2012
Beiträge: 35
Entwicklungsumgebung: VS 2010
Herkunft: Eifel

Themenstarter Thema begonnen von EifelYeti

EifelYeti ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo nochmal,

stimmt der Baustein ist nicht RFC-Fähig, das hätte ich mir natürlich vorher mal ansehen sollen. Im SAP System selber Programmieren aber andere und jetzt muss ich da erstmal auf mein CASE warten :)

Danke für die schnelle und kompetente Hilfe!

Besten Gruß
EifelYeti
11.07.2012 08:35 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
EifelYeti EifelYeti ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-3408.jpeg


Dabei seit: 10.07.2012
Beiträge: 35
Entwicklungsumgebung: VS 2010
Herkunft: Eifel

Themenstarter Thema begonnen von EifelYeti

EifelYeti ist offline

Erfolgreich geschlossen OBJNR aus Messpunkt lesen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Juhu!

SAP hat bereits einen solchen RFC-Fähigen Baustein auf Lager: MEASUREM_POINT_READ_DIALOG_BUF

Damit lassen sich die Daten auslesen. Damit also erfolgreich geschlossen!

Besten Dank an Programmierhans.
11.07.2012 11:50 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Programmierhans
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-1651.gif


Dabei seit: 05.04.2005
Beiträge: 4.036
Entwicklungsumgebung: VS / Mono (IOS/LINUX)
Herkunft: Zentralschweiz


Programmierhans ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Na also geht doch :-)
11.07.2012 18:31 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 11 Monate.
Der letzte Beitrag ist älter als 11 Monate.
Antwort erstellen


© Copyright 2003-2013 myCSharp.de-Team. Alle Rechte vorbehalten. 18.06.2013 08:51