Problem
I need to put some values into Z-table with unit, which are not in SAP standard(micron).
EDIT : I'm talking about 'μm' itself, not it's meaning - I made table which have 'unit' field, which are putting 'μm' inside that field, and 'value' field, which are int which have it's thickness - like, 30.
So I can use it to Report - like showing, 'this specific material have 30μm thickness'.
Question
I got that data from PI - which are sending that values from legacy system (might be unicode-based). I have to put that data, using ABAP, to my Z-table.
Do I safe to set field type, Char length 2(like um, not μm)?
How can I do comparision logic for special values [ex) If f1 = 'μm'.]
Any help will be appreciated!
The answer of the right length is answered in the documentation of Built-In Character-Like Types.
- When specifying lengths for character-like types, note that the length of a character in bytes depends on the character representation used. For the character representation UCS-2 used by the ABAP programming language, the length of a character is two bytes.
Regarding UCS-2:
UCS-2
Two byte Unicode character representation. In this representation, all characters are represented by two bytes (16 bits). In UCS-2, 65536 different characters can be encoded, that correspond to the so called Basic Multilingual Plane (BMP) of the Unicode standard. In contrast to UTF-16, UCS-2 does not support characters from the surrogate area. The ABAP programming language supports UCS-2 in Unicode systems and therefore no surrogates.
DATA(lv_x) = '𓀀'. "C length 2
DATA(lv_y) = 'μ'. "C length 1
Since μ
is present in the UC2-charset (00B5 MICRO SIGN), it will occupy one character in ABAP and can be stored and compared as such.
You might be able to change the character representation of a database table, but as soon as ABAP reads from it, it will be converted to UCS-2.
Reading a UTF-8 File with the content μm
works just fine
cl_gui_frontend_services=>file_open_dialog( CHANGING file_table = lt_files
rc = lv_rc
user_action = lv_action ).
IF lv_action <> cl_gui_frontend_services=>action_ok OR lv_rc <> 1.
RETURN.
ENDIF.
DATA lt_tab TYPE STANDARD TABLE OF string.
cl_gui_frontend_services=>gui_upload( EXPORTING filename = |{ lt_files[ 1 ]-filename }|
filetype = 'ASC'
codepage = '4110'
CHANGING data_tab = lt_tab ).
DATA(lv_text) = REDUCE string( INIT s = `` FOR <lv_line> IN lt_tab NEXT s = s && <lv_line> ).
DATA(lv_unit) = CONV zmy_units-unit( lv_text ).
INSERT zmy_units FROM @( VALUE zmy_units(
unit = lv_text
description = 'Test' ) ).
SELECT SINGLE * FROM zmy_units WHERE unit = 'μm' INTO @DATA(ls_unit).
WRITE ls_unit-unit.
NEW-LINE.
WRITE |{ xsdbool( ls_unit-unit = 'μm' ) }|.
* Result
* μm
* X
More information regarding encoding via RFC can be found in Conversions in Accordance with the SAP Standard - Communication Using Remote Function Calls.