问题
我需要将一些值放入带单位的Z表中,这些值不在SAP标准中(微米(。
编辑:我说的是"μm"本身,而不是它的意义——我制作了一个表,它有"单位"字段,将"μm’放在该字段中,还有"值"字段,它们是int,厚度大约为30。
因此,我可以用它来报告类似的显示,"这种特定材料的厚度为30μm"。
问题
我从PI那里得到了这些数据,PI从遗留系统(可能是基于unicode的(发送这些值。我必须使用ABAP将这些数据放到Z表中。
-
设置字段类型、字符长度2(像um,而不是μm(安全吗?
-
如何对特殊值执行比较逻辑[ex(如果f1="μm"。]
如有任何帮助,我们将不胜感激!
适当长度的答案在内置类字符类型的文档中得到回答。
- 在为类似字符的类型指定长度时,请注意字符的长度(以字节为单位(取决于所使用的字符表示。对于ABAP编程语言使用的字符表示UCS-2,字符的长度为两个字节
关于UCS-2:
UCS-2
两字节Unicode字符表示。在这种表示中,所有字符都由两个字节(16位(表示。在UCS-2中,可以对65536个不同的字符进行编码,这些字符对应于Unicode标准的所谓基本多语言平面(BMP(。与UTF-16相比,UCS-2不支持来自代理区域的字符。ABAP编程语言支持Unicode系统中的UCS-2,因此没有代理。
DATA(lv_x) = '𓀀'. "C length 2
DATA(lv_y) = 'μ'. "C length 1
由于μ
存在于UC2字符集(00B5 MICRO SIGN(中,因此它将在ABAP中占据一个字符,并且可以这样存储和比较
您可以更改数据库表的字符表示形式,但ABAP从中读取后,它将被转换为UCS-2。
读取内容为μm
的UTF-8文件效果良好
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
有关通过RFC编码的更多信息,请参阅根据SAP标准的转换-使用远程函数调用的通信。