De 0 a Cloud – Como enfocar un proyecto en CAPm
Introducción
Esta entrada es un resumen de como llevar a cabo un proyecto CAPm des de su inicio hasta su despliegue a Cloud. Vale… esta primera introducción puede sonar muy genèrica. Voy a intentar concretar:

Pues como veis, yo os traigo 3 formas distintas de poder trabajar en CAPm sin que el usuario o otros desarrolladores se vean afectados.
- Modelado de datos + primeras lógicas: La fase mas inicial, en ella vamos a crear las vistas CDS y los primeros métodos para sobrescribir las operaciones CRUD. En esta fase no es necesario tener un backend en cloud, por lo que cada desarrollador lo ejecutara en su local
- Despliegue en Cloud: Este es el paso mas utilizado, lo resumiria en BUILD + DEPLOY. Subimos a nuestra subcuenta el modelo de base de datos y la lògica. Cada cambio se subirá para ser testeado. Esto puede crear inconsistencias en las aplicaciones o que dos desarrolladores se pisen.
- Modelo hibrido: Esta fase es la indicada cuando el modelo de datos (vistas CDS) ya esta maduro y se entra en una fase de desarrollo o mantenimiento de la lógica de backend. En este caso, realizamos subidas al entorno cloud pero paralelamente el desarrollador tiene sus modificaciones en local para probar. En esta fase el desarrollador a demás, puede escoger si utiliza la base de datos Cloud o una Local. Esto es útil cuando las pruebas unitarias/integradas no se pueden realizar sin un amplio juego de datos.
Pasamos a probar cada uno de los módulos. Como en otras entradas, utilizaré BAS y crearemos un proyecto CAPm des del template.
Modelado de datos + primeras lógicas
Creamos un nuevo proyecto des del template. La manera mas rápida en BAS es «View» – «Find Command» y buscamos el comando para crear proyectos:

Los siguientes passos son la creación de un proyecto tipo «CAP Project» con los siguientes parámetros:

Ya tenemos nuestro proyecto apunto, como hemos activado el ejemplo básico, vamos a arrancar nuestra API en local. El primer paso es instalar las dependencias del proyecto ejecutando el comando:
npm install
Una vez finalizado, nos aparecerá una carpeta con todas las librerías instaladas. Un consejo, si queréis exportar el proyecto borrar primero esta carpeta ya que puede ocupar varios megas.

Ya tenemos todo apunto, solo nos queda ejecutar el comando que arrancará nuestro servicio, en caso de modificaciones estas se actualizan automàticament en nuestro servidor local.
cds watch

Al acceder a la URL local, utilizando el botón «Open in New Tab» accederemos a nuestra API local con base de datos Local.

Como extra os enseño como podemos hacer Debug:
Primero añadiremos un breakpoint, por ejemplo en la extensión del servicio, pulsamos en la parte izquierda de la línia

Luego damos de alta el proyecto en la sección «Run configurations»

Al pulsar play nos activa el modo Debug con la misma URL que si usamos «cds watch»:

Al ejecutar la consulta de libros vemos como se para en el punto indicado. La petición quedará a la espera de que «soltemos» el Debug.

Despliegue en Cloud
Este punto lo pasaremos de puntillas, ya que solo queremos hacer las adaptaciones mínimas a nuestro CAPm para deployar en la base de datos HANA. Para ello, realizaremos dos pequeños cambios en ficheros:
En el fichero Package.json sustituimos estas lineas de código:
"cds": {
"requires": {
"db": {
"kind": "sql"
}
}
}
Por estas otras:
"cds": {
"hana": {
"deploy-format": "hdbtable"
},
"requires": {
"db": {
"kind": "sql",
"credentials": {
"database": "bookshop.db"
}
}
}
}
(ESTE PASO SOLO EN CUENTAS TRIAL) Una vez realizado el cambio, vamos al fichero mta.yaml y modificamos la parte final como indican los comentarios. Es decir, quitamos service: hana y ponemos service: hanatrial.
type: com.sap.xs.hdi-container
parameters:
service: hana # or 'hanatrial' on trial landscapes
service-plan: hdi-shared
properties:
hdi-service-name: ${service-name}
Ahora vamos a modificar los registros de la carpeta DB/data para que en cloud tengamos otros datos distintos y así poder ver la diferencia.

Por ultimo generamos los ficheros de despliegue, para ello, ejecutamos el comando:
cds build --for hana
Y ahora si, por fin… hacemos Build y Deploy. Supongo que estos dos pasos ya los tienes mas que aprendidos, pero una pincelada rápida:
- Build: Pulsamos botón derecho en el fichero mta.yaml y seleccionamos Build MTA.

- Deploy: Una vez finalizado el build, se genera una carpeta mta_archives y en el fichero mta generado, botón derecho y «Deploy MTA Archive».

Una vez finalizado el deploy vemos nuestra nueva API. Ya podemos ejecutar una clonsulta de libros:


Modelo hibrido
Ya tenemos nuestra aplicación funcionando a pleno rendimiento. Lo siguiente sera poder hacer Debug o seguir con nuestro desarrollo de manera local pero utilizando la base de datos cloud.
Lo primero será ejecutar el comando para instalar las dependencias NPM relacionadas con el cliente hana que nos permitirá la conexión des de BAS a la base de datos.
npm add @sap/hana-client --save
Una vez instalado, en la raíz de nuestro proyecto crearemos un nuevo fichero llamado «default-env.json».
En el fichero añadiremos la informació que recuperaremos del servicio HDI de nuestra base de datos, en caso necesario crearemos una Service Key nueva pulsando el botón «Create» y dándole un nombre (el que queráis):

Copiamos la información de seguridad:

La añadimos al fichero «default-env.json» embebido en la siguiente estructura donde los «…» son la parte copiada anteriormente y en name hay que añadir el nombre del contenedor HDI:
{
"VCAP_SERVICES": {
"hanatrial": [],
"hana": [
{
"name": "HDI Name",
"tags": [
"hana"
],
"credentials": {
...
}
}
]
}
}
En mi caso este es el resultado:

Por ultimo deberemos hacer un pequeño cambio en nuestro fichero package.json, este cambio sera el que determinará si utilizamos la base de datos local o la cloud. En este ejemplo lo vamos a substituir sin mas, aunque también podemos declarar variables de entorno. Me lo reservo para una próxima entrada si esta tiene éxito.
Retomando el hilo, vamos a substituir en nuestro fichero package.json:
"cds": {
"hana": {
"deploy-format": "hdbtable"
},
"requires": {
"db": {
"kind": "sql",
"credentials": {
"database": "bookshop.db"
}
}
}
}
por esto:
"cds": {
"requires": {
"db": {
"kind": "hana"
}
}
}
Ya esta todo apunto, como antes, podemos utilizar «cds watch» o «Run Configuration» para arrancar el servicio. El resultado al realizar la petición es el siguiene:

En Run time configuration, por si queremos hacer debug también se verá reflejado el cambio

Ahora que conoces los modelos de despliegue possible te será mas fácil realizar modificaciones de código y probarlas sin que otros compañeros se vean afectados o pierdan su código deployado.
Como siempre dale a la campanita de notificaciones y comparte en redes para estar a la última.