• Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
S4PCADEMY_Logo
  • Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
Twitter Linkedin Instagram

S4PCADEMY_Logo
  • Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
Twitter Linkedin Instagram
#odata  ·  $filt  ·  $inlinecount  ·  $orderby  ·  $skip  ·  $skiptoken  ·  $top  ·  Technical Articles

Implementación de todas las opciones de consulta/URI de OData: parte 2

By s4pcademy 


Introducción

En el blog anterior, discutimos sobre las llamadas URI que no requieren ninguna implementación personalizada. En este blog, repasaremos los URI que requieren una implementación personalizada.

Pasos

Podemos dividir el URI de OData en 2 partes:

  1. No necesita implementación personalizada (Implementación de todas las opciones de consulta/URI de OData: parte 1)
    1. $seleccionar
    2. $contar
    3. $expandir
    4. $formato
    5. $enlaces
    6. $valor
  2. Necesita implementación personalizada (Este blog)
    1. $ordenarpor
    2. $superior
    3. $saltar
    4. $filtro
    5. $inlinecount
    6. $saltatoken

Implementación

1. $orderby: La opción $orderby se usa para especificar un orden de clasificación para los resultados de una consulta. Se utiliza en la URL de un servicio OData para indicar cómo deben ordenarse los resultados.

La sintaxis de la opción $orderby es la siguiente: $orderby=nombreDePropiedad [asc|desc]donde propertyName es el nombre de la propiedad por la que se deben ordenar los resultados y se usa «asc» o «desc» para especificar el orden de clasificación (ascendente o descendente, respectivamente).

Por ejemplo, si queremos recuperar una lista de clientes y ordenarlos por apellido en orden descendente, la URL se vería así:

http://<host>/sap/opu/odata/sap/<service>/Customers?$orderby=LastName desc

También es posible ordenar por múltiples propiedades usando la opción $orderby, separando cada propiedad con una coma.

http://<host>/sap/opu/odata/sap/<service>/Customers?$orderby=LastName desc, FirstName asc

El código $orderby se puede escribir como:

  METHOD ekkoset_get_entityset.

*- To get data from DB
    SELECT * FROM ekko INTO TABLE @DATA(lt_ekko) UP TO 10 ROWS.

*- Check the $orderby in the Odata Query
    READ TABLE it_order INTO DATA(ls_order) INDEX 1.
    IF sy-subrc IS INITIAL.
      IF ls_order-order="desc".
        SORT lt_ekko BY (ls_order-property) DESCENDING.
      ELSE.
        SORT lt_ekko BY (ls_order-property) ASCENDING.
      ENDIF.
    ENDIF.

*- Check the size of the table for $inlinecount
    IF io_tech_request_context->has_inlinecount( ) = abap_true.
      DESCRIBE TABLE lt_ekko LINES DATA(lv_size).
      es_response_context-inlinecount = lv_size.
    ENDIF.

    MOVE-CORRESPONDING lt_ekko TO et_entityset.

  ENDMETHOD.

A continuación se muestra la salida:

1.%20%24ordenarpor.jpg

1. $orderby.jpg

Otra forma mejor de usar $orderby puede ser la forma estándar de usarlo, que se muestra a continuación:

*- Check the $orderby in the Odata Query
    /iwbep/cl_mgw_data_util=>orderby(
      EXPORTING
        it_order =  it_order                " the sorting order
      CHANGING
        ct_data  = lt_ekko
    ).

2. $superior: La opción $top se usa para especificar el número máximo de resultados que se deben devolver en una consulta. Se utiliza en la URL de un servicio OData para indicar cuántos resultados se deben devolver. La sintaxis de la opción $top es la siguiente: $top=n, donde n es un número entero que indica el número de resultados que se deben devolver.

Por ejemplo, si queremos recuperar los 10 principales clientes, la URL se vería así:

http://<host>/sap/opu/odata/sap/<service>/Customers?$top=10

La opción $top se puede usar en combinación con otras opciones como $filter, $select y $orderby para refinar aún más los resultados de una consulta.

http://<host>/sap/opu/odata/sap/<service>/Customers?$filter=Country eq 'US'&$top=5&$orderby=LastName desc

Es importante tener en cuenta que la opción $top se usa para limitar la cantidad de registros devueltos en una respuesta y no para restringir la cantidad total de registros devueltos por el servicio OData.

  METHOD ekkoset_get_entityset.

*- To get data from DB
    SELECT * FROM ekko INTO TABLE @DATA(lt_ekko) UP TO 10 ROWS.

*- Check the $orderby in the Odata Query
    /iwbep/cl_mgw_data_util=>orderby(
      EXPORTING
        it_order =  it_order                " the sorting order
      CHANGING
        ct_data  = lt_ekko
    ).

*- For paging i.e. $top and $skip
    /iwbep/cl_mgw_data_util=>paging(
      EXPORTING
        is_paging = is_paging                " paging structure
      CHANGING
        ct_data   = lt_ekko
    ).

*- Check the size of the table for $inlinecount
    IF io_tech_request_context->has_inlinecount( ) = abap_true.
      DESCRIBE TABLE lt_ekko LINES DATA(lv_size).
      es_response_context-inlinecount = lv_size.
    ENDIF.

    MOVE-CORRESPONDING lt_ekko TO et_entityset.

  ENDMETHOD.

Podemos usarlo de la siguiente manera:

2.%20%24superior.jpg

2. $superior.jpg

3. $saltar: La opción $skip se usa para especificar la cantidad de resultados que deben omitirse antes de devolver los resultados en una consulta. Se utiliza en la URL de un servicio OData para indicar cuántos resultados se deben omitir. La sintaxis de la opción $skip es la siguiente: $skip=n, donde n es un número entero que indica el número de resultados que deben omitirse.

Por ejemplo, si queremos recuperar todos los clientes pero omitir los primeros 10, la URL se vería así:

http://<host>/sap/opu/odata/sap/<service>/Customers?$skip=10

La opción $skip se puede usar en combinación con otras opciones como $top, $filter, $select y $orderby para refinar aún más los resultados de una consulta.

http://<host>/sap/opu/odata/sap/<service>/Customers?$filter=Country eq 'US'&$skip=5&$top=5&$orderby=LastName desc

Es importante tener en cuenta que la opción $skip se usa para omitir los registros desde el principio del conjunto de resultados, por lo que normalmente se usa en combinación con la opción $top para recuperar una página específica de resultados.

Mismo código de paginación (usado en 3. $top). El siguiente fragmento muestra el segundo segundo registro, ya que está obteniendo el primer registro después de omitir el primero.

3.%20%24saltar.jpg

3. $saltar.jpg

4. $filtro: La opción $filter se usa para especificar criterios de filtro para los resultados de una consulta. Se utiliza en la URL de un servicio OData para indicar qué resultados se deben devolver en función de determinadas condiciones. La sintaxis de la opción $filtro es la siguiente: $filtro=condición, donde la condición es una expresión lógica que se evalúa como verdadera o falsa.

La condición se puede construir usando operadores lógicos y de comparación (eq, ne, gt, ge, lt, le, and, or, not).

Por ejemplo, si queremos recuperar todos los clientes cuyo apellido comienza con “S”, la URL se vería así:

http://<host>/sap/opu/odata/sap/<service>/Customers?$filter=startswith(LastName,'S')

Si queremos recuperar todos los clientes cuyo apellido comienza con «S» y cuyo nombre es «John», la URL se vería así:

http://<host>/sap/opu/odata/sap/<service>/Customers?$filter=startswith(LastName,'S') and FirstName eq 'John'

La opción $filter se puede usar en combinación con otras opciones como $top, $skip, $select y $orderby para refinar aún más los resultados de una consulta.

http://<host>/sap/opu/odata/sap/<service>/Customers?$filter=startswith(LastName,'S') and FirstName eq 'John' &$top=5&$orderby=LastName desc

Es importante tener en cuenta que la opción $filter se aplica después de la opción $skip, lo que significa que filtra los resultados después de omitir el número de registros especificado.

  METHOD ekkoset_get_entityset.

*- To get data from DB
*- it_filter_select_options will have filter values for $filter keyword
    IF it_filter_select_options IS INITIAL.
      SELECT * FROM ekko INTO TABLE @DATA(lt_ekko) UP TO 10 ROWS.
    ELSE.
      READ TABLE it_filter_select_options INTO DATA(ls_sopt)
                                           WITH KEY property = 'Ebeln'.
      IF sy-subrc IS INITIAL.
        SELECT * FROM ekko INTO TABLE @lt_ekko WHERE ebeln IN @ls_sopt-select_options.
      ENDIF.
    ENDIF.

*- Check the $orderby in the Odata Query
  /iwbep/cl_mgw_data_util=>orderby(
    EXPORTING
      it_order =  it_order                " the sorting order
    CHANGING
      ct_data  = lt_ekko
  ).

*- For paging i.e. $top and $skip
  /iwbep/cl_mgw_data_util=>paging(
    EXPORTING
      is_paging = is_paging                " paging structure
    CHANGING
      ct_data   = lt_ekko
  ).

*- Check the size of the table for $inlinecount
  IF io_tech_request_context->has_inlinecount( ) = abap_true.
    DESCRIBE TABLE lt_ekko LINES DATA(lv_size).
    es_response_context-inlinecount = lv_size.
  ENDIF.

  MOVE-CORRESPONDING lt_ekko TO et_entityset.

ENDMETHOD.

Podemos probar el código anterior como:

4.%20%24filtro.jpg

4. $filtro.jpg

5. $inlinecount: La opción $inlinecount se usa para incluir el número total de resultados que coinciden con una consulta en la respuesta, además de los propios resultados. Se utiliza en la URL de un servicio OData para indicar que el recuento total de los resultados coincidentes debe incluirse en la respuesta. La sintaxis de la opción $inlinecount es la siguiente: $inlinecount=allpages, donde “allpages” es una palabra clave que indica que se debe incluir el recuento total.

Por ejemplo, si queremos recuperar todos los clientes e incluir el recuento total de clientes en la respuesta, la URL se vería así:

http://<host>/sap/opu/odata/sap/<service>/Customers?$inlinecount=allpages

La opción $inlinecount se puede usar en combinación con otras opciones como $filter, $top, $skip, $select y $orderby para refinar aún más los resultados de una consulta.

http://<host>/sap/opu/odata/sap/<service>/Customers?$filter=Country eq 'US'&$top=5&$skip=5&$orderby=LastName desc&$inlinecount=allpages

Es importante tener en cuenta que la opción $inlinecount incluirá el recuento de los resultados coincidentes en la respuesta, el recuento se incluirá en el atributo «.count» de la respuesta.

5.%20%24filtro.jpg

5. $filtro.jpg

5. $saltar token:

La opción $skiptoken se usa para recuperar el siguiente conjunto de resultados cuando el resultado de una consulta supera la cantidad máxima de elementos que se pueden devolver en una sola respuesta. La opción $skiptoken se usa junto con la opción $top para recuperar una página específica de resultados proporcionando un token que representa la posición en el conjunto de resultados desde donde se debe recuperar el siguiente conjunto de resultados. La opción $skiptoken se usa en la URL de un servicio OData para indicar el token que se usará para recuperar el siguiente conjunto de resultados.

La sintaxis de la opción $skiptoken es la siguiente: $skiptoken=token, donde el token es un valor de cadena que representa la posición en el conjunto de resultados desde donde se debe recuperar el siguiente conjunto de resultados.

Por ejemplo, si queremos recuperar el siguiente conjunto de 10 clientes a partir del 11º cliente, la URL se vería así:

http://<host>/sap/opu/odata/sap/<service>/Customers?$top=10&$skiptoken='11'

La opción $skiptoken se puede usar en combinación con otras opciones como $filter, $top, $select y $orderby para refinar aún más los resultados de una consulta.

http://<host>/sap/opu/odata/sap/<service>/Customers?$filter=Country eq 'US'&$top=5&$skiptoken='11'&$orderby=LastName desc

Es importante tener en cuenta que la opción $skiptoken se usa para navegar a través del conjunto de resultados en forma de paginación, y debe usarse junto con la opción $top y el conjunto de resultados debe ordenarse en el mismo orden que en la consulta que generó el saltador.

6.%20%24skiptoken.jpg

6. $skiptoken.jpg

El $skip y $skiptoken se ven iguales a primera vista, pero tienen alguna diferencia. Para saber más sobre $skip y $skiptoken puedes visitar este blog:

Conclusión

SAP nos ha brindado múltiples opciones para jugar con los requisitos en tiempo real con un poco de esfuerzo. Le recomendaría probar estas opciones de consulta y depurar para ver cómo funciona. El blog se dividió en las siguientes partes.

  • $orderby: ordena los datos por uno o más campos.
  • $top y $skip: habilita la paginación del lado del servidor.
  • $filter: recupera datos específicos de un conjunto de entidades en función de un conjunto de criterios.
  • $inlinecount: proporciona el número total de registros en un conjunto de entidades.
  • $skiptoken: habilita la paginación del lado del servidor usando un token de continuación.

Si tiene alguna idea o pregunta sobre el tema, no dude en dejar un comentario a continuación. Me encantaría saber de usted.

Si esta publicación te resultó útil, dale me gusta y compártela con tu red 🙂

Atentamente,

Nitin Sharma



Source link


consultaURIImplementaciónlasODataOpcionespartetodas

Artículos relacionados


SAP Authorizations
Creación y uso de una variante de datos de propuesta SU24N de transacción (Parte 2)
#CDS  ·  ABAP CDS view  ·  Core Data Services (CDS)  ·  Technical Articles
ABAP Search CDS View Tool (para encontrar jerárquicamente todas las vistas relacionadas)
Technical Articles
Flujo de trabajo flexible para solicitudes de facturación: S/4HANA Cloud para facturación y contabilidad de contratos: parte 1

Deja tu comentario Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

Simplificación de la configuración de destino con Resource Path en Action Editor
Previo
Configuración de SAP S/4 HANA EWM-QM en 2020
Siguiente

Madrid

Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010

México

Paseo de la Reforma 26
Colonia Juárez,  Cuauhtémoc
Ciudad de México 06600

Costa Rica

Real Cariari
Autopista General Cañas, 
San José, SJ 40104

Perú

Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073

Twitter Linkedin Instagram
Copyright 2022 | All Right Reserved.
Cookies Para que este sitio funcione adecuadamente, a veces instalamos en los dispositivos de los usuarios pequeños ficheros de datos, conocidos como cookies. La mayoría de los grandes sitios web también lo hacen.
Aceptar
Cambiar ajustes
Configuración de Cookie Box
Configuración de Cookie Box

Ajustes de privacidad

Decida qué cookies quiere permitir. Puede cambiar estos ajustes en cualquier momento. Sin embargo, esto puede hacer que algunas funciones dejen de estar disponibles. Para obtener información sobre eliminar las cookies, por favor consulte la función de ayuda de su navegador. Aprenda más sobre las cookies que usamos.

Con el deslizador, puede habilitar o deshabilitar los diferentes tipos de cookies:

  • Bloquear todas
  • Essentials
  • Funcionalidad
  • Análisis
  • Publicidad

Este sitio web hará:

Este sitio web no:

  • Esencial: recuerde su configuración de permiso de cookie
  • Esencial: Permitir cookies de sesión
  • Esencial: Reúna la información que ingresa en un formulario de contacto, boletín informativo y otros formularios en todas las páginas
  • Esencial: haga un seguimiento de lo que ingresa en un carrito de compras
  • Esencial: autentica que has iniciado sesión en tu cuenta de usuario
  • Esencial: recuerda la versión de idioma que seleccionaste
  • Functionality: Remember social media settings
  • Functionality: Remember selected region and country
  • Analytics: Keep track of your visited pages and interaction taken
  • Analytics: Keep track about your location and region based on your IP number
  • Analytics: Keep track of the time spent on each page
  • Analytics: Increase the data quality of the statistics functions
  • Advertising: Tailor information and advertising to your interests based on e.g. the content you have visited before. (Currently we do not use targeting or targeting cookies.
  • Advertising: Gather personally identifiable information such as name and location
  • Recuerde sus detalles de inicio de sesión
  • Esencial: recuerde su configuración de permiso de cookie
  • Esencial: Permitir cookies de sesión
  • Esencial: Reúna la información que ingresa en un formulario de contacto, boletín informativo y otros formularios en todas las páginas
  • Esencial: haga un seguimiento de lo que ingresa en un carrito de compras
  • Esencial: autentica que has iniciado sesión en tu cuenta de usuario
  • Esencial: recuerda la versión de idioma que seleccionaste
  • Functionality: Remember social media settings
  • Functionality: Remember selected region and country
  • Analytics: Keep track of your visited pages and interaction taken
  • Analytics: Keep track about your location and region based on your IP number
  • Analytics: Keep track of the time spent on each page
  • Analytics: Increase the data quality of the statistics functions
  • Advertising: Tailor information and advertising to your interests based on e.g. the content you have visited before. (Currently we do not use targeting or targeting cookies.
  • Advertising: Gather personally identifiable information such as name and location
Guardar y cerrar