Llamar funciones integradas en vistas CDS

Objectives

After completing this lesson, you will be able to:
  • Utilice funciones integradas en ABAP CDS.
  • Utilice variables de sesión.

Funciones integradas en CDS - Resumen

Funciones integradas en ABAP SQL

Ahora que ha aprendido que puede utilizar expresiones en ABAP SQL y ABAP CDS exactamente de la misma manera, ¿qué pasa con las funciones integradas? ¿Puede utilizarlos también en ABAP CDS?

Echemos un vistazo más de cerca.

Funciones numéricas

Para todas las funciones numéricas, la respuesta es "sí". Todos ellos también se admiten en ABAP CDS.

Procesamiento de strings

También se admiten la mayoría de las funciones de procesamiento de cadenas. Hay algunas que solo están disponibles en ABAP SQL, la mayoría relacionadas con expresiones regulares. Encontrará una lista detallada en la documentación de palabras clave ABAP.

Procesamiento de fecha y hora

La mayoría de las restricciones existen en el área de funciones de procesamiento de datos y tiempo. Aquí, las funciones genéricas (IS_VALID( ), ADD_DAYS( ), DAYS_BETWEEN( ), etc.) solo están disponibles en ABAP SQL. En ABAP CDS, debe utilizar las variantes específicas de tipo, es decir, las funciones correspondientes que empiezan por DATS, DATN, TIMS, TSTMP, etc.

Además, las funciones para extraer información de un campo de fecha u hora no se admiten en ABAP CDS, es decir, no puede utilizar las funciones WEEKDAY( ), EXTRACT_MONTH( ), etc. en ABAP CDS. Consulte la documentación de palabras clave ABAP para obtener una lista completa.

Veamos algunos ejemplos.

Funciones de conversión en ABAP CDS

Ejemplo: conversión de moneda en ABAP SQL y ABAP CDS

Reproduzca el vídeo para ver un ejemplo de conversión de moneda en ABAP SQL y ABAP CDS.

Algunas funciones de conversión han nombrado parámetros en ABAP SQL, pero no nombres de parámetro en ABAP CDS. Como consecuencia, los parámetros que son opcionales en ABAP SQL se convierten en obligatorios en ABAP CDS.

Tomemos como ejemplo la función de conversión de cronomarcador TSTMP_TO_DATS(). La función tiene cuatro parámetros, de los cuales dos son obligatorios y dos son opcionales en ABAP SQL. En ABAP CDS, los cuatro parámetros son obligatorios y se transfieren sin asignación explícita de parámetros.

Variables de sesión

Dentro de una entidad de vista CDS ABAP, puede utilizar variables de sesión para acceder al valor de los campos del sistema ABAP. El acceso a una variable de sesión comienza con el prefijo $session., seguido del nombre de la variable.

El ejemplo utiliza la variable de sesión system_language en una expresión de filtro y la variable de sesión system_date en la cláusula WHERE. Pero también puede utilizar variables de sesión que casi cualquier otra posición de operando.

Atención

Las variables de sesión solo contienen valores si la solicitud de lectura proviene de un sistema ABAP. En cualquier otra situación, los valores de las variables de sesión no están definidos. Por este motivo, debería preferir los parámetros de entrada para acceder a los campos del sistema ABAP. Consulte la siguiente lección para obtener más detalles.

Actualmente, ABAP CDS ofrece seis variables de sesión integradas. La lista los muestra junto con el campo de sistema relacionado.

Nota

Además de las variables de sesión integradas, también hay variables de sesión de aplicación. Son necesarios para aplicaciones específicas y son establecidos por programas de sistema dedicados. Para obtener más detalles, consulte la documentación de palabras clave ABAP.

Utilizar las funciones integradas en una vista CDS

Desea ampliar su entidad de vista CDS con lógica SQL. Las funciones SQL se utilizan para concatenar el nombre y apellido del asistente del departamento, convertir el salario mensual a una moneda única y calcular la afiliación de la empresa, es decir, el número de días que trabaja un empleado para la empresa.

Modelo:

  • /LRN/C_EMPLOYEE_EXP (Definición de datos)

Solución:

  • /LRN/C_EMPLOYEE_FCT (Definición de datos)

Prerrequisitos

Para este ejercicio, necesita la entidad de vista CDS en la que ha trabajado en el ejercicio anterior (el nombre sugerido era: Z##_C_EmployeeQuery, donde ## es su número de grupo). Si no ha finalizado el ejercicio anterior, cree una copia de la definición de datos /LRN/C_EMPLOYEE_EXP.

Tarea 1: Utilizar una función de cadena

En su entidad de vista CDS para evaluar datos de empleado (el nombre sugerido era: Z##_C_EmployeeQuery, donde ## es su número de grupo), ajuste la definición del elemento de vista AssistantName. Utilice una función de cadena adecuada para concatenar el nombre y el apellido del asistente del departamento, separados por un único espacio.

Pasos

  1. Edite la lista de elementos de su entidad de vista. Comente el elemento de vista que deriva el apellido del asistente de departamento.

    1. Sitúe el cursor en cualquier lugar de la fila de código correspondiente y pulse Ctrl + < para añadir un signo de comentario (//) al principio de la fila.

  2. Después del elemento de vista antiguo, utilice la compleción de código para añadir una llamada de la función SQL CONCATENATE_WITH_SPACE como un nuevo elemento de vista.

    1. En la fila de código // _Department._Assistant.LastName as AssistantName,, coloque el cursor después de los dos puntos y pulse Intro para insertar una nueva fila.

    2. Introduzca con y pulse Ctrl + Espacio para llamar la finalización de código.

    3. En la lista de sugerencias, seleccione concat_with_space(arg1, arg,2, space_cnt) (función) y pulse Mayús + Intro para insertar la firma completa.

      Resultado

      Esto debería insertar el siguiente código:

      Code Snippet
      123
      concat_with_space( arg1, arg2, space_cnt )
  3. Sustituya los marcadores de posición por elementos de vista y literales adecuados.

    1. Ajuste el código de la siguiente manera:

      Code Snippet
      12345
      concat_with_space( _Department._Assistant.FirstName, _Department._Assistant.LastName, 1 )

      Nota

      Insertamos saltos de línea adicionales para aumentar la legibilidad en el material impreso del curso.
  4. Proporcione el mismo nombre de elemento de vista que se ha utilizado para el elemento de vista eliminado (el nombre sugerido era: AssistantName).

    1. Ajuste el código de la siguiente manera:

      Code Snippet
      12345
      concat_with_space( _Department._Assistant.FirstName, _Department._Assistant.LastName, 1 ) as AssistantName,
  5. Active y pruebe la entidad de vista CDS.

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

    2. Pulse F8 para probar la entidad de vista CDS en la herramienta Vista previa de datos.

Tarea 2: Utilizar una función de fecha

En un nuevo elemento de vista (nombre sugerido: CompanyAffiliation), utilice una función de fecha adecuada para calcular la afiliación de la empresa del empleado en días, es decir, el número de días entre la fecha de entrada y hoy. Luego divida el resultado por el número de días por año para calcular la afiliación de la empresa del empleado en años, con una precisión de 1 decimal.

Consejo

La fecha actual está disponible en las variables de sesión $session.user_date y $session.system_date. Para este ejercicio, utilice la fecha actual del sistema.

Para simplificar, ignore la existencia de años bisiestos y asuma que un año tiene 365 días.

Pasos

  1. Edite la lista de elementos de su entidad de vista. Antes de la asociación expuesta, utilice la compleción de código para añadir una llamada de la función SQL DATS_DAYS_BETWEEN como un nuevo elemento de vista.

    1. Sitúe el cursor al principio de la fila de código /* Associations */ y pulse Intro para insertar una nueva fila.

    2. En la nueva fila de código, introduzca dats y pulse Ctrl + Espacio para invocar la finalización del código.

    3. En la lista de sugerencias, seleccione dats_days_between( date1, date2 ) (función) y pulse Mayús + Intro para insertar la firma completa.

      Resultado

      Esto debería insertar el siguiente código:

      Code Snippet
      123
      dats_days_between( date1, date2 )
  2. Sustituya los marcadores de posición por elementos de vista y variables de sesión adecuados y especifique un nombre de elemento de vista (nombre sugerido: CompanyAffiliation).

    1. Ajuste el código de la siguiente manera:

      Code Snippet
      1234
      dats_days_between( EntryDate, $session.system_date ) as CompanyAffiliation,

      Nota

      De nuevo, insertamos saltos de línea adicionales para aumentar la legibilidad en el material impreso del curso.
  3. Utilice la función SQL división para calcular la afiliación de la empresa en años, con una precisión de un decimal.

    1. Ajuste el código de la siguiente manera:

      Code Snippet
      123456
      division( dats_days_between( EntryDate, $session.system_date ), 365, 1 ) as CompanyAffiliation,
  4. Active y pruebe la entidad de vista CDS.

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

    2. Pulse F8 para probar la entidad de vista CDS en la herramienta Vista previa de datos.

Tarea 3: Realizar una conversión de moneda

En un nuevo elemento de vista (nombre sugerido: AnnualSalaryConverted), utilice una función SQL adecuada para convertir el contenido del elemento de vista AnnualSalary a la moneda US Dollar. Utilice la fecha actual del sistema como fecha de tipo de cambio. A continuación, ajuste el cálculo del elemento de vista MonthlySalary. Utilice el salario anual convertido como entrada en lugar del salario anual no convertido.

Consejo

Puede reutilizar elementos de vista calculados de la misma entidad de vista utilizando el prefijo $jection.

Pasos

  1. Elimine o comente el elemento de vista CurrencyCode.

    1. Sitúe el cursor en la fila de código CurrencyCode, y pulse Ctrl + < para añadir un signo de comentario (//) al principio de la fila.

  2. En la siguiente fila de código, defina un nuevo elemento de vista (nombre sugerido: CurrencyCodeUSD) en el que convierta el literal 'USD' en el tipo predefinido abap.cuky.

    1. Ajuste el código de la siguiente manera:

      Code Snippet
      1234
      // CurrencyCode, cast( 'USD' as /dmo/currency_code ) as CurrencyCodeUSD,
  3. Antes del elemento de vista MonthlySalary, utilice la compleción de código para insertar una llamada de la función SQL currency_conversion.

    1. En una nueva fila de código, introduzca curr y pulse Ctrl + Espacio para invocar la finalización de código.

    2. En la lista de sugerencias, seleccione la entrada que empiece por currency_conversion( amount => amount, ... y pulse Shift + Intro para insertar la firma completa.

    3. El código ahora debería tener el siguiente aspecto:

      Code Snippet
      123456789101112
      currency_conversion( amount => amount, source_currency => source_currency , target_currency => target_currency, exchange_rate_date => exchange_rate_date ) @EndUserText.label: 'Monthly Salary' @Semantics.amount.currencyCode: 'CurrencyCode' cast( AnnualSalary as abap.fltp ) / 12.0 as MonthlySalary,

      Nota

      Hemos insertado saltos de línea adicionales, de nuevo.
  4. Sustituya los marcadores de posición por valores para los parámetros. Como entrada, utilice el salario anual y el código de moneda de la vista fuente, el elemento de vista propio CurrencyCodeUSD y la variable de sistema system_date.

    1. Ajuste el código de la siguiente manera:

      Code Snippet
      1234567
      currency_conversion( amount => AnnualSalary, source_currency => CurrencyCode , target_currency => $projection.CurrencyCodeUSD, exchange_rate_date => $session.system_date )
  5. Añada un nombre de elemento (nombre sugerido: AnnualSalaryConverted), una etiqueta y la anotación obligatoria Semantics.amount.CurrencyCode.

    1. Ajuste el código de la siguiente manera:

      Code Snippet
      123456789
      @EndUserText.label: 'Annual Salary' @Semantics.amount.currencyCode: 'CurrencyCodeUSD' currency_conversion( amount => AnnualSalary, source_currency => CurrencyCode , target_currency => $projection.CurrencyCodeUSD, exchange_rate_date => $session.system_date ) as AnnualSalaryConverted,
  6. Ajuste el cálculo del elemento de vista Salario mensual. En lugar de AnnualSalary, utilice el nuevo elemento de vista AnnualSalaryConverted como entrada.

    1. Ajuste el código de la siguiente manera:

      Code Snippet
      123456
      @EndUserText.label: 'Monthly Salary' @Semantics.amount.currencyCode: 'CurrencyCode' cast( $projection.AnnualSalaryConverted as abap.fltp ) / 12.0 as MonthlySalary,
  7. Ajuste el nombre del elemento de vista (nombre sugerido: MonthlySalaryConverted) y ajuste la anotación obligatoria Semantics.amount.CurrencyCode.

    1. Ajuste el código de la siguiente manera:

      Code Snippet
      123456
      @EndUserText.label: 'Monthly Salary' @Semantics.amount.currencyCode: 'CurrencyCodeUSD' cast( $projection.AnnualSalaryConverted as abap.fltp ) / 12.0 as MonthlySalaryConverted,
  8. Active y pruebe la entidad de vista CDS.

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

    2. Pulse F8 para probar la entidad de vista CDS en la herramienta Vista previa de datos.