Problem mit Badi QM00_SUBSCR_5000

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
5 Beiträge • Seite 1 von 1
5 Beiträge Seite 1 von 1

Problem mit Badi QM00_SUBSCR_5000

Beitrag von Nautilus (ForumUser / 45 / 0 / 0 ) »
Hallo liebe community,

wir sind auf dem Gebiet der OOP unter ABAP und auch mit Badis noch recht unerfahren. Aufgrund eines internen Auftrages müssen wir allerdings eine Modifizierung der Transaktion QM02 durchführen und hier ein zusätzliches Eingabefeld im Dynpro 20 ermöglichen. Hierfür ist der Badi QM00_SUBSCR_5000 zuständig.

Folgende Tätigkeiten wurden durchgeführt, um das Ziel zu erreichen:
1. SE19: Anlage der Implementierung ZQM00_SUBSCR_5000_QS als Kopie von QM00_SUBSCR_5000_QS
2. SE80: Kopie der Funktionsgruppe QSTEXM nach ZQSTEXM002 und zusätzliche Kopie aller Includes und Funktionsbausteine
3. SE19: Angabe des gerufendenden Programms und der Dynpronummer im Reiter Subscreens:
SAPLQSTEXM und Dynpro 20
4. SE19: Deaktivierung der Implementierung QM00_SUBSCR_5000_QS und Aktivierung der Implementierung ZQM00_SUBSCR_5000_QS

Wird nun die Transaktion QM02 mit einer beliebigen Meldung ausgeführt, sind die Eingabefelder leer (müssten eigentlich gefüllt sein). Wird wieder die Original Implementierung aktiviert, so sind die Daten in den Feldern wieder vorhanden.

Beim debuggen fällt auf, dass die Variable flt_val im Include ZCL_IM__BADI_QMSTABIS_0001====CP noch mit QS besetzt ist. Nach dem Ende des Programmablaus ist dieser Inhalt aber verschwunden. Korriegiert man beim debuggen den Wert der Variable flt_val wieder auf den Wert QS, so wird die Eingabeaske korrekt gefüllt.

Wir wissen nicht, wo der Fehler liegt und hoffen darauf, dass schon einmal einen ähnlichen Versuch gestartet hat den Badi zu implementieren und uns an dieser Stelle vielleicht einen Tip geben kann?!

Sollte ich Informationen vergessen haben, bitte hier posten, ich werde diese dannn umgehend nachliefern.

Vielen Dank im Voraus für die Hilfe.

LG

Chris
Zuletzt geändert von Nautilus am 13.08.2008 11:21, insgesamt 1-mal geändert.

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


Beitrag von uh (Specialist / 158 / 0 / 1 ) »
Hi Chris,

den BAdI habe ich noch nicht implementiert aber das:

Code: Alles auswählen.

Wenn Sie das PLM-Add-on-Paket nicht im Einsatz haben und dieses BAdI implementieren möchten,  verwenden Sie das ausgelieferte Beispielcoding für die Implementierung der Methoden als Vorlage.
habt ihr auch gemacht? D.h. die PBO und PAI Methoden mit Leben gefüllt?
Wenn es nur darum geht, im Meldungskopf einen eigenen Subscreen anzuzeigen, kannst du doch auch die Erweiterung "QQMA0001 - QM/PM/SM: User Subscreen zum Meldungskopf" nutzen. Die haben wir hier im Einsatz und da kann ich dir helfen.

P.s. Ich sehe gerade, dass du nicht einmal SE19 erwähnst. Da kann was nicht stimmen! Ich habe in der SE19 schnell die Implementierung ZQM00_SUBSCR_5000 auf Basis von QM00_SUBSCR_5000 angelegt. Und dann sieht es so aus wie bei "QPL1_SUBSCREEN_ADDON". Das läuft dann über ein Call-Back-Programm, in dem du die Screens reinbastelst.

Beitrag von Nautilus (ForumUser / 45 / 0 / 0 ) »
Hi uh, vielen Dank für Deine Antwort. Ich entschuldige mich für die verspätete Antwort, aber ich war im Urlaub und mein Kollege hat wohl irgendwie vergessen hier im Forum nachzuschauen.

Außerdm habe ich eben entdeckt, dass ich in meinem Post einen Fehler gemacht habe:

Ich habe selbstverständlich alle beschriebenen Änderung mit der SE19 durchgeführt. Die SE18 bezieht sich ja nur auf die Definition und die will ich ja nicht ändern! Ich habe meinen Post diesbezgl. auch umgeändert.

Aber genau da liegt ja das Problem:
Ich habe in der SE19 schnell die Implementierung ZQM00_SUBSCR_5000 auf Basis von QM00_SUBSCR_5000 angelegt. Und dann sieht es so aus wie bei "QPL1_SUBSCREEN_ADDON". Das läuft dann über ein Call-Back-Programm, in dem du die Screens reinbastelst.
Ich habe ja auch wie oben beschrieben eine Kopie der Implementierung angelegt "ZQM00_SUBSCR_5000_QS".
Mit dieser Implementierung (ZQM00_SUBSCR_5000_QS) rufe ich dann ändernd die SE19 auf und wähle in dem Registerreiter "Subscreens" das "gerufene Programm" von SAPLQSTEXM (original) auf meine Version mit dem geänderten Layout SAPLZQSTEXM002.
Wenn ich mir in der Transaktion SE19 unter dem Registerreiter "Interface" die implementierten Methode anschauen sind diese alle mit Code hinterlegt. Dies wundert mich aber auch nicht, weil ich ja hier auf die Originalklasse verweise (CL_IM_QM00_SUBSCR_5000_QS) und keine Kopie angelegt habe.

Ändere ich in meiner kopierten Implementierung ZQM00_SUBSCR_5000_QS in dem Registerreiter "Subscreens" das "gerufene Programm" wieder auf das Original SAPLQSTEXM, so wird in der Transaktion QM02 wieder alles mit Inhalt dargestellt.

Ich hoffe ich habe Deine Fragen beantwortet und würde mich freuen, wennn och einer einen Tipp für mich hat, weil das Problem leider noch nicht behoben ist.

Vielen lieben Dank im Voraus.

Chris

nach oben schieb....!

Beitrag von Nautilus (ForumUser / 45 / 0 / 0 ) »
Hallo, hat denn wirklich keiner eine Idee?

Wenn denn schon keiner Ahnung von dem erwähnten Badi hat, könnte sich ja doch vielleicht jemand meine Schritte anschauen und mir ggf. einen Hinweis geben, ob DAS GENERELLE VORGEHEN zum ändern/anlegen eines Badis richtig ist.

Vielleicht kann mir ja auch einer einen Badi nennen, bei dem ich testweise ein Dynpro ändern und kontrollieren kann, ob die Datenfeldergefüllt werden. Mittlerweile befürchte ich sogar, dass ein genereller Fehler mit dem Badi vorliegt, da auch ein Berater, wir mit an board geholt haben, keine Lösung wusste.

Ich hoffe auf Eure Antworten und somit auf Eure Hilfe.

LG

Chris

Beitrag von uh (Specialist / 158 / 0 / 1 ) »
Hallo Nautilus,

da ich deine Implementierung nicht komplett gemacht habe, sondern nur eine Analoge - hier die Kurzform:
1. SE19 - ZQPL1_SUBSCREEN_ADDO aus Definition QPL1_SUBSCREEN_ADDON angelegt. Interface-Name ist IF_EX_QPL1_SUBSCREEN_ADDON (Später wichtig!!!)

2. Methoden mit Implementierung geneirert. Bsp: PUT_DATA_PBO
...
* Im PBO des rufenden Dynpros:
* Schnittstellenwerte an globale Attribute der Adapterklasse übergeben
MOVE i_rmqea TO if_ex_qpl1_subscreen_addon~g_rmqea.
MOVE i_qals TO if_ex_qpl1_subscreen_addon~g_qals.
MOVE i_modus TO if_ex_qpl1_subscreen_addon~g_modus.
....
3. Programm/Modulpool angelegt mit Namen: ZQPL1_SUBSCREEN_ADDON (Name ist egal) sieht so aus:

PROGRAM zqpl1_subscreen_addon.

TABLES: qals. (Wegen Subscreen)..

DATA: gs_qals_addon TYPE qals_addon.
!!!!Hier ist der Interface Name!!!
DATA: exit TYPE REF TO if_ex_qpl1_subscreen_addon.
....

4. Dynpro/Subscreen gepsinselt (Bei mir z.B. 205).
==============================

5. PBO zum Subscreen:
==============
MODULE status_0205 OUTPUT.
IF exit IS INITIAL.
CALL METHOD cl_exithandler=>get_instance
CHANGING
instance = exit.
ENDIF.

CALL METHOD cl_exithandler=>set_instance_for_subscreens
EXPORTING
instance = exit.

CALL METHOD exit->get_data_pbo
EXPORTING
flt_val = '03'
IMPORTING
e_qals = qals.
ENDMODULE. " STATUS_0205 OUTPUT

6. PAI zum Subscreen:
==============
MODULE user_command_0205 INPUT.

MOVE-CORRESPONDING qals TO gs_qals_addon.
CALL METHOD exit->put_data_pai
EXPORTING
flt_val = '03'
i_qals_addon = gs_qals_addon.

ENDMODULE. " USER_COMMAND_0205 INPUT


7. Dynpro-Nummer und Programm in SE19 unter Reiter Subscreens eingetragen.

8. Alles schön aktiviert und dann lief es.

So, kurze Erklärung:

A. Die Klasse ist eine Klasse mit Interface und da gehören halt keine Dynpros rein! (Da hat mal einer mit gedacht aber dadurch wird es etwas kompliziert).
Das Einzige, was deine Implemeniterung machen soll, ist Daten von A nach B und B nach A zu schieben.
Daher _musst_ du in dem Interface eine Implementierung haben, sonst schiebt die nämlich nicht!!!(Darum heisst deine Implemenierung "Implementierung").
Dann brauchst du was, womit du Dynpros pinseln kannst. Da nimmst du dir einen Modulpoool, weil die ganzen Report-Ereignisse hier nur stören.
Wie kommen jetzt Implementierung und Modulpool zusammen?

In der SE19 gibst du ja unter Subscreens deinen Modulpool und dein Dynpro an. Damit findet das BAdI deine Screens aber jetzt müssen ja noch die Daten geschoben werden!

Daher musst du in deinem Programm auf deine Implementierung kommen und da kommt die Variable EXIT ins Spiel. Du holst dir mittels cl_exithandler=>get_instance die Instanz (Also deine Implementierung - und da gibt es nur eine, da nicht mehrfach nutzbar) und registrierst diese Instanz als für die Behandlung der Subscreens cl_exithandler=>set_instance_for_subscreens.
Dann musst du im PBO/PAI deines Subscreens nur noch die Schiebe Methoden deiner Implementierung aufrufen exit->get_data_pbo/exit->put_data_pai und schon wandern die Daten hin und her.

Seite 1 von 1

Vergleichbare Themen

2
Antw.
2716
Views
BADI
von bohne » 17.07.2006 09:27 • Verfasst in Basis
3
Antw.
4228
Views
BADI
von Rabea1103 » 27.10.2010 11:26 • Verfasst in ABAP Objects®
0
Antw.
1500
Views
BAdI HRPAD00AUTH_TIME
von Spring » 25.03.2019 09:37 • Verfasst in Human Resources
2
Antw.
15014
Views
BAdI Suche..???
von Basler84 » 07.08.2012 08:27 • Verfasst in ABAP® für Anfänger
20
Antw.
7333
Views
CO01 BADI
von L0w-RiDer » 19.01.2022 19:26 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Ermittlung der Arbeitstage (Mosid)
vor 2 Tagen von Radinator 11 / 45833
LSMW-Problem
vor einer Woche von DeathAndPain gelöst 6 / 3711
SFP (Adobe Forms) QR-Code wird nicht angezeigt
vor einer Woche von Sebastian82 gelöst 4 / 2231

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.

Aktuelle Forenbeiträge

Ermittlung der Arbeitstage (Mosid)
vor 2 Tagen von Radinator 11 / 45833
LSMW-Problem
vor einer Woche von DeathAndPain gelöst 6 / 3711
SFP (Adobe Forms) QR-Code wird nicht angezeigt
vor einer Woche von Sebastian82 gelöst 4 / 2231