und schon habe ich das nächste Problem: ich muss das Ergebnis einer Suchhilfe vor der Anzeige zum User filtern.
Konkret geht es um Suchhilfen zu Debitoren, wie z.B. DEBIA, DEBIC usw.
Ich habe mir einen EXIT geschrieben, den ich (per Modifikation) rufe.
Nun sind die Ergebnisse in der Tabelle RECORD_TAB leider in einem großen String abgelegt.
Die Struktur dieser Daten ist abhängig von der Selektionsmethode.
In SHLP-FIELDDESCR finde ich alle Felder, ihre Reihenfolge, Offsets und Längen.
Also, dachte ich mir, lese ich diese Infos doch einfach und greife mit dem angegebenen Offset und der Länge auf den String aus der RECORD_TAB zu...
Leider passen die Infos absolut gar nicht auf den String und ich erhalte immer Unsinn. Auch wenn ich einfach die OUTPUTLEN bis zur Kundennummer addiere, erhalte ich in den meisten Fällen den falschen Offset.
Deshalb habe ich es nun anders versucht: ich erzeuge mir dynamisch ein Feld vom Typ der Selektionsmethode aus der Suchhilfe und schiebe den String in dieses Feld.
In den meisten Fällen erhalte ich dann tatsächlich das korrekte Ergebnis. Es gibt jedoch Fälle, die mich nun vor ein neues Problem stellen:
Die Suchhilfe DEBIT beispielsweise dumpt schlicht und einfach an der Stelle, an der ich den String zuweisen will (UC_OBJECTS_NOT_CONVERTIBLE).
Mein Code sieht wie folgt aus:
- Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
- p_record TYPE seahlpres
- CHANGING p_kunnr TYPE kna1-kunnr.
- " lokale Daten
- <fs_content> TYPE any.
- " Die Selektionsmethode unserer Einzelsuchhilfe bestimmt die Struktur
- " der Ergebnistabelle. Wir müssen also eine dynamische Struktur des
- " gleichen Typs anlegen und uns dort die Komponente der Kundennumer
- " suchen.
- TRY.
- " dynamische Struktur erzeugen
- CREATE DATA ls_record TYPE (p_shlp-intdescr-selmethod).
- " Datentyp zuweisen
- <fs_content> IS ASSIGNED.
- " Inhalt übertragen
- " Zeiger auf Feld 'Kunde' stellen
- <fs_kunnr> IS ASSIGNED.
- " Kundennummer übertragen
- CATCH cx_sy_create_data_error.
- " Error in data creation.
- GeSHi ©
Gibt es eine Möglichkeit den MOVE so zu ersetzen, dass ich keinen Unicode-Fehler bekomme?
Alternativ: mache ich mir das Leben zu schwer und es gibt vielleicht eine Möglichkeit, die RECORD_TAB viel einfacher zu lesen?
Bin für den Tipp dankbar!