Doppelte BADI-Implementierung - Ursache?

Getting started ... Alles für einen gelungenen Start.
17 Beiträge • Seite 1 von 2 (current) Nächste
17 Beiträge Seite 1 von 2 (current) Nächste

Doppelte BADI-Implementierung - Ursache?

Beitrag von vman (ForumUser / 43 / 2 / 0 ) »
Hallo zusammen,

ich habe mal wieder ein Problem. Ich habe Anfang des Jahres ein Badi implementiert, um die Transaktion MIGO um einen Reiter zu verwenden. Nun ist der Fall aufgetreten, dass ein Badi, dass ein Kollege von mir implementierte, inaktiv gesetzt war. Nachdem er es aktiv gesetzt hatte, da es wieder benötigt wird, erschien eine Fehlermeldung, dass es mehr als eine Implementierung mit diesem Namen gibt: ich fand heraus, dass die Methode INIT seit der Aktivierung seiner Implementierung 2x aufgerufen wird. Ist das die Standardreaktion von SAP? Ist vielleicht dämlich gedacht, aber es sind ja auch 2 Implementierungen vorhanden. Ich habe mich damit beholfen, dass ich aus der Tabelle CT_INIT, in welcher die Implementierungen bei Aufruf der Methode INIT eingetragen werden, mehrfach vorhandene Einträge lösche.

Ich denke, dass das aber am wahren Problem vorbei geht und lediglich eine Krücke ist. Hat jemand von euch so etwas schon mal gesehen oder sonstwie eine Erklärung dafür?

Ich bin für jeden Hinweis mehr als dankbar und falls ich von selbst drauf komme, werde ich das hier selbstverständlich bekannt geben.

Danke und Gruß,

Alex

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Doppelte BADI-Implementierung - Ursache?

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
Die Mehrfachverwendung ist ja eigentlich der Vorteil gebenüber eines einfachen Exits.

http://help.sap.com/erp2005_ehp_03/help ... ameset.htm

Re: Doppelte BADI-Implementierung - Ursache?

Beitrag von casman (Specialist / 420 / 1 / 63 ) »
Hi vman,

wie Unit605 schon geschrieben hat, ist die Mehrfachverwendung bei BAdIs möglich und bei der Entwicklung des BAdIs von SAP entweder gesetzt worden oder nicht:
Mehrfache Nutzbarkeit bedeutet für BAdI-Definitionen, daß es mehrere aktive BAdI-Implementierungen geben kann, die im Falle eines Aufrufs sämtlich aufgerufen werden, allerdings in einer nicht vorhersagbaren Reihenfolge.
Ich nehme an, du verwendest MB_MIGO_BADI, dieses is mehrfach implementierbar. Somit ist das Verhalten bei dir logisch. Was ich nicht ganz verstehe ist die "Fehlermeldung". Wann kommt die, ist es wirklich ein Fehler oder eine Warnung?

Und ja, deine Lösung ist wirklich eine Krücke. :-) Wenn du eine Implementierung nicht willst, musst du Sie halt einfach deaktivieren.

Re: Doppelte BADI-Implementierung - Ursache?

Beitrag von vman (ForumUser / 43 / 2 / 0 ) »
Hallo,

ich danke euch für eure Antworten. Ich bin jetzt schlauer, was das betrifft und muß jetzt versuchen, eine Lösung zu finden, wie wir damit umgehen; theoretisch kann es ja sein, dass beide Implementierungen parallel verfügbar sein sollen. Bislang war die Implementierung des Kollegen inaktiv und meine aktiv, aber aufgrund eines Projektes kann es sein, dass eine weitere dazu kommt und das wird dann erst richtig interessant, wie damit umzugehen ist.

Ich hänge die Fehlermeldung später mal an.

Gruß,

Alex

Re: Doppelte BADI-Implementierung - Ursache?

Beitrag von casman (Specialist / 420 / 1 / 63 ) »
Hmmm, die Lösung ist eigentlich einfach:

1. Spielt die Reihenfolge der Ausführung keine Rolle: alle aktivieren.
2. Spielt die Reihenfolge eine Rolle:
- prüfen ob BAdI BADI_SORTER helfen kann, eine Reihenfolge zu erzwingen,
- wenn nein, dann alles in eine Implementierung packen...

Re: Doppelte BADI-Implementierung - Ursache?

Beitrag von vman (ForumUser / 43 / 2 / 0 ) »
Hallo,

ich prüfe das mal und melde mich dann wieder; seltsam ist, dass es - auch ohne die Krücke von mir - im Entwicklungssystem zu funktionieren scheint, im Q-System aber nicht; da taucht die Meldung auf, die ich jetzt anfüge.

LG,

Alex
Kopie von BADI1.jpg

Re: Doppelte BADI-Implementierung - Ursache?

Beitrag von casman (Specialist / 420 / 1 / 63 ) »
Hmmm, hört sich irgendwie an, als hättest du zwei Implementierung gleichen Namens.

1. Schreib bitte mal die Nachrichtenklasse und Fehlernummer (Fragezeichen bei Fehler klicken)
2. Schau im Q mal, welche Implementierungen zum BAdI angelegt sind (SE18)

Re: Doppelte BADI-Implementierung - Ursache?

Beitrag von vman (ForumUser / 43 / 2 / 0 ) »
Hallo,

das sind die gewünschten Informationen: MIGO 048.

Dann werde ich die Implementierung wohl in einem neuen Namen erneut anlegen und die Inhalte dort eintragen müssen.

LG,

Alex

Re: Doppelte BADI-Implementierung - Ursache?

Beitrag von casman (Specialist / 420 / 1 / 63 ) »

Code: Alles auswählen.

* BAdI: Get instance (BAdI MB_MIGO_BADI interface)
    CALL METHOD cl_exithandler=>get_instance
      EXPORTING
        exit_name              = 'MB_MIGO_BADI'
        null_instance_accepted = x
      CHANGING
        instance               = if_badi.
    IF NOT lcl_migo_globals=>if_badi IS INITIAL.
      CALL METHOD if_badi->init
        CHANGING
          ct_init = t_badi.
      DESCRIBE TABLE t_badi LINES l_badis_1.
      IF l_badis_1 > 5.
        MESSAGE a047.
      ENDIF.
      SORT t_badi BY class_id.
      DELETE ADJACENT DUPLICATES FROM t_badi.
      DESCRIBE TABLE t_badi LINES l_badis_2.
      IF l_badis_1 <> l_badis_2.
        MESSAGE a048.
      ENDIF.
    ENDIF.
Hi vman,

hier wird deine Meldung ausgelöst. SAP liest alle Implementierungen, ruft die INIT-Methode und prüft auf Duplikate anhand der CLASS_ID (Klassen-ID für MIGO-Komponenten).

Du musst also in der INIT-Methode der Implementierung eine eindeutige CLASS_ID entsprechend folgender Dokumentation wählen:
Schnittstelle:
CT_INIT: Tabellentyp Registrierung von Komponenten (ext. MIGO-Screens)

Das BAdI MB_MIGO_BADI ist als mehrfach nutzbar definiert. Im konkreten Fall dieses BAdI bedeutet das, dass es bis zu fünf aktive Implementierungen geben kann: Es existieren fünf Header-Subscreens und fünf Detail-Subscreens für externe Anwendungen.

Deshalb muss die externe Anwendung der MIGO seine Existenz mitteilen, da die MIGO zur Laufzeit keine Informationen über die Anzahl der aktiven Implementierungen hat. Die MIGO hat auch keine Möglichkeit, eine Implementierung direkt anzusprechen.

Dies geschieht dadurch, dass sich die externe Anwendung mit Hilfe der Registrierungstabelle mit einem eindeutigen Namen anmeldet (interne Tabelle CT_INIT). Der Name kann von der externen Anwendung frei gewählt werden.
Lies dir einfach mal die ganze BAdI-Doku durch, das hilft dir weiter.

Re: Doppelte BADI-Implementierung - Ursache?

Beitrag von vman (ForumUser / 43 / 2 / 0 ) »
Hallo casman,

nochmals vielen Dank für Deine Antwort: ich denke, dass mir das sehr helfen wird. Bisher kam ich nicht dazu, das zu überprüfen; sobald ich das nachgeholt habe, poste ich hier das Ergebnis.
Ich dachte eigentlich, ich hätte die Implementierung anders benannt, aber so kann man sich irren. :?

LG,

Alex

Re: Doppelte BADI-Implementierung - Ursache?

Beitrag von casman (Specialist / 420 / 1 / 63 ) »
Hi Alex,

die Implementierung hast du sicher anders genannt, musst du ja glaube sogar. Nur hast du wahrscheinlich den Quelltext der INIT-Methode kopiert und damit deine Implementierung unter dem gleichen Kürzel "angemeldet".

Re: Doppelte BADI-Implementierung - Ursache?

Beitrag von vman (ForumUser / 43 / 2 / 0 ) »
Hallo casman,

ich habe jetzt eine andere Bezeichnung für die Implementierung gewählt, die sich namentlich von der meines Kollegen unterscheidet, aber das Problem hat sich leider nicht in Luft aufgelöst: es verhält sich so, dass die INIT-Methode 2x aufgerufen wird und auch dann, wenn ich meine Implementierung auskommentiert habe und selbst wenn ich den Namen der Implementierung vorübergehend gelöscht und die Version der INIT-Methode, die vor meinem Eintritt in das Unternehmen angelegt wurde, aus der Versionsverwaltung zurückhole, erscheint dennoch diese Meldung,
dass zwei Implementierungen vorliegen.

Die Ursache dafür ist, dass im Class_Constructor die Tabelle t_badi, welche eine Kopie der ct_init ist, technisch beschrieben wird und die Anzahl der Einträge ermittelt. Im Anschluß daran werden doppelte Einträge aus der Tabelle t_badi gelöscht und das Spiel wiederholt sich: die Anzahl der Einträge wird ermittelt und in eine anderslautende Variable geschrieben und danach werden beide Werte miteinander verglichen und wenn die unterschiedlich sind, - was zwangsläufig der Fall ist, wenn doppelte Einträge vorhanden sind - wird diese Fehlermeldung ausgegeben.

Ich werde jetzt testweise mal den Zustand aller Methoden auf den Stand vor meinen Änderungen setzen und sehen, was dann passiert; wenn der Fehler immer noch auftritt, weiß ich, dass es nicht an meiner Implementierung liegt und wenn er nicht auftritt, muss ich weitersuchen.

Ich füge auch einen Screenshot der entsprechenden Stelle an; es ist genau der Teil des Codes, denn Du aufgelistest hast.

LG,

Alex
MIGO_Problem.jpg

Re: Doppelte BADI-Implementierung - Ursache?

Beitrag von vman (ForumUser / 43 / 2 / 0 ) »
Hallo zusammen,

was mir noch einfällt, ist folgendes: vor kurzem wurde eine neue Kopie des Qualitätssicherungs-/Testsystems aus dem Produktivsystem erstellt; im Entwicklungssystem tritt dieser Fehler nicht auf, im Testsystem hingegen schon. Ist es evtl. möglich, dass eine Einstellung aus dem Produktivsystem hier greift, die im Entwicklungssytem so nicht vorhanden ist?

LG,

Alex

Re: Doppelte BADI-Implementierung - Ursache?

Beitrag von casman (Specialist / 420 / 1 / 63 ) »
Hi Vman,

was steht denn drin in deiner T_BADI vor dem DELETE? Da werden ja in der INIT-Methode des BADIs Einträge eingefügt, die eine Implementierung eindeutig kennzeichnen sollen. Damit kommst du doch dem Problem auf die Schliche...

Re: Doppelte BADI-Implementierung - Ursache?

Beitrag von vman (ForumUser / 43 / 2 / 0 ) »
Hallo,

nochmals danke für Deine Antwort; es stehen 2 Einträge für jeweils das Attribut gf_class_id MIGO_BADI_IMPLEMENTATION1 und für das Attribut gc_class_id MIGO_BADI_IMPLEMENTATION2 drinnen; erstere ist die Implementierung meines Kollegen, letztere meine. Ich glaube aber, jetzt auf der richtigen Spur zu sein: mein Kollege hat eine klassische Badi-Implementierung angelegt, in der mein Code drin steht und ich habe - wohl aus Unwissen - eine neue Badi-Implementierung angelegt, in der ebenfalls der Code drin steht und ich vermute, aus meinem bescheidenen Wissen heraus, dass da der Fehler liegt bzw. deshalb 2 Aufrufe im Testsystem vorkommen; weshalb sie das im Entwicklungssystem nicht tun, ist mir schleierhaft, da beide Versionen laut Remote-Vergleich absolut identisch sind.

Vielleicht sehe ich im Moment auch den Wald vor lauter Bäumen nicht. Mal sehen, was ich noch herausfinde.

LG,

Alex

Vergleichbare Themen

7
Antw.
8020
Views
BADI Doppelte Implementierung
von BarbaraM » 19.10.2005 09:41 • Verfasst in ABAP Objects®
1
Antw.
847
Views
Implementierung BADI FI_LZBKZ_LANDL_DERIVE
von dagmard » 21.05.2024 13:47 • Verfasst in ABAP® für Anfänger
5
Antw.
5458
Views
Eigene BAdI-Implementierung zieht nicht?
von Frog » 03.04.2008 14:21 • Verfasst in ABAP Objects®
6
Antw.
7765
Views
Laufzeitfehler - Ursache?
von ralf.wenzel » 18.04.2008 10:29 • Verfasst in ABAP® Core
4
Antw.
3260
Views
ABAP Debugger - Funktionen fehlen - Ursache?
von Julian Feige » 17.08.2018 15:23 • Verfasst in ABAP® Core

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.