BADI DOCUMENT_MAIN01 und Klassifizierung auslesen?

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
17 Beiträge • Seite 1 von 2 (current) Nächste
17 Beiträge Seite 1 von 2 (current) Nächste

BADI DOCUMENT_MAIN01 und Klassifizierung auslesen?

Beitrag von xanatos (ForumUser / 28 / 0 / 0 ) »
Hallo,

ich suche nach einer Möglichkeit, bei jedem Speichervorgang eines Dokumenteninfosatzes die aktuelle Klassifizierung auszulesen...

Dafür habe ich mir den Badi DOCUMENT_MAIN01 ausgesucht... dort gibt es ja eine Methode namens AFTER_SAVE. Leider bekommt man dort die Klassifizierung nicht als Übergabeparameter - und leider ist der Zeitpunkt, wo dieser aufgerufen wird nicht wirklich NACH dem Speichern, da ein GET_DETAIL auf das Dokument noch den alten Stand zurückliefert.

Gibt es eine andere Möglichkeit, mit der man an die Klassifizierungsdaten herankommt?

Bin für jede Hilfe dankbar
Viele Grüße
Sven

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


Beitrag von fip (ForumUser / 14 / 0 / 0 ) »
Hi Sven

Ich mache es so:

DATA: w_doknr(50).

*--> Schlüssel für Klassifizierung bilden
CONCATENATE drat-dokar drat-doknr drat-dokvr drat-doktl INTO w_doknr.

*--> Klassifizierung lesen
SELECT * FROM kssk WHERE objek EQ w_doknr
AND mafid EQ 'O'
AND klart EQ '017'.
ENDSELECT.

SELECT * FROM klah WHERE clint = kssk-clint.
ENDSELECT.

CHECK sy-subrc = 0.

CLEAR: xobject. REFRESH: xobject.

CALL FUNCTION 'CLAF_CLASSIFICATION_OF_OBJECTS'
EXPORTING
class = klah-class
classtext = 'X'
classtype = '017'
clint = kssk-clint
features = 'X'
language = sy-langu
object = kssk-objek
objecttable = ' '
key_date = sy-datum
initial_charact = 'X'
TABLES
t_class = xclass
t_objectdata = xobject
EXCEPTIONS
no_classification = 1
no_classtypes = 2
invalid_class_type = 3
OTHERS = 4.

LOOP AT xobject WHERE ausp1 NE '?'.

ENDLOOP.

mfG
Emanuel

Beitrag von xanatos (ForumUser / 28 / 0 / 0 ) »
fip hat geschrieben:Hi Sven

Ich mache es so:

...

mfG
Emanuel
Hi Emanuel,

danke für die Antwort. Aber wenn ich das richtig sehe, liest dein Funktionsbaustein doch auch nur die Klassifizierung aus der Datenbanktabelle?!... und dort ist in meinem Fall leider noch nicht der aktuelle Wert, der in der Transaktion CV02N eingegeben wurde, angekommen.
Ich suche halt nach einer Lösung für den genau oben beschrieben Fall in dem genannten Badi.

Das Auslesen der Klassifizierung kannst du übrigens auch mit dem Funktionsbaustein BAPI_DOCUMENT_GETDETAIL2 machen... dann sparst du dir das vorherige Auslesen der Klasse.

Gruß
Sven

Beitrag von s.maerz (ForumUser / 14 / 0 / 0 ) »
Hi,

nützt dir evtl. der FB CLAP_DDB_ALLOCATION_FR_BUFFER etwas?
Damit kannst du doch Daten aus dem Puffer/Memory lesen.
Und das sollten doch die aktuellen Daten sein.

Anderenfalls schau doch mal in der SE37 über *BUFFER* und F4 nach.
Da bekommst du alle FB's die irgendwas aus dem Memory lesen. :lol:

Grüsse

Beitrag von xanatos (ForumUser / 28 / 0 / 0 ) »
s.maerz hat geschrieben:Hi,

nützt dir evtl. der FB CLAP_DDB_ALLOCATION_FR_BUFFER etwas?
Damit kannst du doch Daten aus dem Puffer/Memory lesen.
Und das sollten doch die aktuellen Daten sein.

Anderenfalls schau doch mal in der SE37 über *BUFFER* und F4 nach.
Da bekommst du alle FB's die irgendwas aus dem Memory lesen. :lol:

Grüsse
Hast du vielleicht noch nähere Infos zu dem FB "CLAP_DDB_ALLOCATION_FR_BUFFER"? Ich hab es hinbekommen, dass der Funktionsbaustein mir in der Tabelle T_ALLOCATIONS etwas zurückliefert. Dort befinden sich allerdings nur Informationen zu der Klasse... keine Attribute und Werte.
Weißt du, wie ich auch daran komme?

Gruß
Sven

Beitrag von s.maerz (ForumUser / 14 / 0 / 0 ) »
Hallo Sven,

habe heute leider kein SAP-System zur Verfügung, weiss aber, dass wenn du
in der SE37 nur den Begriff *BUFFER* einträgst und dann die Wertehilfe (F4) ausführst auch ein FB existiert, der dir die aktuellen Merkmale aus dem Memory ausliest.
Oder schau doch auch noch mal in die Funktionsgruppe (glaube) 'CLAP'. Dort könntest du diesen FB auch finden.

Falls noch Fragen, ich bin am Montag wieder online und kann dir den FB dann sagen.

Grüsse und ein schönes Wochenende
Stefan

Beitrag von xanatos (ForumUser / 28 / 0 / 0 ) »
s.maerz hat geschrieben:Hallo Sven,

habe heute leider kein SAP-System zur Verfügung, weiss aber, dass wenn du
in der SE37 nur den Begriff *BUFFER* einträgst und dann die Wertehilfe (F4) ausführst auch ein FB existiert, der dir die aktuellen Merkmale aus dem Memory ausliest.
Oder schau doch auch noch mal in die Funktionsgruppe (glaube) 'CLAP'. Dort könntest du diesen FB auch finden.

Falls noch Fragen, ich bin am Montag wieder online und kann dir den FB dann sagen.

Grüsse und ein schönes Wochenende
Stefan
Hi Stefan,

ich habe den folgenden Baustein in der gleichen Funktionsgruppe gefunden: "CLFM_GET_AUSP_FROM_BUFFER". Leider liefert er mir keine Werte, wenn ich ihn wie den anderen FB befülle.
Kann es sein, dass die Bausteine nur in einem bestimmten Kontext funktionieren? Der "Buffer" scheint mir auch nur aus internen Tabellen innerhalb der Funktionsgruppe zu bestehen. Möglicherweise werden die in meinem Kontext (Änderung der Klassifizierung eines DIS in der Transaktion CV02N) nicht gefüllt.
Oder muss ich zunächst einen "Initialisierungsbaustein" aufrufen, der die Buffer befüllt?

Gruß
Sven

Beitrag von s.maerz (ForumUser / 14 / 0 / 0 ) »
Hi Sven,

gibst du dem Baustein den Parameter I_NO_DB_SELECT = X mit?
Denn dann liest er ja auch die Werte von der DB.

Normalerweise sollten die Tabellen allausp und allkssk gefüllt sein, denn diese
sind als Schnittstelle für die Verbuchung angegeben!

Grüsse
Stefan

Beitrag von xanatos (ForumUser / 28 / 0 / 0 ) »
Hi Stefan,

ja das habe ich gemacht... ich hab mir auch den Spaß gemacht, den kompletten Speichervorgang zu debuggen - die von dir genannten Tabellen werden leider refreshed, bevor der Badi-Exit aufgerufen wird. :x

Ich habe eine andere Funktionsgruppe gefunden, in der der aktuelle Wert, den ich suche, noch gespeichert ist. Allerdings finde ich keine Funktion oder Routine, die mir den herausgibt - ich sehe ihn nur im Debugging, wenn ich einen Funktionsbaustein aus der Gruppe aufrufe.

Gibt es eine Möglichkeit auf Tabelleninhalte einer fremden Funktionsgruppe direkt zuzugreifen?

Gruß
Sven

Beitrag von s.maerz (ForumUser / 14 / 0 / 0 ) »
Hi Sven,

warum gehst du nicht einen anderen Weg:

es gibt in deinem Badi die Methode BEFORE_SAVE. Dort sollten die Daten noch im Memory stehen :?
Deklariere dir doch in deinem Badi eine Tabelle global, damit sie in beiden Methoden sichtbar ist, fülle sie vor dem sichern und ruf diese dann anschiessend in deiner Methode AFTER_SAVE wieder auf, somit hast du die Daten, die gespeichert wurden noch im Zugriff nachdem der refresh durchgeführt wurde :lol:

=> vor dem Verlassen der Methode den refresh auf deine Tabelle nicht vergessen...passiert mir immer wieder mal und ich wundere mich dann, wo die Daten herkommen :oops:

Grüsse
Stefan

Beitrag von xanatos (ForumUser / 28 / 0 / 0 ) »
Hey, das klingt sehr gut... das probiere ich dann morgen direkt mal aus! Vielen dank schonmal für die Hilfe! :)

Gruß
Sven

Beitrag von xanatos (ForumUser / 28 / 0 / 0 ) »
Sch**, der geht! :D

Das Allein ist schon richtig gut... doch der Hit in Tüten wäre es, wenn ich nun noch die Daten in der ALLAUSP ändern könnte. Im Debugger geht das - da kann ich eigene Werte hinzufügen und die bestehenden manipulieren.

Hast du evtl. noch einen Tipp, wie ich diese von außen ändern kann?

Viele Grüße
Sven

Beitrag von s.maerz (ForumUser / 14 / 0 / 0 ) »
Hi Sven,

da wirst du wohl vor dem speichern eingreifen müssen...

Was willst du denn verändern und warum?

Grüsse
Stefan

Beitrag von xanatos (ForumUser / 28 / 0 / 0 ) »
Hi Stefan,

...es gibt beispielsweise Felder, die bei bestimmten Statuswechseln immer gefüllt werden sollen. Wird meinetwegen Status XY gesetzt, wird in der Klassifizierung festgehalten, wer den Status wann gesetzt hat.

Gruß
Sven

Beitrag von s.maerz (ForumUser / 14 / 0 / 0 ) »
Hi Sven

warum arbeitest du dann in der Methode AFTER_SAVE??? :?

Wenn du Daten ändern willst, dann nehm doch die Methode BEVOR_SAVE,
die Memorytabelle hast du ja bereits und schreibe dort die neuen Werte in die diese (sollte ja die ALLAUSP sein).
Dann sollten die geänderten Daten doch auch gespeichert werden...oder :?

Grüsse
Stefan

Vergleichbare Themen

1
Antw.
1237
Views
Klassifizierung auslesen Performanceverbesserung
von Luny » 13.04.2011 16:00 • Verfasst in ABAP® für Anfänger
1
Antw.
424
Views
Klassifizierung EK-Infosatz auslesen und kopieren
von der_neuling » 30.03.2022 09:50 • Verfasst in ABAP® für Anfänger
0
Antw.
2247
Views
Document Viewer
von joffi68 » 17.07.2007 14:29 • Verfasst in Basis
0
Antw.
2218
Views
DOCUMENT VIEWER
von SAP_ENTWICKLER » 17.01.2015 15:34 • Verfasst in ABAP® Core
0
Antw.
1086
Views
Lieferpläne mit Document Type LZ
von itmeli » 17.01.2006 09:23 • Verfasst in Sales and Distribution

Ü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.