¡Bienvenido de nuevo a la serie! Ya estamos a la mitad, y espero que lo encuentre informativo y útil. En nuestro publicación de blog anterior, recorrimos el proceso de creación de una definición de comportamiento de CDS para un objeto comercial de viajes administrado. Cubrimos los pasos para definir el comportamiento de la entidad de viaje, además de crear la proyección de definición de comportamiento.
En esta publicación de blog, profundizaremos en mejorar la definición de comportamiento del objeto comercial. Repasaremos los pasos para agregar determinaciones, validaciones y acciones a la definición de comportamiento de su objeto comercial. Pero antes de entrar en eso, repasaremos el Lenguaje de manipulación de entidades (EML). Deberá comprender EML para poder agregar determinaciones, validaciones o acciones a la definición de comportamiento de su objeto comercial.
El Lenguaje de Manipulación de Entidades (EML) es una parte clave del lenguaje ABAP que le permite interactuar con sus propios objetos comerciales y con otros utilizando una sintaxis similar a SQL. Con EML, puede controlar el comportamiento de los objetos comerciales dentro del contexto del Modelo de programación de aplicaciones (RAP) RESTful ABAP, y también proporciona acceso basado en API a otros objetos comerciales.
EML es útil para manejar entidades, que son los objetos definidos en la definición de objeto comercial (BOD). Ofrece varias operaciones para manipular estas entidades, incluidas lectura, creación, actualización, eliminación y ejecución. También puede usar EML para escenarios de desarrollo de datos y transacciones de manera segura, que es el caso de uso más común. Si está desarrollando sus marcos, puede usar la API EML genérica para la implementación genérica.
En resumen, EML brinda a los desarrolladores la flexibilidad para realizar varias operaciones en objetos comerciales con facilidad, lo que la convierte en una herramienta esencial para desarrollar aplicaciones comerciales complejas.
Operación de lectura: Esta operación le permite recuperar datos de una entidad. Esta operación permite la lectura transaccional de instancias de objetos comerciales, lo que significa que la lectura se realiza desde el búfer transaccional. De forma predeterminada, todas las declaraciones de EML están habilitadas en masa, lo que significa que puede recuperar datos para un conjunto de instancias con una sola columna de EML. Para realizar la operación de lectura, deberá especificar una tabla de claves para la que desea recuperar los datos.
METHOD validate_customer.
READ ENTITY zi_travel_m_708\\travel FROM VALUE #(
FOR <root_key> IN keys ( %key-mykey = <root_key>-mykey
%control = VALUE #( customer_id = if_abap_behv=>mk-on ) ) )
RESULT DATA(lt_travel).
Modificar Crear Operación: Esta operación se utiliza para crear instancias raíz a través de la creación por asociación. Todas las operaciones de EML se llevan a cabo en el búfer transaccional, lo que significa que solo se almacenan en la base de datos cuando se ejecuta la entidad de confirmación. Esto le permite crear varias instancias de un objeto comercial de una sola vez, sin que se confirme ningún cambio hasta que se complete la transacción completa.
MODIFY ENTITIES OF zi_travel_m_708 IN LOCAL MODE
ENTITY travel
UPDATE FROM VALUE #( FOR key IN keys ( mykey = key-mykey
overall_status="A" " Accepted
%control-overall_status = if_abap_behv=>mk-on ) )
FAILED failed
REPORTED reported.
" Read changed data for action result
READ ENTITIES OF zi_travel_m_708 IN LOCAL MODE
ENTITY travel
FROM VALUE #( FOR key IN keys ( mykey = key-mykey
%control = VALUE #(
agency_id = if_abap_behv=>mk-on
customer_id = if_abap_behv=>mk-on
begin_date = if_abap_behv=>mk-on
end_date = if_abap_behv=>mk-on
booking_fee = if_abap_behv=>mk-on
total_price = if_abap_behv=>mk-on
currency_code = if_abap_behv=>mk-on
overall_status = if_abap_behv=>mk-on
description = if_abap_behv=>mk-on
created_by = if_abap_behv=>mk-on
Modificar operación de actualización: Esta operación le permite actualizar las instancias existentes de un objeto comercial. Con esta operación, incluso puede actualizar instancias que se crearon anteriormente pero que aún no se han guardado en la base de datos. Para usar esta función, deberá aprovechar el ID de contenido, que identifica de forma única la instancia que desea actualizar. Al utilizar este ID, puede asegurarse de que los cambios que realice se apliquen a la instancia correcta.
MODIFY ENTITIES OF zi_travel_m_708 IN LOCAL MODE
ENTITY travel
UPDATE FROM VALUE #( FOR key IN keys ( mykey = key-mykey
overall_status="A" " Accepted
%control-overall_status = if_abap_behv=>mk-on ) )
Modificar Eliminar se utiliza para eliminar instancias.
Modificar Ejecutar Operación: Esta operación EML le permite ejecutar acciones en instancias de objetos comerciales. Simplemente necesita especificar la acción a ejecutar y proporcionar los parámetros necesarios. Esto puede ser útil cuando desea desencadenar una acción específica en una instancia de objeto comercial, como actualizar un estado o enviar una notificación. Recuerde que todas las declaraciones EML se ejecutan en el búfer transaccional y solo persisten a través de la base de datos cuando se realiza la entidad de confirmación.
Ahora que tenemos una comprensión básica de EML y su papel en el desarrollo de aplicaciones transaccionales de manera rápida y eficiente, repasemos los pasos para mejorar la definición de comportamiento del objeto de negocio mediante la definición de determinaciones, validaciones y acciones.
Entity Manipulation Language (EML) es una poderosa herramienta en la programación ABAP que le permite personalizar y controlar el comportamiento de los objetos comerciales. Una de las formas principales en que lo hace es a través de determinaciones, acciones y validaciones.
A determinación es como un activador de base de datos que cambia automáticamente un objeto comercial en función de alguna lógica interna. Se asigna a un nodo y se ejecuta mediante Business Object Processing Framework (BOPF) tan pronto como se cumple la condición de activación. La condición se verifica en diferentes puntos durante la transacción, según el patrón de la determinación.
Comportamiento, por otro lado, son entidades que hacen referencia a acciones específicas y contienen una lógica de verificación que se ejecuta automáticamente antes de que se procese la acción. Las validaciones de acciones verifican si una acción se puede llevar a cabo y se ejecutan cuando se llama a una acción y antes de que se ejecute. Si algunas validaciones fallan, la acción no se ejecuta en las instancias donde falló la validación. Por ejemplo, suponga que tiene un objeto de pedido con un atributo para el estado del pedido. En este caso, podría crear una acción que establezca el estado del pedido en «enviado» cuando se complete el pedido.
Validación es una entidad de un nodo. Es como una verificación interna para ver si todo funciona correctamente. Hay dos tipos de validaciones: validaciones de acción y validaciones de consistencia. Las validaciones de acciones aseguran que una acción específica se pueda ejecutar en ciertas instancias de nodo. Las validaciones de coherencia comprueban si un conjunto de instancias de nodo es coherente.
Nota: Para obtener más información sobre la definición de determinaciones, validaciones y acciones, aquí hay un enlace a la documentación de SAP: https://help.sap.com/saphelp_ewm900/helpdata/en/7a/8bd8e6fe8c4288a13ca5e9cba4ab22/frameset.htm
Esta documentación proporciona una guía paso a paso sobre cómo crear y administrar estas entidades en su objeto comercial. Abarca una variedad de temas, incluido cómo definir las condiciones de activación para determinaciones, cómo configurar reglas de validación y cómo crear y administrar acciones.
En el tutorial, agregamos más funcionalidades a nuestro objeto comercial al definir determinaciones, validaciones y acciones.
Para comenzar, tuvimos que cambiar a nuestra definición de comportamiento ZI_TRAVEL_M_708 y reemplace nuestro código anterior con el nuevo código provisto. Como siempre, repasaremos qué cambios se hicieron en el código.
managed implementation in class ZBP_I_TRAVEL_M_708 unique;
define behavior for ZI_TRAVEL_M_708 alias Travel
persistent table ztravel_000
etag master last_changed_at
lock master
{
// key that will be automatically generated by the framework
field ( readonly, numbering : managed ) mykey;
// semantic key calculated in a determination
field ( readonly ) travel_id;
// administrative fields (read only)
field ( readonly ) last_changed_at, last_changed_by, created_at, created_by;
// mandatory fields that are required to create a travel
field ( mandatory ) agency_id, overall_status, booking_fee, currency_code;
// mandatory fields that are required to create a travel
field ( mandatory ) Begin_Date, End_Date, Customer_ID;
// standard operations for travel entity
create;
update;
delete;
// instance action and dynamic action control
action ( features : instance ) acceptTravel result [1] $self;
// validations
validation validateCustomer on save { field customer_id; }
validation validateDates on save { field begin_date, end_date; }
validation validateAgency on save
{ field agency_id; }
// determination
determination CalculateTravelKey on modify
{ create; }
}
A continuación, necesitábamos mejorar la definición de comportamiento para la vista de proyección. Cambiamos a nuestra definición de comportamiento ZC_TRAVEL_M_000 y reemplazó el código existente con lo siguiente:
projection;
define behavior for ZC_TRAVEL_M_708 alias TravelProcessor
use etag
{
use create;
use update;
use delete;
use action acceptTravel;
}
El use la acción acceptTravel se utiliza para indicar que la definición de comportamiento debe admitir una acción denominada acceptTravel. Esta es una acción a nivel de instancia que se definió en la definición de comportamiento anterior. Mediante el uso comportamiento puede cambiar el estado de su reserva.
Ahora que hemos mejorado el comportamiento del objeto comercial y proyectado la mejora relevante a través de nuestra definición de comportamiento de proyección, procederemos con la implementación. El área en la que estamos trabajando se muestra en el siguiente flujo de desarrollo.
Flujo de desarrollo de RAP
Para generar las clases de implementación de comportamiento para el nodo de objeto comercial viajar, utilizaremos el soporte de herramientas de desarrollo ABAP (ADT). Para hacer esto, simplemente vaya a la definición de comportamiento. ZI_Travel_M_000 y coloque el cursor antes de la clase de implementación ZBP_I_TRAVEL_M_000. A partir de ahí, puede crear una clase de implementación de comportamiento seleccionando Crear clase de implementación de comportamiento.
A continuación, deberá establecer la descripción como “Implementación de Comportamiento para ZI_TRAVEL_M_000” como se indica en el tutorial. La descripción debe completarse automáticamente para usted. Esto generará la clase de implementación de comportamiento que corresponde al nodo del objeto comercial. tenmarañar.
En los próximos pasos del tutorial, mejoraremos la implementación de nuestro código. El primer paso es implementar una validación para verificar que cada ID de agencia sea válida. Luego, agregaremos dos métodos de validación más: validar_cliente y validar_fechas. Después de eso, implementaremos una acción y una determinación. Una vez que se completen todos estos pasos, su código debería verse como el ejemplo dado en el tutorial.
Nota: Es posible que el botón de aceptar viaje tarde un poco en aparecer. Recomiendo encarecidamente activar el enlace del servicio y asegurarse de agregar un espacio en cualquier lugar que desee en su definición de datos. ZI_TRAVEL_M_000 y definición de comportamiento ZI_TRAVEL_M_000. Active ambos y vuelva a abrir su vista previa de SAP Fiori. Se tarda 120 segundos en hacer visibles los botones en la interfaz de usuario. Si estos pasos no funcionan, intente repetir los pasos anteriores nuevamente. Puede haber un error gramatical en el código que debe corregirse.
Tu resultado debería verse así:
La implementación del comportamiento se creó para la reserva de viajes y el enfoque administrado se usa para manejar la implementación de crear, actualizar y eliminar automáticamente. Este enfoque facilita la gestión y manipulación de los datos relacionados con las reservas de viajes.
Una vez que se complete la implementación, podrá ver el botón «Aceptar viaje», que le permite crear una nueva reserva de viaje con el estado de reserva «O» para «abierto». Después de guardar la reserva de viaje, puede aceptarla haciendo clic en el botón «Aceptar viaje». Esto actualizará el estado de la reserva a «A» para «aceptado». Esta función le permite realizar fácilmente un seguimiento del estado de sus reservas de viaje y tomar las medidas adecuadas según sea necesario.
En esta publicación de blog, aprendimos sobre el lenguaje de manipulación de entidades (EML) y cómo se puede usar para manipular objetos comerciales. Repasamos las diversas operaciones que ofrece EML para manipular entidades, incluidas lectura, creación, actualización, eliminación y ejecución, lo que la convierte en una herramienta esencial para desarrollar aplicaciones comerciales complejas. Luego repasamos los pasos para agregar determinaciones, acciones y validaciones a la definición de comportamiento del objeto comercial.
Finalmente, definimos determinaciones, validaciones y acciones. Con estas mejoras, pudimos crear una nueva reserva de viaje y aceptarla, lo que nos permitió realizar fácilmente un seguimiento del estado de las reservas de viaje y tomar las medidas adecuadas según fuera necesario.
En nuestra próxima y última publicación de blog de esta serie, vamos a crear una aplicación SAP Fiori para un objeto comercial RAP directamente desde la comodidad de su entorno SAP BTP, ABAP en Estudio de aplicaciones empresariales de SAP. También vamos a pasar por el proceso de implementación en SAP BTP, entorno ABAP.
Publicación de blog anterior:
Conozca RAP: Introducción
Conozca RAP: Definir modelo de datos – Parte 1
Conozca RAP: Definir modelo de datos basado en CDS
Conozca RAP: Definición de comportamiento de CDS
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