
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.
Podemos dividir el URI de OData en 2 partes:
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. $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. $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. $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. $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. $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. $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:
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.
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
Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010
Paseo de la Reforma 26
Colonia Juárez, Cuauhtémoc
Ciudad de México 06600
Real Cariari
Autopista General Cañas,
San José, SJ 40104
Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073