请帮我生成一个唯一的16个字符GUID,我可以将其用作自定义表格中的主键。
我尝试使用GUID_CREATE
和CL_SYSTEM_UUID~CREATE_UUID_X16
,但其导出参数(EV_GUID_16
)返回32个字符(字母数字十六进制值),我无法将其分配给我的16个字符变量。
如何将16个长度(32个字符)的原始文本转换为16个字符的字符串,我可以将其用作主键?
答案 0 :(得分:4)
您提到的方法确实创建了一个16字节的GUID。由于无法“本机”显示,因此将其转换为十六进制表示法,每个字节自然会使用两个字符,因此为32个字符。你可能不会只使用16个字符(而不是字节)获得任何独特的东西 - 这是一个巨大的差异!) - 如果可能的话,将主键扩大到32个字符。
答案 1 :(得分:1)
尝试将透明表的主键类型更改为RAW16。这应该可以解决你的问题。
答案 2 :(得分:1)
已经提到了GUID_CREATE。获得RAW格式的GUID后,可以使用GUID_CONVERT将其移动为CHAR格式。我不建议在主键中使用RAW,并建议仅使用GUID_32(字符格式)。
答案 3 :(得分:0)
如果您想要一个独特的ID,请创建您自己的' Z ...'具有事务SNUM
的数字范围对象。
将Number Length Domain
设置为NUM16或符合您要求的任何域。
保存并返回到事务SNUM
主屏幕。从那里,保持间隔:ex 01从1到999999 ...并保存。要传输新的间隔值,请从菜单中选择传输选项。
在Abap中,获取一个唯一的ID调用函数NUMBER_GET_NEXT
,如下所示:
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr = **'01' " << put your number interval here <<**
object = **'Z.....' " << put your number range name here <<**
IMPORTING
number = e_uniqueid
EXCEPTIONS
interval_not_found = 1
number_range_not_intern = 2
object_not_found = 3
quantity_is_0 = 4
quantity_is_not_1 = 5
interval_overflow = 6
buffer_overflow = 7
OTHERS = 8.
答案 4 :(得分:-2)
我们可以使用FM'CRR_GET_RANDOM_STRING'生成16个字符的唯一ID。
答案 5 :(得分:-3)
如果您需要一个唯一的16 char id
,也可以使用模块函数“GENERAL_GET_RANDOM_STRING”