Announcement

Collapse
No announcement yet.

SAP Connector füllen einer Tabelle und Funktionsaufruf

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SAP Connector füllen einer Tabelle und Funktionsaufruf

    Hallo Zusammen,

    ich versuche seit geraumer Zeit eine Tabelle in SAP zu füllen, diese an eine Funktion zu übergeben und daraus dann zwei Tabellen auszulesen. Leider bekomme ich nichts zurück.

    Die zu befüllende Tabelle sieht wie folgt aus:
    ZMODULE CHAR10 CHAR 10 0 Characterfeld der Länge 10
    EXIDV EXIDV CHAR 20 0 Externe Handling Unit Identifikation
    AUFNR AUFNR CHAR 12 0 Auftragsnummer
    VEMNG_INP VEMNG QUAN 15 3 verpackte Basismenge in der Handling Unit Position
    BRGEW BRGEW_VEKP QUAN 15 3 Gesamtgewicht der Handling Unit
    GEWEI_MAX GEWEI UNIT 3 0 Gewichtseinheit
    Mein Code sieht wie folgt aus:

    MyBackendConfig cfg = new MyBackendConfig();
    RfcDestination destination = RfcDestinationManager.GetDestination(cfg.GetParame ters("PARAMTEST"));

    IRfcFunction function = destination.Repository.CreateFunction("ZRFCMADDRT" );

    IRfcTable table = function.GetTable("I_ZRFCMADDRTS");

    table.Append(1);
    table.SetValue("AUFNR", AuftragsNr);
    table.SetValue("VEMNG_INP", 33.44m);
    table.SetValue("BRGEW", 44.88m);
    table.SetValue("EXIDV", string.Empty);
    table.SetValue("ZMODULE", Modul);

    function.SetValue("I_ZRFCMADDRTS", table);

    function.Invoke(destination);


    IRfcTable rfcTableLogs = function.GetTable("E_ZRFCLOGS");
    IRfcTable rfcTableReturns = function.GetTable("E_ZRFCRETURNS");

    Leider haben beide Tabellen keine Werte drin stehen. Die Verbindung zu SAP funktioniert. Wenn ich die Tabelle falsch befülle bekomme ich auch einen Fehler, also bin ich da auch schon mal richtig connected.
    Ich habe es auch schon mit der Befüllung einer Struktur versucht, ohne Erfolg. Wenn ich die Tabelle per SetValue befülle und sie mir danach wieder per GetTable() hole, bekomme ich auch die Werte. Die Funktion wird nur anscheinend nicht aufgerufen.


    Die SAP-Funktion sieht wie folgt aus: siehe Link.

    http://m-scb.de/uploads/Downloads/Mscb.de/Image.jpg

    Kann mir jemand helfen, bzw. mir sagen wie ich hier weiter kommen könnte. Vielen Dank.

  • #2
    Du bist sicher, dass du die QUAN Felder mit
    table.SetValue("VEMNG_INP", 33.44m);
    table.SetValue("BRGEW", 44.88m);
    den Einheiten dahinter befüllen kannst?
    Und nicht
    table.SetValue("VEMNG_INP", 33.44);
    table.SetValue("BRGEW", 44.88);
    Mengenfeld mit einer maximalen Länge von 31 Positionen. Zeigt auf ein Einheitsfeld mit dem Format UNIT.
    Für den Typ sind nach dem Dezimalzeichen nur 14 Ziffern zulässig.
    Christian

    Comment


    • #3
      Habe ich auch schon gedacht, und das sowohl ohne die Einheit als auch als String eingetragen mit "." und "," leider ohne erfolg.

      EDIT: Ich bekomme weder eine Fehlermeldung noch sonst ein Feedback vom SAP. Es läuft alles durch, nur bekomme ich keine Werte in der Tabelle zurück.

      Comment


      • #4
        https://csharp.hotexamples.com/de/ex...-examples.html

        Programmiere nicht in C#, aber in obigen Beispiel ist noch ein
        RfcSessionManager.BeginContext(_destination);
        was so ein bisschen nach dem Beginn einer Transaction klingt
        Christian

        Comment


        • #5
          Habe ich so probiert, funktioniert leider nicht.

          Wenn ich die Tabelle falsch befüllen würde, würde entweder SAP einen Fehler schmeißen, welcher besagt das der Datentyp nicht passt bzw. dürfte ich dann beim Auslesen der Tabelle auch nicht die Werte wieder erhalten, wenn ich das so richtig sehe.

          Comment


          • #6
            Ich denke für echte Hilfe brauchst du mehr Reichweite. In einem deutschsprachigen Forum für dein Problem Hilfe zu bekommen würde ich fast ausschließen. Da ist das SAP Thema doch etwas zu randständig. Im Zweifel ist für sowas Stackoverflow eine gute Anlaufstelle oder der Herstellersupport.

            So mal ohne tatsächlich Ahnung von SAP wenn ich in die Doku gucke werden dort Tables nie direkt befüllt so wie du das tust. Sondern es wird ein IRfcStructure Objekt als Repräsentant eine Zeile der Tabelle erzeugt und die dann an das IRfcTable Objekt appendet.
            Und in der Doku sprechen die von einem Tracing Feature das man per App.config einschalten kann. Die durch das Tracing generierten Logfiles enthalten möglicherweise hinweise darauf was da schief geht.

            Edit:
            Laut Doku kann man auch wenn man den .Net Code debugged in den ABAP Code reindebuggen oder zumindest den Aufruf eines entsprechenden ABAP Debuggers forcieren.
            Zuletzt editiert von Ralf Jansen; 11.05.2020, 20:43.

            Comment

            Working...
            X