Hallo zusammen,
SaskuAc hatte hier
https://www.abapforum.com/forum/viewtop ... 998#p86992 einen Vorschlag für einen selbstgestrickten Verbucher gemacht. Sowas möchte ich jetzt bauen und bin auch schon ein ganzes Stück fortgeschritten. Das Problem, vor dem ich jetzt stehe, ist, die serialisiert in meiner Verbuchertabelle stehenden Parameterwerte an die Methode zu übergeben, die die Verbuchung ausführen soll.
Dabei ist zu beachten, dass der Verbucher universell sein soll. Soll heißen, aufzurufende Klasse und Methode stehen selbst in der Verbuchungstabelle, woraus folgt, dass die Importparameter, die an die Methode zu übergeben sind, beliebiger Natur und in jedem Fall anders sein können.
black_adept hatte auf
http://www.tricktresor.de/blog/serialize-me/ verwiesen, um die Serialisierung vorzunehmen. Nun will ich aber kein ganzes OO-Objekt serialisieren, sondern einfach nur ein Datenfeld beliebiger Struktur
(dessen Elemente nämlich die zu übergebenden Parameter sein sollen). Der Witz an der Sache: Die Serialisierung habe ich bereits hingekriegt. Doch bei der Deserialisierung hapert es, und zwar hauptsächlich deshalb, weil es mir nicht gelingt, ein Zielfeld vom TYPE ANY anzulegen, in das ich den String hinein deserialisieren kann. TYPE ANY ist bei DATA eben nicht erlaubt. Normalerweise hätte ich gesagt, dann lege ich halt ein universelles Feld per TYPE REF TO DATA nebst CREATE DATA an, doch auch das geht nicht, da ich beim CREATE DATA dann doch wieder einen konkreten Datentyp benennen muss.
Bis jetzt sieht mein entsprechender Code wie folgt aus:
Code: Alles auswählen.
METHOD NEW_TASK.
* Legt einen neuen Verbuchungstask an.
* IMPORTING
* CLASS_NAME TYPE ZVERBUCHERTASKS-CLASS
* METHOD_NAME TYPE ZVERBUCHERTASKS-METHOD
* METHOD_PARAMETERS TYPE ANY
DATA: PARAMETERS_AS_XML TYPE STRING.
* Parameterstruktur in seriellen String wandeln (serialisieren)
CALL TRANSFORMATION ID SOURCE EINZIGES_FELD = METHOD_PARAMETERS
RESULT XML PARAMETERS_AS_XML.
Dadurch, dass METHOD_PARAMETERS hier ein Importparameter ist, ist eine Typisierung per TYPE ANY zulässig. Also kann ich damit eine beliebige Parameterstruktur (die auch Tabellen etc. enthalten darf) entgegennehmen und mit obenstehendem Code serialisieren. Bei der Ausführung der Verbuchung würde ich nun gerne den mit o.g. Code serialisierten String wieder deserialisieren und damit die zu rufende Methode befüttern. Der Befehl CALL METHOD ist ja sehr flexibel und erlaubt es durchaus, ihm beliebige Parameter als Tabelle zu übergeben. Aber dazu müsste ich erst obenstehenden Vorgang umkehren und aus dem String PARAMETERS_AS_XML wieder das Datenfeld METHOD_PARAMETERS machen. Dies scheitert aber daran, dass ich seine Struktur nicht kenne und daher kein passendes Feld zur Aufnahme der deserialisierten Werte deklarieren kann. Hätte ich solch ein Feld, dann wäre die Deserialisierung per
Code: Alles auswählen.
CALL TRANSFORMATION ID SOURCE XML PARAMETERS_AS_XML
RESULT EINZIGES_FELD = DESERIALIZED_PARAMETERS.
leicht zu realisieren. Was kann ich tun?