La generación de 16 caracteres GUID mediante ABAP de SAP módulo de funciones o Clases

Por favor me ayude en la generación de un único de 16 caracteres GUID que se podría utilizar como clave principal en mi tabla personalizada.

He probado con GUID_CREATE y CL_SYSTEM_UUID~CREATE_UUID_X16 pero su exportación de parámetros(EV_GUID_16) están regresando de 32 caracteres(alfanuméricos hexdecimal valor) que no voy a ceder a mi 16 caracteres variable.

¿Cómo puedo convertir de 16 longitud(32 caracteres) texto sin formato de 16 caracteres de la cadena que se podría utilizar como una clave principal?

InformationsquelleAutor user2999223 | 2013-11-16

6 Kommentare

  1. 4

    Los métodos mencionados hacen crear un GUID de 16 bytes. Ya que este «no se puede mostrar de forma nativa», se convierte en una notación hexadecimal que, naturalmente, se utilizan dos caracteres por byte, por lo tanto el de 32 caracteres. Usted probablemente no va a obtener nada de exclusivo uso de sólo 16 caracteres (no bytes – hay una gran diferencia!) – si es posible, ampliar su clave principal de 32 caracteres.

    • Yo era capaz de generar un 16 caracteres identificador único mediante el módulo de la función ‘CRR_GET_RANDOM_STRING’. Esto se ha resuelto mi requerimiento.
    • Esta identificación no será única, es sólo al azar o para ser más exactos, pseudoaleatoria.
  2. 1

    Pruebe a cambiar el tipo de clave principal de la tabla transparente para RAW16. Esto debería resolver su problema.

    • El uso de RAW campos de la clave principal es generalmente una mala idea – por ejemplo, usted no puede especificar los registros individuales cuando el transporte de las entradas de la tabla. (Me gustaría que el Objeto de los Servicios de los chicos había pensado en esto cuando impusieron su OS_GUIDs en nosotros…)
    • Hmmm, eso es interesante, porque, por ejemplo, un estándar tabla de SAP BCA_CONTRACT en SAP Banking Services contiene GUID como RAW 16, que es parte de la clave primaria de esta tabla. Por otra parte, esta clave se utiliza en otras tablas como principal y clave externa así.
    • No tengo una banca de instalación disponible, pero sospecho que es uno de los OS_GUID campos. Ellos hacen el trabajo bien, pero una gran cantidad de herramientas estándar (mantenimiento de cuadros de diálogo, transporte, comparación de sistema, …) podría producir resultados inesperados o deje de funcionar por completo tan pronto como materia prima GUID es parte de la tabla. He aprendido de la manera difícil, así que pensé en dejar un heads-up…
    • Creo que sé de qué estás hablando. Vi a este problema en la herramienta de prueba de SE37. Esta es la razón por la Bapi que se ocupan de los datos proporcionados en las tablas que he mencionado, tienen el GUID especificado como CHAR 32. No se puede decir mucho sobre el mantenimiento vistas como todos los de esta tabla son datos de la aplicación. La que genera la pantalla de selección de SE16 sin embargo parece estar lidiando bien con este tipo de elemento de datos que contiene CRUDO tipo (el campo se convierte CHAR 32).
    • BTW: la función BANK_DISTRIBUTED_ID_CREATE se utiliza para crear Guid en la SAVIA de los sistemas bancarios porque cl_system_uuid=>create_uuid_x16_static( ) no produce homogénea, es decir uniformemente Guid. Esta una de las principales debilidades. La singularidad de GUID, que no se cuestiona, Pero cuando NO está distribuida uniformemente es una MUY MALA campo de índice. Esta es una debilidad crítica en alto volumen tablas. (por ejemplo, la banca)
    • Estado allí, hecho eso. En uno de los proyecto que tomó parte en, algún genio implementado el procesamiento en paralelo mediante BUT000-GUID para la división. Nuestro migrado socios de negocios correr durante horas después en un proceso, porque para los demás 0 de los casos fueron seleccionados.

  3. 1

    GUID_CREATE ya se ha mencionado. Una vez que usted tiene un GUID en formato RAW, puede utilizar GUID_CONVERT para moverlo a formato CHAR. Yo no recomendaría el uso de RAW en la clave principal y sugiere el uso de sólo GUID_32 (formato char) en su lugar.

  4. 0

    Si quieres una Id única de crear su propia ‘Z…’ rango de número de objeto de transacción SNUM.
    Conjunto de Number Length Domain a NUM16 o cualquier dominio que satisfaga sus necesidades.
    Guardar y volver a la transacción SNUM pantalla principal. A partir de ahí, mantener los intervalos : ex 01 de 1 a 999999… y guardar. Para el transporte de su nuevo intervalos valores, seleccione la opción de transporte desde el menú.

    En Abap , para obtener un único ID de llamada la función de NUMBER_GET_NEXT de la siguiente manera:

    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.
    
    • Sólo asegúrese de desactivar el «año de la bandera» para evitar que el número comienza con 1 nuevo el próximo año. Mantener el almacenamiento en búfer habilitado para aumentar el rendimiento.
    • OP está pidiendo específicamente acerca de Guid, esto no contesta la pregunta.
  5. -2

    Podemos utilizar la FM ‘CRR_GET_RANDOM_STRING’ para generar un 16 caracteres identificador único.

    • Alegre y buena, pero este módulo de función no está disponible en cada sistema SAP. En la mía por ejemplo no lo es.
    • Yo no tengo ninguna posibilidad de ver el código de la FM, pero como en el caso de PATRY respuesta, dudo mucho que esta cadena en única, es sólo al azar. Así que en realidad si no quieres tener sorpresas cuando el código llega a la producción, por favor, cambie a RAW 16 clave en su mesa y generar el UUID por CL_SYSTEM_UUID~CREATE_UUID_X16. Usted puede también cambiar a CHAR 32 como vwegert sugerido y, a continuación, utilizar CL_SYSTEM_UUID~CREATE_UUID_C32.
  6. -3

    El módulo de función «GENERAL_GET_RANDOM_STRING» también puede ser utilizado, si usted necesita un único 16 char id

    • La pregunta es si esta cadena aleatoria proporciona al menos una singularidad como GUID sí mismo.
    • Un número aleatorio no está garantizada para ser único. Esta no es una solución, sólo una falsa solución (lo siento).
    • es cierto, así que nada a ser soryy acerca de. Incluso si la probabilidad de tener 2 16char cadena idéntica es bajo, todavía existe.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea