Application Log und Unicode
Im Application Log ist es möglich, an eine Meldung oder an einen Protokollkopf einen sogenannten Kontext zu heften. Dieser Kontext besteht aus dem Namen einer (flachen!) DDIC-Struktur und deren Inhalt, der in einem CHAR255-Container gehalten wird.
Beispiel
Der Kontext ist eine DDIC-Struktur mit dem Namen 'MY_STRUC', welche die Felder CARRID, CONNID und FLDATE enthält:
Syntax
DATA:
l_s_msg TYPE bal_s_msg,
l_context TYPE MY_STRUC.
* fill message type, id and message variables
....
* define context information
l_context-carrid = 'ABC'.
l_context-connid = 15.
l_context-fldate = sy-datum.
l_s_msg-context-tabname = 'MY_STRUC'.
l_s_msg-context-value = l_context.
* add this message to log
CALL FUNCTION 'BAL_LOG_MSG_ADD'
EXPORTING
i_s_msg = l_s_msg
EXCEPTIONS
OTHERS = 0.
Hinweis
Das Statement l_s_msg-context-value = l_context.
führt in Unicode-Systemen zu Problemen, wenn die DDIC-Struktur Felder enthält, die nicht character-artig sind (z.B. das Feld CONNID als INTEGER).
Grundsätzlich hätte für die Unicode-Umstellung die Möglichkeit bestanden, diese Container-Mechanik komplett umzustellen (z.B. durch Einführung von REF TO DATA als Referenz auf beliebige Kontext-Informationen). Da aber der überwiegende Teil der Anwendungen nur mit character-artigen Kontexten operiert, wurde eine derartige (aufwendige) Umstellung verworfen. Statt dessen werden hier zwei Möglichkeiten aufgezeigt, wie im Problemfall verfahren werden kann:
Nur character-artige Felder in der DDIC-Struktur verwenden. Dieses Vorgehen wird empfohlen.
Hinweis
Diese Möglichkeit kann z.B. dann verwendet werden, wenn im Kontext INTEGERs verwendet werden. Eine Umstellung auf NUMC ist ohne großen Aufwand möglich, das Coding kann normalerweise unverändert bleiben, weil der Move eines Integers in ein NUMC-Feld automatisch konvertiert.
Protokolle, die in alten Releases geschrieben wurden, sind weiterhin lesbar. Die alten Kontext-Daten werden beim Lesen automatisch in die neue Struktur konvertiert.
Arbeiten mit ASSIGN .. CASTING.
Hinweis
Falls Lösung 1 nicht anwendbar ist und unbedingt nicht-character-artige Felder verwendet werden müssen, kann folgendermaßen verfahren werden:
Das Statement l_s_msg-context-value = l_context. kann ersetzt werden durch:
Syntax
FIELD-SYMBOLS:
<l_context> TYPE c.
ASSIGN l_context TO <l_context> CASTING.
l_s_msg-context-value = <l_context>.Das Lesen/Interpretieren der Kontext-Daten erfolgt im Application Log weiterhin korrekt.