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