Definición de dominios y elementos de datos

Objectives

After completing this lesson, you will be able to:
  • Describa el uso de elementos de datos y dominios al definir tablas de base de datos.
  • Crear dominios.
  • Crear elementos de datos.

Tablas de base de datos, elementos de datos y dominios

Tablas de base de datos en el Dictionary ABAP

Reproduzca el vídeo para obtener información sobre las tablas de base de datos en el Dictionary ABAP.

Se trata de una definición de tabla de base de datos en el Dictionary ABAP. Puede ver el nombre de la tabla de BD después de la palabra clave define table y los nombres de los campos de tabla a la izquierda de los dos puntos (:). Encontrará los tipos de campo a la derecha de los dos puntos.

En este ejemplo, el primer campo (cliente de campo) se tipifica directamente con un tipo predefinido (tipo abap.clnt). Esto es posible en general, pero solo debería utilizarlo para campos puramente técnicos como el campo de mandante. Para todos los demás campos, se recomienda hacer referencia a un elemento de datos para que los campos también estén vinculados a la información semántica.

Un elemento de datos especifica las propiedades técnicas y semánticas de un campo de tabla. Cuando visualiza un elemento de datos, encontrará la definición de tipo técnico a la izquierda y la información semántica (etiquetas de campo) a la derecha.

En este ejemplo, el tipo técnico se define mediante una referencia a un dominio. Este es el enfoque recomendado. El tipo de datos básico CHAR y la longitud 3 no se almacenan en el propio elemento de datos, sino que provienen del dominio referenciado. Se muestran aquí como referencia y para ahorrarle el problema de navegar al dominio.

Las etiquetas de campo son relevantes cuando los campos basados en este elemento de datos son visibles en la interfaz de usuario (IU). Esto es válido para las tecnologías de IU ABAP clásicas como Pantallas (también conocidas como Dynpros) y Web Dynpro, así como para técnicas de programación modernas como el modelo de programación de aplicaciones ABAP RESTful. La diferencia principal entre los cuatro denominadores de campo de la derecha es su longitud máxima respectiva.

Nota

Las etiquetas de campo están sujetas a traducción. El desarrollador los actualiza en el idioma original del objeto. Desde allí, se pueden traducir a otros idiomas.

El objetivo principal de un dominio es especificar las propiedades técnicas de un campo de tabla. El dominio de este ejemplo utiliza el tipo técnico CHAR y fija la longitud en 3.

Otras opciones le permiten restringir el rango de valores de los campos. Trataremos esto en detalle en la siguiente sección.

Crear un nuevo objeto de diccionario

Reproduzca el video para aprender a crear un nuevo dominio, elemento de datos o cualquier otro objeto de diccionario.

Cómo crear un dominio

Reproduzca el vídeo para ver cómo crear un dominio.

Tipos predefinidos en Dictionary ABAP

Al crear un dominio, debe seleccionar uno de los diferentes tipos de diccionario predefinidos. Algunos de estos tipos están pensados para uso general, otros vienen con un propósito especial y semántico.

General

Algunos tipos de diccionario para uso general son CHAR, INT4, FLTP y DEC, que corresponden directamente a los tipos integrados ABAP C, I, F y P.

Carácter con semántica especial

Los campos con los tipos de diccionario NUMC, CLNT y LANG son similares a caracteres en la base de datos, pero tienen una semántica especial.

  • Los campos del tipo NUMC solo pueden contener dígitos y algunos frameworks ABAP insertarán automáticamente ceros a la izquierda.

  • Un campo clave del tipo CLNT en una tabla de base de datos se trata automáticamente como campo de cliente. Por defecto, cualquier acceso a esta tabla está restringido al mandante de inicio de sesión del usuario actual.
  • Un campo clave del tipo LANG en una tabla de base de datos se identifica como clave de idioma. Las claves de idioma son importantes en las tablas que contienen texto traducible (llamadas tablas de texto).
Moneda y cantidad

El Dictionary ABAP conoce tipos dedicados para campos de importe y cantidades. Técnicamente, los tipos predefinidos CURR y QUAN son idénticos al tipo DEC y, al igual que DEC, se asignan al tipo ABAP P. Pero como verá más adelante, debe vincular cualquier campo de tabla del tipo CURR a un campo de código de moneda. Del mismo modo, un campo del tipo QUAN requiere un enlace a un campo con una unidad de medida.

Los tipos predefinidos CUKY y UNIT se utilizan para identificar un campo como campo de código de moneda o campo de unidad de medida. Técnicamente, son solo campos de caracteres con una longitud fija de 5 para códigos de moneda y una longitud de 2 o 3 para campos de unidad de medida.

Fecha y hora

En ABAP, la información de fecha y hora se procesa como una secuencia de 8 dígitos (fecha) y 6 dígitos (hora). Durante mucho tiempo, el diccionario solo conocía los tipos predefinidos DATS y TIMS. Con estos tipos, los campos de la base de datos son alfanuméricos, con el mismo formato que en ABAP. Con los nuevos tipos DATN y TIMN, el framework puede crear los campos en la base de datos con formatos específicos de base de datos optimizados. Tenga en cuenta que esto no afecta al código ABAP. Los tipos de Dictionary antiguos y nuevos se asignan a los mismos tipos ABAP predefinidos.

Al definir un dominio con cualquiera de los tipos DEC, QUAN y CURR, debe especificar una longitud y el número de decimales. Esto es similar al uso del tipo P en ABAP. Pero hay una gran diferencia.

En ABAP, el número n en TYPE P LENGTH n es el número de bytes. A partir de ahí, el número de dígitos se deriva con la fórmula: 2 * n - 1. En el Dictionary ABAP, especifique directamente el número de dígitos.

En ABAP, un objeto de datos del tipo P siempre ocupa un número entero de bytes. Esto siempre da como resultado un número impar de dígitos. Si el tipo de Dictionary ABAP utiliza DEC, QUAN o CURR con un número par de longitud, los objetos de datos ABAP se actualizarán al siguiente número entero de bytes.

Veamos un ejemplo. El elemento de datos /DMO/FLIGHT_PRICE es del tipo CURR con longitud = 16. Para almacenar los 16 dígitos y un signo, se requieren 8 ½ bytes. El precio variable ABAP se tipifica con el elemento de datos /DMO/FLIGHT_PRICE. Como puede ver en la visualización del depurador, su longitud ABAP es 9, porque no es posible ocupar 8 ½ bytes. Esto da como resultado que técnicamente es posible asignar valores de PRECIO con 17 dígitos.

Consejo

Al definir dominios del tipo DEC, QUAN o CURR, busque valores impares de longitud para evitar inconsistencias y desperdicios de memoria.

Creación de elemento de datos

Elementos de datos - Definición del tipo técnico

Reproduzca el vídeo para obtener información sobre la definición del tipo técnico de un elemento de datos.

Hay dos lugares donde se actualizan textos en un elemento de datos: tres etiquetas y una cabecera en la sección Etiquetas de campo y una descripción en la vista Propiedades, que normalmente se muestra en la ficha debajo del editor.

Las etiquetas y la cabecera vienen con longitudes máximas. Cuando crea un nuevo elemento de datos, el editor prefija estas longitudes a valores sugeridos. Se recomienda mantener las longitudes sugeridas. Varios frameworks, en su mayoría técnicas de IU, utilizan las etiquetas y el encabezado para proporcionar metadatos semánticos para los campos.

Como todos los demás objetos de desarrollo ABAP, los elementos de datos también tienen una descripción. Tenga en cuenta que esta descripción no está pensada para el usuario final en primer lugar. Está ahí para proporcionar información semántica adicional a los desarrolladores que analizan el código existente o consideran reutilizar el elemento de datos.

Al actualizar los textos de un elemento de datos, es importante que su idioma de trabajo sea el mismo que el idioma original del objeto. Encontrará el idioma original en la vista Propiedades. Cuando crea un nuevo elemento de datos, el idioma original se fija automáticamente en su idioma de trabajo.

Nota

Los textos de un elemento de datos están sujetos a traducción. Puede encontrar detalles sobre el mecanismo de traducción en la documentación ABAP o en el curso Programación ABAP intermedia.

Cómo crear un nuevo elemento de datos con un dominio nuevo

Reproduzca el vídeo para ver cómo crear un nuevo elemento de datos con un nuevo dominio.

Crear dominios y elementos de datos

Desea crear su propio modelo de datos. En este ejercicio, empiece definiendo dominios y elementos de datos para números de empleados y datos de salario anual.

Modelo:

  • n.a.

Solución:

  • /LRN/AMOUNT (dominio)
  • /LRN/EMPLOYEE_ID (dominio)
  • /LRN/ANNUAL_SALARY (elemento de datos)
  • /LRN/EMPLOYEE_ID (elementos de datos)

Tarea 1: Crear un dominio

Cree un dominio (nombre sugerido: Z##_AMOUNT, donde ## es su número de grupo). Utilice el tipo de diccionario adecuado para los valores de importe. Fije la longitud en 15 y el número de decimales en 2.

Pasos

  1. Cree un nuevo dominio Z##_AMOUNT.

    1. En la vista Explorador de proyectos, haga clic con el botón derecho en el paquete para abrir el menú contextual.

    2. Seleccione Nuevo→Otro objeto de ABAP Repository.

    3. En la ventana de diálogo que se muestra, introduzca doma en el campo de búsqueda.

    4. Seleccione Dominio y Siguiente.

    5. Confirme el paquete, introduzca el nombre Z##_AMOUNT y la descripción Importe, y seleccione Siguiente.

    6. Asigne el nuevo objeto a una orden de transporte y seleccione Finalizar.

  2. Fije el tipo de datos del dominio en CURR con una longitud de 15 y 2 decimales.

    1. Sitúe el cursor en el campo Tipo de datos y pulse Ctrl + Espacio.

    2. En la lista de sugerencias, seleccione CURR y pulse Intro.

      Resultado

      Aparecen dos campos de entrada: Longitud y Decimales.
    3. Introduzca 15 en el campo Longitud y 2 en el campo Decimales.

  3. Active el dominio.

    1. Pulse Ctrl + F3 para activar el objeto de desarrollo.

Tarea 2: Crear elemento de datos

Cree un elemento de datos basado en su dominio (nombre sugerido: Z##_ANNUAL_SALARY, donde ## es su número de grupo).

Pasos

  1. Cree un nuevo elemento de datos Z##_ANNUAL_SALARY.

    1. En la vista Explorador de proyectos, expanda el paquete y haga clic con el botón derecho en Diccionario para abrir el menú contextual.

    2. Seleccione Nuevo→elemento de datos.

    3. Confirme el paquete, introduzca el nombre Z##_ANNUAL_SALARY, la descripción Salario anual y seleccione Siguiente.

    4. Asigne el nuevo objeto a una orden de transporte y seleccione Finalizar.

  2. Deje que el elemento de datos utilice el dominio Z##_AMOUNT.

    1. En Categoría, mantenga el valor sugerido Dominio.

    2. En Nombre de tipo, introduzca Z##, donde ## es su número de grupo y pulse Ctrl + Espacio.

    3. En la lista de sugerencias, seleccione Z##_AMOUNT.

  3. Actualice los denominadores de campo y active el elemento de datos.

    1. En la sección Etiquetas de campo, introduzca los siguientes datos:

      CampoValor
      BreveSueldo
      MedioSalario anual
      LargoSalario anual
      CabeceraSalario anual
    2. Pulse Ctrl + F3 para activar el elemento de datos.

Tarea 3: Crear elemento de datos y dominio

Cree un elemento de datos para el número de empleado (nombre sugerido: Z##_EMPLOYEE_ID, donde ## es su número de grupo). Utilice la navegación hacia delante para crear el dominio. Asigne al dominio el mismo nombre que el elemento de datos. Asegúrese de que el número de empleado tenga 6 caracteres y que conste solo de dígitos.

Pasos

  1. Cree un nuevo elemento de datos Z##_EMPLOYEE_ID.

    1. En la vista Explorador de proyectos, expanda el paquete y haga clic con el botón derecho en Diccionario para abrir el menú contextual.

    2. Seleccione Nuevo→elemento de datos.

    3. Confirme el paquete, introduzca el nombre Z##_EMPLOYEE_ID, la descripción Número de empleado y seleccione Siguiente.

    4. Asigne el nuevo objeto a una orden de transporte y seleccione Finalizar.

  2. Utilice la navegación hacia delante para crear un nuevo dominio para este elemento de datos. Utilice el mismo nombre que para el elemento de datos.

    1. En el campo Categoría, conserve el valor sugerido Dominio.

    2. En el campo Nombre de tipo, introduzca Z##_EMPLOYEE_ID.

    3. Abra la vista Problemas debajo del editor.

      Resultado

      Ahora debería ver el mensaje de error Ningún dominio activo Z##_EMPLOYEE_ID.
    4. Seleccione la etiqueta Nombre de tipo para crear el dominio nuevo.

    5. En la ventana de diálogo, introduzca su paquete, confirme el nombre del dominio e introduzca una descripción (valor sugerido: Número de empleado). A continuación, seleccione Siguiente.

  3. Fije el tipo de dominio en NUMC y la longitud en 6.

    1. En el campo Tipo de datos, introduzca NUMC y en el campo Longitud, 6.

  4. Active el dominio y vuelva al elemento de datos.

    1. Pulse Ctrl + F3 para activar el nuevo dominio.

    2. Seleccione la etiqueta con el elemento de datos.

  5. Actualice los denominadores de campo para el elemento de datos Z##_EMPLOYEE_ID y active el elemento de datos.

    1. En la sección Etiquetas de campo, introduzca los siguientes datos:

      CampoValor
      BreveEmpleado
      MedioNº empleado
      LargoNúmero de empleado
      CabeceraNúmero de empleado
    2. Pulse Ctrl + F3 para activar el elemento de datos.