我们通常可以创建UUID,将其作为标识来确定具体某一条数据,在创建UUID的时候,会存在很多写法,在这里我列举一些常见的用法已经可能遇到的问题。
1.S/4 带特殊字符的UUID
cl_system_uuid=>if_system_uuid_static~create_uuid_c22()
在S/4版本中,使用该方法,生成的UUID可能会带特殊字符,当使用该生成的带有特殊字符的UUID作为查询条件,查询数据时,会查询不到
TYPES : BEGIN OF ty_kunnr ,
kunnr TYPE bseg-kunnr,
uuid TYPE char26,
END OF ty_kunnr .
DATA : gt_kunnr TYPE TABLE OF ty_kunnr.
LOOP AT gt_kunnr ASSIGNING FIELD-SYMBOL(<fs_kunnr>) .
cl_system_uuid=>if_system_uuid_static~create_uuid_c22( RECEIVING uuid = <fs_kunnr>-uuid ).
ENDLOOP .
SELECT SINGLE COUNT(*) FROM tbtco WHERE jobname = ls_kunnr-uuid
这里生成一条"9z69Bsyb7kwb}TwvAWmDNm"的UUID
当使用这个UUID查询该条数据时,会神奇的发现,无法查询到相应数据
DATA lv_uuid TYPE char26.
cl_system_uuid=>if_system_uuid_static~create_uuid_c22( RECEIVING uuid = lv_uuid ).
WRITE:lv_uuid.
2.S/4 不带特殊字符的UUID
TYPES : BEGIN OF ty_kunnr ,
kunnr TYPE bseg-kunnr,
uuid TYPE char26,
END OF ty_kunnr .
DATA : gt_kunnr TYPE TABLE OF ty_kunnr.
DATA lo_uuid TYPE REF TO if_system_uuid.
DATA lv_uuid_x16 TYPE sysuuid_x16. "
DATA lv_uuid_c26 TYPE sysuuid_c26.
LOOP AT gt_kunnr ASSIGNING FIELD-SYMBOL(<fs_kunnr>) .
TRY.
lo_uuid = cl_uuid_factory=>create_system_uuid( ).
lv_uuid_x16 = lo_uuid->create_uuid_x16( ).
lo_uuid->convert_uuid_x16(
EXPORTING
uuid = lv_uuid_x16
IMPORTING
uuid_c26 = lv_uuid_c26 ).
CATCH cx_uuid_error.
ENDTRY.
<fs_kunnr>-uuid = lv_uuid_c26 .
ENDLOOP .
SELECT SINGLE COUNT(*) FROM tbtco WHERE jobname = ls_kunnr-uuid
使用这种方法生成的UUID是不带特殊字符的,可以用来作为查询语句中的筛选条件
DATA lo_uuid TYPE REF TO if_system_uuid.
DATA lv_uuid_x16 TYPE sysuuid_x16. "
DATA lv_uuid_c26 TYPE sysuuid_c26.
lo_uuid = cl_uuid_factory=>create_system_uuid( ).
lv_uuid_x16 = lo_uuid->create_uuid_x16( ).
lo_uuid->convert_uuid_x16(
EXPORTING
uuid = lv_uuid_x16
IMPORTING
uuid_c26 = lv_uuid_c26 ).
WRITE:lv_uuid_c26.
3.GUID_CREATE
在ECC版本中可以调用函数"GUID_CREATE"来生成
DATA lv_guid TYPE sysuuid_x16.
CALL FUNCTION 'GUID_CREATE'
IMPORTING
ev_guid_16 = lv_guid .
4.create_uuid_x16( )
ECC版本中可以使用cl_uuid_factory类中的方法,使用该方法生成的UUID也是不带特殊字符的
cl_uuid_factory=>create_system_uuid( )->create_uuid_x16( )
DATA lv_guid TYPE sysuuid_x16.
lv_guid = cl_uuid_factory=>create_system_uuid( )->create_uuid_x16( ).
5.create_uuid_x16_static( )
ECC版本中可以使用cl_system_uuid类中的方法
cl_system_uuid=>create_uuid_x16_static( )
DATA lv_guid TYPE sysuuid_x16.
lv_guid = cl_system_uuid=>create_uuid_x16_static( ).