2008-10-22 20 views
5

Ich möchte die Funktionalität eines SAP-Programms (Transaktion) als BAPI offenlegen. Ich muss einen Bericht aufrufen und Bereichsfilter bereitstellen, so dass die GUI umgangen wird.Aufrufen eines vorhandenen SAP-Reports in ABAP mit GUI-Unterdrückung

Hat jemand ein funktionierendes Beispiel des SUBMIT ... WITH ... ABAP-Konstrukts oder andere Vorschläge, wie man das erreicht, was ich tun muss? Hier

Antwort

3

ist ein funktionierendes Beispiel:

SUBMIT SAPF140 
    TO SAP-SPOOL       "optional" 
    SPOOL PARAMETERS print_parameters "optional" 
    WITHOUT SPOOL DYNPRO     "optional (hides the spool pop-up)" 
    VIA JOB jobname NUMBER l_number  "optional" 
    AND RETURN       "optional - returns to the calling prog" 
    WITH EVENT = REVENT 
    WITH BUKRS IN RBUKRS 
    WITH BELNR IN lRBELNR 
    WITH GJAHR IN RGJAHR 
    WITH USNAM = SY-UNAME 
    WITH DATUM = SAVE_DATUM 
    WITH UZEIT = SAVE_UZEIT 
    WITH DELDAYS = RDELDAYS 
    WITH KAUTO = 'X' 
    WITH RPDEST = SAVE_PDEST 
    WITH TITLE = TITLE. 

Alle „MIT“ Aussagen bezieht sich auf Auswahlfelder auf dem aufgerufenen Programm, wo ich = es ist ein Parameter-Anweisung (Einzelfeld), wo ich es verwenden ist eine SELECT_OPTIONS Anweisung (Bereich)

Hier ist ein einfaches Beispiel dafür, wie eine Reihe zu füllen:

REFRESH lrbelnr. 
lrbelnr-sign = 'I'. 
lrbelnr-option = 'EQ'. 
lrbelnr-low = HBKORM-belnr. 
CLEAR lrbelnr-high. 
append lrbelnr. 
+0

Danke, aber das funktioniert nicht. Das jeweilige Programm hat eine Warnung nach der Auswahl, und wenn Sie dies versuchen, wird die GUI zur Anzeige der Warnung angezeigt ... – user26652

+0

Welches Programm/Trans. rufst du an? Durch die Übermittlung über eine Job-ID können Sie möglicherweise die Warnung umgehen, da sie die Warnung in das Jobprotokoll schreiben sollte. Alternativ bietet SAP GUI eine benutzerspezifische Einstellung, mit der Sie das Popup für Warnungen deaktivieren können (falls die Warnung korrekt implementiert wurde). – Esti

1

Wenn Sie diese Funktionalität zu unterdrücken wollen, als BAPI Sie th zu wickeln haben Die Funktionalität in einem RFC-Modul (Remote Function Call). Implementieren Sie einfach einen RFC-Funktionsbaustein. Abhängig davon, wie der Bericht implementiert wird, kann er ABAP-Objekte verwenden, die auch von Ihrer RFC-Implementierung aus aufgerufen werden können. In diesem Fall haben Sie eine recht gute Lösung. Wenn der Bericht angepasst wird, spiegelt auch Ihr BAPI die Änderungen wider. Falls es sich um ein Standardprogramm von SAP handelt, das nicht umgebrochen werden kann, sollten Sie es in Ihren Namespace kopieren und anpassen. Dies kann jedoch zu Problemen führen, wenn SAP ein Update über den Support Package Stack durchführt und Sie dies nicht bemerken. Die Ausgabe der beiden Methoden ist unterschiedlich. Wenn Sie es von außen aufrufen möchten, gibt es nichts anderes, als ein RFC-Modul zu implementieren.

Ein Sendebericht kann die Werte nicht zurückgeben. Berichte dienen immer nur für GUI-Funktionen und nicht zum Datenaustausch. Falls Ihr Bericht ausgewählte Optionen verwendet, müssen Sie diese Funktion irgendwie "von Hand" in Ihrem RFC implementieren, da diese Anweisungen nicht innerhalb von RFC-Modulen verwendet werden können. Ich würde generell versuchen, den Bericht zu überarbeiten, zu modularisieren und die Selektionsinformationen in eine zentrale Klasse oder einen anderen Funktionsbaustein zu stellen, der aus dem Bericht und Ihrem BAPI-Funktionsbaustein aufgerufen werden kann. Die Filter, über die Sie sprechen, können nicht automatisch in RFCs implementiert werden. Sie müssen diese Bereiche manuell implementieren. Die Warnmeldung, die auftaucht, kann nicht unterdrückt werden. Wenn Sie einen RFC-Aufruf von einem Remote-System durchführen und das Popup mit der Warnung erscheint, werden Sie mit einem Kurzdump enden. Daher müssen Sie den Bericht erneut bearbeiten und für Ihre Anforderungen erneut implementieren.

Wenn Sie nur nach einer Jobplanung suchen, erstellen Sie eine Variante und planen Sie den Bericht mit dieser Variante, aber ich nehme an, das ist nicht die Lösung, nach der Sie suchen.

+0

+1 für die Lösung der zugrunde liegenden Frage (Exposition gegenüber der Außenwelt) – Esti

1

Sie können BAPI verwenden auch schreiben Sie einfach "Bereich" und drücken Sie F4.

0

Sie können Ihren Bericht in eine BATCH INPUT session verpacken und innerhalb einer Funktion ausführen. Der einzige Nachteil ist, dass Sie den BATCH INPUT jedes Mal neu schreiben müssen, wenn Sie den Bericht ändern.