Генерировать случайный идентификатор GUID

#primary-key #guid #abap

#первичный ключ #идентификатор guid #abap

Вопрос:

Я хочу сгенерировать случайное UUID значение , подобное в Java with UUID.randomUUID() .

Я придумал эту функцию GUID_GENERATE и использовал ее следующим образом

     DO 5 TIMES.
       CALL FUNCTION 'GUID_CREATE'
        IMPORTING
         ev_guid_16 = ev_guid_16
         ev_guid_22 = ev_guid_22
         ev_guid_32 = ev_guid_32.

       WRITE: /, ev_guid_16, ev_guid_22, ev_guid_32.
    ENDDO.
  

Результат этой программы всегда один и тот же GUID . Мне нужен новый случайный ответ на каждый запрос.

Я хочу использовать его в качестве первичного ключа в таблице базы данных. Этот ключ также будет передан через веб-службу Java-приложению и пользователю в качестве идентификатора.

У вас есть какие-нибудь идеи, как я могу генерировать случайные UUID/GUID ABAP данные?

Ответ №1:

Прежде всего, вы используете функциональный модуль, который устарел. В комментарии в начале исходного кода указано, что.

 *"----------------------------------------------------------------------
* NOW this function has been replaced, see note 935047      "BINK215094
* 28.6.2006 The function module has been switched to the new UUID methods
*           which exist in the class cl_system_uuid
*           - due to compatibility reasons we catch the exceptions
*           - sy-subrc not touched manually
*             (sy-subrc was set in case of an error when calling the former
*             'RFCControl' kernel-call, but it wasn't evaluated and finally
*             overwritten when leaving this function)
*"----------------------------------------------------------------------
  

Пожалуйста, используйте класс CL_SYSTEM_UUID и следующие методы:

 IF_SYSTEM_UUID_STATIC~CREATE_UUID_X16
IF_SYSTEM_UUID_STATIC~CREATE_UUID_C22
IF_SYSTEM_UUID_STATIC~CREATE_UUID_C26
IF_SYSTEM_UUID_STATIC~CREATE_UUID_C32
  

Комментарии:

1. Спасибо за подсказку. Я попробую их и сообщу, работают ли они. Если это так, я думаю, вы заработали зеленую стрелку 🙂

Ответ №2:

Вы абсолютно уверены, что созданный GUID всегда один и тот же? Потому что этого не должно происходить. Обратите внимание, что разница между ними может составлять всего один символ, когда вы генерируете их внутри быстрого цикла.

Комментарии:

1. Это был один единственный символ… Глупо! Спасибо за подсказку!