7

Agregandole cosas al CAP

 1 year ago
source link: https://blogs.sap.com/2023/04/25/agregandole-cosas-al-cap/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
April 25, 2023 7 minute read

Agregandole cosas al CAP

Hola de nuevo a la comunidad de SAP. Espero se encuentren bien y que hayan tenido tiempo de leer el primer blog que escribi acerca del CAP aqui. Hoy me gustaria agregarle funcionalidad al blog que hice acerca de las aplicaciones full stack en el framework de CAP. Nuevos artefactos de la base de datos como  lo son las calculation views y stored procedures para hacerlo ver mas como una aplicación real. Para leer este blog en ingles ve aqui

Picture1-71.png

Empezemos agregando un calculation view. Como ya han de saber, los calculation views representan datos de tablas/views múltiples para presentar un modelo de datos. Recuerda que, cuando creas nuevos objects, debes hacer un build (cds build) a nivel de proyecto para poder hacer el deployment asegurándote de que no haya nada malo en el HDI.

Para agregar un calculation view a tu proyecto de CAP has los siguientes pasos:

  1. Crea un calculation view dentro del folder db/src del proyecto.

Desde el command palette, escribe >hana: para abrir el menú de sugerencias y seleccionar del drop down “Create SAP HANA Database Artifact”

  1. Sigue los pasos del wizard para anadir la información correspondiente al tipo de objecto db, nombre, path, etc.
Picture2-44.png

Una vez que hayas creado el modelo de datos, necesitamos que re-construir el proyectoandes de hacer deploying. Para reconstruir el proyecto, desde la terminal, escribe:   cds build

*Nota que las tables y el nuevo view seas re-construidos (lo puedes ver desde el output de la terminal)

Una vez que los objectos sean construidos, puedes usar el icono de cohete desde la herramienta BAS para hacer deploy – pon el ratón al nivel de proyecto y no al nivel de objecto.

Picture3-46.png

Una vez que se haga el deployment, puedes verificar si el calc view correctamente se creo desntro de la instancia de HANA usando el explorador de bases de datos (desde la sección de Column views)

Picture4-46.png

Y tambien puedes hacer un query al view desde la consola de SQL

Picture5-37.png

O tambien desde la terminal usando la herramienta de hana-cli

Picture6-34.png

El siguiente paso es agregar el calculation view al archivo de modelos de la DB y hacer referencia a el desde el servicio de OData. Ya que el CV existe en el sistema, debemos includir anotaciones  al archivo de cds de la BD para que el sistema sepa que es un objecto ya existente.

Usando la herramiente de hana-cli tool, inspeccionemos el view. Usando el de output cds (-o flag) Podemos genrar este view como si fuera un view de CDS. Como ya lo mencione anteriormente, y que ya existent el objecto, la herramiente de hana-cli incluye esas anotaciones al calculation view (@cds.persistence annotations arriba del nombre de la Entity) juega con el comando para ver que otras opciones puedes usar y también para ver la definición completa del mismo

Picture7-31.png

Con esta definicion de CDS, continua hacia el archive de CDS. Nota los cambios que quitamos el namespace y lo anadimos como context en la estructura abajo. Eso se hace para no tener que poner un namespace en el calculation view.

Picture8-28.png

Una vez que la view se haya incluido en esta definicion, continuemos al servicio de OData.

Lo incluimos aqui para poder exponerlo como un endpoint diferente. La anotacion @readonly se inlcuyo en el servicio pues muestra que solo es para leers y el consumidor del servicio no trate de crear o manipular los datos desde este endpoint.

Picture9-25.png

El siguiente paso es para asegurarnos que trabaje la construccion y deployment de la aplicacion como lo hicimos anteriormente. Despues de que se haya hecho el deployment, corre el servicio desde la temrinal para ver si el nuevo endpoint ha sido expuesto. Recuerda que puede haber caching en la aplicacion y el app watch pudiera requerirse correr de nuevo.

Cuando hagamos click en el endpoint, puedes observer que los datos tambien son regresados desde el servicio de OData como se muestra en la sig imagen.

Picture10-25.png

Otro tipo de objeto muy comun que siempre es requerido en una aplicacion real es un stored procedure. Los Stored procedures son funciones que facilitan el crear/leer/manipular/borrar records en la base de datos. La mayoria de los ejemplos que vi en el internet muestran como se ejecuta el stored proc pero no muestran como pasar inputs hacia el endpoint y sucesivamente hacia un stored procedure. En mi caso, quiero mostrar como un stored procedure se usa para crear vendedores pasando parametros al API y luego a la función de node y luego al stored procedure así podemos mostrar el ciclo completo.

Para empezar, solo tenemos esta lista de vendedores.

Picture11-24.png

Luego,  en el codigo del stored procedure se ve asi

Picture12-21.png

En el API, debemos crear una Action (Las Functions son solo para leer datos). Mi definicion (parcial) del API se ve asi (imagina que las requests de GET son functions y los requests de POST son actions) :

Picture13-21.png

Ademas, quiero mostrar una funcion sin inputs, una funcion con un input simple y luego una action con input de tipo complejo lo cual parecera un ejemplo real. Para tener codigo que ejecute estos endpoints, debemos tener una salida, lo cual es un archivo de js con el mismo nombre del servicio de cds. En mi case, yo hize un archivo llamado service.js debido a que mi archivo de servicio es service.cds

Abajo, puedes verificar en el archivo de service.js para ver las diferencias entre las 3 funciones que acabo de mencionar. Construyamos el servicio y hagamos re-deploy usando el #BAS. Quisiera sugerir que cada vez que agregues objectos nuevos que hagas build, deployment y que los pruebes correctamente, para luego incluirlos en el code repo para que no se pierda tu trabajo.

Picture14-22.png

Una vez que termines con el codgo, puedes hacer pruebas del request tipo POST desde la herramienta de postman como sigue:

  • Nota el objeto complejo en el body del request POST el cual es el input de la función de js. Fue definido como un tipo en el servicio de CDS
Picture15-19.png
  • El request POST require un cookie que se pasa en la seccion de header del request; puedes obtener este valor desde la herramienta de dessarrollo del browser desde cualquier otro GET request (F12 dev tools – Headers – cookie)
Picture16-18.png

** Otros posibles errores que pueden ocurrir en este paso son, ten cuidado cuando hagas el set up del body  pues tiene que ser identico al input del action (Vendor), como también la estructura de JSON como es el tipo de dato que se pasa a la action. Si llegara a resultar en un error, puedes decifrarlo rapidamente pues, por ejemplo los errores de http400 inmediatamente te dirán que la estructura no es igual que el tipo de dato esperado en el servicio.

** Si llegaras a tener el url incorrecto para hacer el POST, probablemente recibas un error de tipo 404 – nota que la función require paréntesis al final del url, mientras que la acción no require parentesis.

Voila!  Aqui estan los records de la tabla despues de que la accion de insert ha sucedido correstamente.

Picture17-18.png

Mis dificultades:

  • Tuve dificultades al tartar de crear el calculation view pues primeramente use mix-case. Tuve que borrar y recrear el view con mayusculas.
  • Cuando tienes que hacer el deploy del proyecto – asegurate de re-construir el proyecto desde la terminal usando el comando cds build y asegúrate que no haya errores
  • Entender que hay que tener varias terminales corriendo simultaneamente: siempre hay que tener 2 activas(correr el comando watch en una y el comando cds bind –exec npm run app en otra.
  • Entender la diferencia entre function y action (para los stored procedures)

Actions: se usan para operaciones que agreguen o modifiquen datos via POST

Functions: se usan solo para leer datos via GET

  • El nuevo sintax/funciones disponibles del código nodejs usando funciones de CDS. No estoy Seguro donde encontrat una lista complete de ejemplos de esto.

Otros recursos que lei durante este blog:

https://www.youtube.com/watch?v=yceqr9vycrs&t=2402s

https://developers.sap.com/tutorial-navigator.html?tag=software-product-function%3Asap-cloud-application-programming-model

https://www.npmjs.com/package/sap-hdbext-promisfied

Como puedes ver, para construir este ejemlpo simple y tambien para agregar algo mas realista, use un calculation view expuesto via el servicio de OData y otro ejemplo usando un stored procedure para crear un record en la base de datos. Gracias por leer este blog y espero que hayan podido seguirlo. Por favor compartan sus compentarios, dudas o dificultadoes y tambien compartan este blog con otros.


Recommend

  • 51
    • www.ruanyifeng.com 6 years ago
    • Cache

    CAP 定理的含义

    分布式系统(distributed system)正变得越来越重要,大型网站几乎都是分布式的。 分布式系统的最大难点,就是各个节点的状态如何同步。CAP 定理是这方面的基本定理,也是理解分布式系统的起点。 本文介绍该定理。它其...

  • 50
    • 微信 mp.weixin.qq.com 5 years ago
    • Cache

    分布式基础,通俗易懂CAP?

  • 18
    • 微信 mp.weixin.qq.com 5 years ago
    • Cache

    CAP 定理图解

    CAP定理是分布系统中的一个基本定理,它指出任何分布系统最多可以具有以下三个属性中的两个。 一致性 (Consistency) 可用性 (Availability)   分区容错性 (Part...

  • 43
    • www.tuicool.com 5 years ago
    • Cache

    到底如何理解CAP

    点击蓝色“ 乔志勇笔记 ”关注我哟 加个“ 星标 ”,第一时间获取推送...

  • 54
    • www.tuicool.com 4 years ago
    • Cache

    图解CAP定理

    CAP 定理是分布式系统中的一个重要的基本定理,指出任何分布式系统最多只能具有以下三个属性中的其中两个: Consistency(一致性) Availability(可用性) Partition tolerance...

  • 42
    • www.tuicool.com 4 years ago
    • Cache

    CAP定理与BASE理论

    CAP定理与BASE理论 CAP定理 CAP 理论为:一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。 一致性(Consi...

  • 25
    • www.qtmuniao.com 4 years ago
    • Cache

    分布式基础(一):CAP 的理解

    曾经在一个面试中让谈谈对 CAP 的理解,当时凭着准备面试时谷歌到的N手资料,类似于小学生背书一样,生挤出只言片语。面试官无奈...

  • 24
    • www.cnblogs.com 4 years ago
    • Cache

    架构师都该懂的 CAP 定理

    面对可能出现的网络延迟,不可预估的请求流量等情况,设计一个分布式系统,我们通常围绕系统高可用,数据一致性的目标去规划和实现,想要完全实...

  • 12
    • en.wikipedia.org 3 years ago
    • Cache

    Five-prime cap

    In molecular biology, the five-prime cap (5′ cap) is a specially altered nucleotide on the

  • 5

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK