Beim Buchen-Button eine Fehlermeldung einbauen (MIGO)

Getting started ... Alles für einen gelungenen Start.
33 Beiträge Vorherige Seite 2 von 3 (current) Nächste
33 Beiträge Vorherige Seite 2 von 3 (current) Nächste

Re: Beim Buchen-Button eine Fehlermeldung einbauen (MIGO)

Beitrag von L0w-RiDer (Specialist / 180 / 27 / 1 ) » 14. Jan 2020 10:23

So okay,

ich hätte es nun erstellt und aktiviert. Ich musste es allerdings in ein anders Paket packen, als das in welchem sich das Programm von MIGO befindet. Nun habe ich eine Klasse, bloß wie nutze ich diese nun in dem Programm von MIGO?


Re: Beim Buchen-Button eine Fehlermeldung einbauen (MIGO)

Beitrag von L0w-RiDer (Specialist / 180 / 27 / 1 ) » 14. Jan 2020 11:28

Siehe Bild 3.

Ich hätte gerne, dass falls der Anwender eine Menge eingibt und es sein kann, dass der Partner nicht dem hinterlegten in der RL12 übereinstimmt, es zu einer Nachricht kommt, die den Anwender darüber informiert, wenn der Anwender auf "Buchen" klickt.

Leider finde ich im Code auch nicht die Stelle in welcher in die DB-Tabelle von RL12 reingeschrieben wird. Wie geht man beim Debuggen da am besten vor?? Siehe Bild 4 und 5.

Re: Beim Buchen-Button eine Fehlermeldung einbauen (MIGO)

Beitrag von M@atze! (ForumUser / 85 / 6 / 15 ) » 14. Jan 2020 15:25

Hi,

also debuggen brauchst du erst einmal nix.
Falls noch nicht geschehen solltest du dir zuerst einmal die Doku zum BAdI (vor allem zu den Methoden LINE_MODIFY, LINE_DELETE, RESET und CHECK_ITEM) durchlesen.
Diese wirst du nämlich voraussichtlich für deine Aufgabe benötigen.

Wenn du das BAdI bereits aktiviert hast werden diese Methoden während der MIGO jetzt bereits zu unterschiedlichen Zeitpunkten durchlaufen.

In der Methode "CHECK_ITEM" kannst du deine Prüfung ausprogrammieren.

Ich kenne nun leider den Leihgutprozess nicht, bin aber nach kurzer Recherche in diesem Umfeld über die Tabellen RLACCT (Leihgutkonto), RLACSTHD (Leihgutkontoauszug) und RLACSTIT (Vorgänge im Leihgutkontoauszug) gestolpert.
Bitte prüfen ob diese die nötigen Informationen für die gewünschte Prüfung enthalten.

Leider hast du innerhalb der Methode "CHECK_ITEM" nicht die für deine Prüfung nötigen Positionsdaten aus der MIGO zur Verfügung. Diese musst du also vorher zusammensammeln.
Hier kommen nun die anderen o. g. Methoden zum Einsatz.
LINE_MODIFY wird nach jedem Anlegen einer Position durchlaufen und enthält Detailinformationen zur jeweiligen Position. Diese würde ich in einem globalen Klassenattribut (interne Tabelle) sammeln.

Z.B. so:

Code: Alles auswählen.


private section.

  types:
    BEGIN OF t_goitem,
           line_id TYPE mb_line_id.
          INCLUDE TYPE goitem.
  TYPES: END OF t_goitem .

  data: gt_goitem TYPE TABLE OF t_goitem WITH KEY line_id .


METHOD if_ex_mb_migo_badi~line_modify.

    ASSIGN gt_goitem[ line_id = i_line_id ] TO FIELD-SYMBOL(<ls_goitem>).
    IF sy-subrc EQ 0.
      MOVE-CORRESPONDING cs_goitem TO <ls_goitem>.
    ELSE.
      APPEND INITIAL LINE TO gt_goitem ASSIGNING <ls_goitem>.
      MOVE-CORRESPONDING cs_goitem TO <ls_goitem>.
      <ls_goitem>-line_id = i_line_id.
    ENDIF.

  ENDMETHOD.

Wird eine Position gelöscht wird die Methode LINE_DELETE durchlaufen. Hier dann den entsprechenden Satz aus der globalen Tabelle wieder löschen.

Beim Buchen/Prüfen des Belegs wird dann "CHECK_ITEM" Positionsweise durchlaufen. Als Eingabeparameter bekommst du eine LINE_ID (ID der Position).
Anhand dieser kannst du die relevanten Positionsdaten aus deiner internen Tabelle ermitteln und für deine Prüfung verwenden.
Die Methode enthält ebenfalls einen Parameter vom Typ BAPIRET2_T (Returntabelle) den du mit Messages für die Ausgabe einer Fehlermeldung füllen kannst.
Diese bekommt der Benutzer angezeigt und das Buchen wird verhindert.

Nach der Buchung wird die Methode RESET durchlaufen. Hier solltest du deine globale Tabelle wieder clearen.

Fertig 🙂

Ggf. hilft die auch die Beispiel-Implementierungsklasse "CL_EXM_IM_MB_MIGO_BADI" der SAP weiter.

Weiterhin solltest du berücksichtigen, dass deine Erweiterungen wahrscheinlich nur für bestimmte Prozesse (z. B. auf Basis der Bewegungsart) durchlaufen werden sollen. Ich nehme an, das nicht alle MIGO-Buchung auf diese Art und Weise geprüft werden sollen.

Viel Erfolg.

Grüße

Matze

Folgende Benutzer bedankten sich beim Autor M@atze! für den Beitrag:
L0w-RiDer (14. Jan 2020 16:23)


Re: Beim Buchen-Button eine Fehlermeldung einbauen (MIGO)

Beitrag von L0w-RiDer (Specialist / 180 / 27 / 1 ) » 14. Jan 2020 16:25

Was ich nicht ganz verstehe ist, ich aktiviere diese BADI und automatisch werden die Methoden nun durchlaufen. Dies müsste ja aber nun für alle Programme gelten, die dieses BADI haben, oder? Ich habe nämlich nirgends explizit einen Bezug zu der MIGO hergestellt. Falls ich diese Methode nun so programmiere, müsste es ja für einige andere Programme auch gleich gelten, oder sehe ich das falsch? Leider erscheint bei der Doku immer, dass diese nicht in Deutsche Sprache vorhanden ist. Tut mir leid, falls ich blöde Fragen stelle, aber das Ganze ist für mich absolutes Neuland.

Vielen Dank

Re: Beim Buchen-Button eine Fehlermeldung einbauen (MIGO)

Beitrag von M@atze! (ForumUser / 85 / 6 / 15 ) » 14. Jan 2020 17:01

Grundsätzlich hast du recht. Allerdings ist in aller Regel ein BAdI nur in einem Programm/Prozess "eingebaut".
Auch deshalb gibt es eine schier unüberschaubare Anzahl an BAdI's, Exits, ...

In diesem Fall wird der BAdI nur und ausschließlich von der MIGO durchlaufen.

Grüße
Matze

Re: Beim Buchen-Button eine Fehlermeldung einbauen (MIGO)

Beitrag von L0w-RiDer (Specialist / 180 / 27 / 1 ) » 15. Jan 2020 08:48

Hi vielen Dank schon mal,

In der Methode "CHECK_ITEM" kannst du deine Prüfung ausprogrammieren.---> und hier dachte ich eigentlich, dass ich schauen muss ob die Einträge die in einer DB-Tabelle stehen, mit der Eingabe zu dieser Position übereinstimmt. Es wird ja gebucht, aber nicht zu dem richtigen "Empfänger" der das Leihgut zur Verfügung gestellt hat. Somit wäre meine Überlegung gewesen zu schauen von welcher DB-Tabelle wird geprüft, ob die Eingabe mit dem hinterlegten Leihgut (in einer DB-Tabelle) übereinstimmt. Diese Vorgehensweise wollte ich eigentlich beim durchdebuggen sehen (ist mir leider noch nicht gelungen). Wäre der Ansatz so falsch?? Ich habe deine Vorgehensweise mit den Methoden leider irgendwie nicht so ganz verstanden... :(

Vielen Dank.

Re: Beim Buchen-Button eine Fehlermeldung einbauen (MIGO)

Beitrag von L0w-RiDer (Specialist / 180 / 27 / 1 ) » 15. Jan 2020 09:56

Okay, ich habe diese Methode nun mal so programmiert wie von dir beschrieben, allerdings würde ich nun gerne im Debugger sehen wie das Ganze vonstatten geht und da habe ich schon das Problem, wie debugge ich soetwas am besten um die Stelle zu sehen und nicht ewig danach zu suchen?? Ich rufe die Migo auf gebe was ein und bevor ich auf "Buchen" klicke gebe ich /h ein um es im Debugger sehe zu können, bloß da wird ewig viel Code durchlaufen und ich finde die Stelle dort nicht... Wie sollte ich am besten vorgehen?

Re: Beim Buchen-Button eine Fehlermeldung einbauen (MIGO)

Beitrag von M@atze! (ForumUser / 85 / 6 / 15 ) » 15. Jan 2020 10:33

Hi,

einfach einen Break-Point in den von dir ausprogrammierten Methoden setzen und dann die MIGO starten, Positionen erfassen, Prüfen, Buchen,...
So merkst du auch bei welcher Aktion welche Methode durchlaufen wird.

Gruß
Matze

Re: Beim Buchen-Button eine Fehlermeldung einbauen (MIGO)

Beitrag von L0w-RiDer (Specialist / 180 / 27 / 1 ) » 15. Jan 2020 10:44

Hi Matze,

hmm also ich finde die Stelle ja nicht im Coding. Also soll ich in der SE80 die Methode suche und dort einen Breakpoint setzen und dann die MIGO ausführen??? funktioniert das so?

Re: Beim Buchen-Button eine Fehlermeldung einbauen (MIGO)

Beitrag von M@atze! (ForumUser / 85 / 6 / 15 ) » 15. Jan 2020 10:45

zum Thema Prüfung in der Methode "CHECK_ITEM".

du musst natürlich wissen, oder gesagt bekommen, wo du die Informationen gegen die du prüfen sollst herbekommst.

Hast du dir die Tabellen welche ich weiter oben genannt habe einmal angesehen?
Zumindest finden sich darin Felder wie Materialnummer, Menge, Datum, ...

In meinem System sind diese Tabellen leider leer, da der Leihgutprozess nicht genutzt wird.

Evtl. gibt es auch BAPI's o.Ä. welche dir bereits aufbereitete Informationen liefern können. Wie gesagt kenne ich den Leihgutprozess leider nicht und kann hier wenig Infos liefern.

Den Leihgutprozess zu debuggen um zu sehen auf welche DB die Infos geschrieben werden halte ich für wenig zielführend. Da wird man bis zur Rente mit dem debuggen wahrscheinlich nicht fertig 😉

Re: Beim Buchen-Button eine Fehlermeldung einbauen (MIGO)

Beitrag von M@atze! (ForumUser / 85 / 6 / 15 ) » 15. Jan 2020 10:46

L0w-RiDer hat geschrieben:
15. Jan 2020 10:44
Hi Matze,

hmm also ich finde die Stelle ja nicht im Coding. Also soll ich in der SE80 die Methode suche und dort einen Breakpoint setzen und dann die MIGO ausführen??? funktioniert das so?
Jep, genau so

Re: Beim Buchen-Button eine Fehlermeldung einbauen (MIGO)

Beitrag von L0w-RiDer (Specialist / 180 / 27 / 1 ) » 15. Jan 2020 10:55

Hi Matze,

danke für dein Mühe.

Irgendwie will es nicht klappen. Habe einen Breakpoint in der Mehtode gesetzt und danach die Migo mit meinen Eingaben ausgeführt und habe auf Prüfen und Buchen geklickt, bloß leider wurde lief es ganz normal durch ohne an der Stelle angehalten zu sein :/ Siehe Bild 10

Re: Beim Buchen-Button eine Fehlermeldung einbauen (MIGO)

Beitrag von M@atze! (ForumUser / 85 / 6 / 15 ) » 15. Jan 2020 11:04

Hi,

bitte prüfe ob die Erweiterungsimplementierung wirklich aktiv ist. Siehe Screenshot.

Hast du eine Position angelegt? Sieht auf deinem Screenshot nicht so aus.

GT_GOITEM solltest du über ein Klassenattribut global verfügbar machen.
Sonst hast du aus der CHECK_ITEM keinen Zugriff darauf.

Re: Beim Buchen-Button eine Fehlermeldung einbauen (MIGO)

Beitrag von L0w-RiDer (Specialist / 180 / 27 / 1 ) » 15. Jan 2020 13:23

So, nun habe ich es endlich richtig implementiert :).

Re: Beim Buchen-Button eine Fehlermeldung einbauen (MIGO)

Beitrag von L0w-RiDer (Specialist / 180 / 27 / 1 ) » 16. Jan 2020 08:58

So es wäre jetzt endlich mal so, dass er mir eine Line-Id mit der Mehtode wie von dir gezeigt @Matze (siehe Bild). Bloß wie kann ich denn jetzt wissen, dass es sich dabei nicht um den richtigen Leihgutempfänger handelt und dann bei Buchen eine Nachricht ausgegeben werden soll??


Wird eine Position gelöscht wird die Methode LINE_DELETE durchlaufen. Hier dann den entsprechenden Satz aus der globalen Tabelle wieder löschen.

Beim Buchen/Prüfen des Belegs wird dann "CHECK_ITEM" Positionsweise durchlaufen. Als Eingabeparameter bekommst du eine LINE_ID (ID der Position).
Anhand dieser kannst du die relevanten Positionsdaten aus deiner internen Tabelle ermitteln und für deine Prüfung verwenden.

--> Wäre es dabei so, dass die MIGO schon so programmiert ist, dass die Methode LINE-Delete nur dann ausgeführt wird, wenn es sich um den falschen Leihgutempfänger handelt?

Vorherige Seite 2 von 3 (current) Nächste

Aktuelle Forenbeiträge

Method für die Durchschnittsberechnung gelöst
vor einer Stunde von DeathAndPain 28 / 487
ASCII/BIN Art aus JPEG
vor einer Stunde von jocoder 2 / 16
SAP stürzt bei ALT+TAB ab
vor einer Stunde von ewx 10 / 65
Warum wird bei meinem INSERT nur ein Feld gefüllt?
vor 3 Stunden von DeathAndPain 13 / 238

Unbeantwortete Forenbeiträge

Funktionsbaustein MD_PEGGING_NODIALOG
vor 4 Tagen von christof 1 / 34
IDOC ist nicht angekommen
vor einer Woche von cuncon 1 / 58
Auftrag Vorgängerbeziehung entfernen
vor einer Woche von ichse18577 1 / 39