Zum Inhalt springen

[ABAP] Return Code auslesen (STMS)


neinal

Empfohlene Beiträge

Hallo Zusammen,

da ich leider bisher keine Antwort gefunden habe, versuche ich hier mal mein Glück.

ich habe ein Webdynpro, in dem alle Transportaufträge, inklusive System, Client, ect. angezeigt werden können.

Probleme habe ich beim Auslesen des Return Codes. Bisher kann ich leider nicht zwischen RC 0 und RC 4 unterscheiden. Die unterscheidung von RC 8 funktioniert aber.

    CASE ls_request-tracking_status.

              WHEN ''.     "Noch nicht transportiert

                ls_tr_info-tr_rcode = icon_led_inactive.

              WHEN '?'.    "Noch nicht transportiert

                ls_tr_info-tr_rcode = icon_led_inactive.

              WHEN 'S'.    "Erfolgreich

                ls_tr_info-tr_rcode = icon_led_green.

                <ls_reporting_data>-rcode = 0.

              WHEN 'W'.    "Mit Warnungen

                ls_tr_info-tr_rcode = icon_led_yellow.

                <ls_reporting_data>-rcode = 4.

              WHEN 'F'.    "Fehlerhaft

                ls_tr_info-tr_rcode = icon_led_red.

                <ls_reporting_data>-rcode = 8.

              WHEN 'Z'.    "Schwerwiegender Fehler

                ls_tr_info-tr_rcode = icon_status_critical.

              WHEN 'R'.    "Repariert

                ls_tr_info-tr_rcode = icon_wizard.

              WHEN OTHERS. "Unbekannter Status

                ls_tr_info-tr_rcode = icon_system_help.

            ENDCASE.

Bei allen Transporten wird mir der Status als 'S' ausgegeben. Ich habe aber Transporte, die einen RC4 haben.

Vielleicht kann mir von euch jemand weiter helfen.

Vielen Dank und Viele Grüße

neinal

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wo wird denn die Struktur ls_request gefüllt? Hast du schonmal im Debugger geschaut, ob tracking_status überhaupt W enthält?

Das Feldsymbol zeigt dann jeweils auf eine Zeile deiner Ausgabetabelle?

Die Case-Kontrollstruktur alleine sagt ja nix aus.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo afo,

danke für deine Antwort.

Hier der komplette Teil des Codes:

LOOP AT <ls_reporting_data>-transport ASSIGNING <ls_transport>.

      CLEAR: lt_request, ls_request.

      CALL FUNCTION '/TMWFLOW/REP_EXPORT_BY_TRORDER'

        EXPORTING

          im_trorder    = <ls_transport>-tr_order

          im_request    = 'T'

          im_object     = ' '

        IMPORTING

          ex_lt_request = lt_request[].


      LOOP AT lt_request[] INTO ls_request.

        ls_tr_info-tr_system  = ls_request-tarsystem(3).

        ls_tr_info-tr_client  = ls_request-tarsystem+4.

        ls_tr_info-tr_date    = ls_request-as4date.

        ls_tr_info-tr_time    = ls_request-as4time.


*Transportstatus interpretieren.

        CASE ls_request-tracking_status.



          WHEN ''.     "Noch nicht transportiert

            ls_tr_info-tr_rcode = icon_led_inactive.

          WHEN '?'.    "Noch nicht transportiert

            ls_tr_info-tr_rcode = icon_led_inactive.

          WHEN 'S'.    "Erfolgreich

            ls_tr_info-tr_rcode = icon_led_green.

            <ls_reporting_data>-rcode = 0.

          WHEN 'W'.    "Mit Warnungen

            ls_tr_info-tr_rcode = icon_led_yellow.

            <ls_reporting_data>-rcode = 4.

          WHEN 'F'.    "Fehlerhaft

            ls_tr_info-tr_rcode = icon_led_red.

            <ls_reporting_data>-rcode = 8.

          WHEN 'Z'.    "Schwerwiegender Fehler

            ls_tr_info-tr_rcode = icon_status_critical.

          WHEN 'R'.    "Repariert

            ls_tr_info-tr_rcode = icon_wizard.

          WHEN OTHERS. "Unbekannter Status

            ls_tr_info-tr_rcode = icon_system_help.

        ENDCASE.


        CASE ls_request-tracking_step.

          WHEN 'E' OR 'I'.    "Export

            APPEND ls_tr_info TO <ls_transport>-tr_info.

          WHEN OTHERS.

        ENDCASE.

      ENDLOOP.


      SORT <ls_transport>-tr_info BY tr_date tr_time.

    ENDLOOP. 

tracking_status kann alle Werte enthalten, die in meiner Case-Anweisung abgefragt werden. In meinem Fall ist aber eben nur 'S' enhalten.

Richtig, das Feldsymbol zeigt auf eine Zeile der Ausgabetabelle.

Link zu diesem Kommentar
Auf anderen Seiten teilen

CALL FUNCTION '/TMWFLOW/REP_EXPORT_BY_TRORDER'

EXPORTING

im_trorder = <ls_transport>-tr_order

im_request = 'T'

im_object = ' '

IMPORTING

ex_lt_request = lt_request[].

LOOP AT lt_request[] INTO ls_request.

*Transportstatus interpretieren.

CASE ls_request-tracking_status.

(...)

ENDCASE.

ENDLOOP.

Mußt Du Debuggen. Der Funktionsbaustein liefert eine interne Tabelle lt_request[] zurück.

Schau Dir die Tabelle an, indem Du im Variablenfenster lt_request[] eingibst und Doppelklick darauf machst. Dann kommt die Tabellenübersicht.

Gibt der FB keine Fehler zurück, die abfangbar sind? Ein "refresh lt_request[]." vor dem FB-Aufruf schadet auch nicht, weil das "CLEAR: lt_request" nur die Kopfzeile zurücksetzt. Sonst bleibt eventuell die Tabelle aus dem vorigen Schleifendurchlauf bestehen.

Wenn in allen Zeilen der Tabelle der tracking_status falsch zurückkommt, kann die Fallunterscheidung nicht funktionieren. In einem solchen Fall mußt Du den FB in der SE37 untersuchen, indem Du die 3 Parameter als Test eintippst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich möchte noch hinzufügen, dass du in beiden Schleifen über alle Sätze loopst und keine Abbruchbedingung oder ähnliches hast. Das heißt, dass am Ende nur der letzte Satz aus der zweiten Tabelle zum letzten Satz aus der ersten Tabelle ausschlaggebend ist.

Im Übrigen hoffe ich nicht, dass es sich bei der internen Tabelle um eine Tabelle mit Kopfzeile handelt. Außerdem würde ich für den zweiten Loop auch ein Fieldsymbol nehmen.

Den gerufenen FB kenne ich nicht. Ich vermute, dass das kein Standard-FB ist sondern eine kundeneigene oder Partner-Entwicklung in einem Kundennamensraum.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Guck dir mal die Tabelle E070 an. Hier sind die Kopfdaten der Transporte in deiner Importqueue enthalten.

Zum Hintergrund:

Die Daten die in deiner Importqueue angezeigt werden (Transaktion STMS_IMPORT) werden vom File System deines SAP-Systems gelesen. Deswegen musst du auch immer die Liste aktualisieren, wenn ein Transport nicht angezeigt wird.

Theoretisch können in deiner Importqueue also auch Transporte enthalten sein, welche in echt nie in dein SAP System importiert wurden. Dies ist z. B.: nach Systemkopien oder dem zurücksetzen deines Systems der Fall. Vorausgesetzt der Importbuffer wurde nicht zurückgesetzt sondern nur die Datenbank.

Wenn du mit Sicherheit sagen willst ob ein Transport in dein SAP System importiert wurde, musst du dir die Tabelle E070 ansehen. Ansonsten guck dir mal die Tabellen E07* an, hier gibt es noch weitere nützliche Tabellen zu den Transporten.

Gruß,

smite

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 4 Wochen später...
  • 3 Monate später...

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...