Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von EifelYeti
Thema: [Gelöst]SAP: OBJNR aus Messpunkt via RFC lesen
Am im Forum: Netzwerktechnologien

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.

Thema: [Gelöst]SAP: OBJNR aus Messpunkt via RFC lesen
Am im Forum: Netzwerktechnologien

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

Thema: [Gelöst]SAP: OBJNR aus Messpunkt via RFC lesen
Am im Forum: Netzwerktechnologien

Hallo,

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

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

Thema: [Gelöst]SAP: OBJNR aus Messpunkt via RFC lesen
Am im Forum: Netzwerktechnologien

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

 
.
.
.
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());
            }
        }
    }
Fehler
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