SAP CDS Core Data Services – ¿Qué son las CDS?

Vamos a hablar del pasado-presente-futuro del acceso a los datos de la base de datos de los sistemas SAP. ¿Por qué digo pasado-presente-futuro?

  • Pasado: Porque es algo que salió sobre 2012 (12 años hace) dentro de la solución de acceso a datos de HANA. En ese momento, claro, habría entre 0 y 1 implantación de SAP HANA en España, pero el dato está ahí.
  • Presente: Porque ahora mismo ya lo estamos usando. Aunque no lo sepas, el estándar ya usa CDS para muchos de los procesos estándar y las búsquedas de la herramienta.
  • Futuro: Porque para mucha gente esto es nuevo (que no lo es) y siguen tirando sus Selects a base de datos. SAP ha trazado un camino claro hacia el futuro con CDS, destacando su importancia en la optimización del acceso a datos en un entorno de crecimiento exponencial de los mismos. Además CDS no solo facilita este acceso, sino que también se integra de manera efectiva con otras tecnologías emergentes, como RAP, para ofrecer soluciones de desarrollo modernas y escalables.

Esto está muy bien, pero no sabemos qué es los CDS Core Data Services. Vamos a verlo.

CDS en tus manos

¿Qué son las CDS Core Data Services?

SAP CDS es un paradigma de programación para la plataforma SAP ABAP introducido inicialmente en SAP NetWeaver 7.4 SP05 y SAP HANA SPS6. Su enfoque principal es optimizar las operaciones de bases de datos, permitiendo a los desarrolladores crear modelos de datos eficientes y robustos que se integran perfectamente con SAP HANA y otras plataformas SAP.

Voy a traducirlo.

CDS permite a los desarrolladores crear modelos de datos abstractos que luego se traducen en consultas SQL optimizadas para ejecutarse en SAP HANA. Esta abstracción es crucial para realizar operaciones complejas de bases de datos de manera más eficiente y coherente. Por ejemplo, en lugar de escribir consultas SQL complejas y propensas a errores, los desarrolladores pueden definir vistas CDS que encapsulan la lógica y el comportamiento de los datos, lo que facilita el mantenimiento y la evolución del sistema.

¿Lo hemos entendido?

Lo intento explicar mejor.

Básicamente, una CDS te permite crear una «vista» o «representación» de los datos que necesitas extraer de la base de datos, pero con muchas ventajas adicionales.

En términos simples, una CDS es como un «filtro inteligente» que se coloca entre la base de datos y la aplicación. Este filtro te permite seleccionar y organizar los datos de la manera exacta que necesitas, sin tener que escribir consultas SQL complejas cada vez. Además, este filtro puede incluir reglas de negocio, lógica adicional, y definiciones de seguridad, todo integrado en una única definición. Todo esto se ejecuta en la capa In-Memory de SAP HANA, dejando que sea SAP HANA quien gestione ciertos aspectos de rendimiento y dependencias entre datos.


Pero entonces ¿Qué diferencia hay entre una vista de la SE11 y una CDS?

Pues mucha, muchísima. Y a varios niveles.

Optimización y funcionalidad

Las CDS están diseñadas específicamente para aprovechar al máximo SAP HANA, lo que les permite ejecutar consultas de manera más eficiente y rápida, gracias a la capacidad de procesamiento en memoria de HANA. En contraste, las vistas de la SE11, aunque funcionan en HANA, no están tan optimizadas para esta base de datos, lo que puede hacerlas menos eficientes en términos de rendimiento.

Capacidad funcional

Las CDS ofrecen un conjunto de herramientas mucho más amplio y avanzado. Por ejemplo, permiten incluir lógica de negocio, realizar cálculos complejos, aplicar anotaciones para definir comportamientos específicos, y gestionar uniones de datos de forma más sofisticada. Además, las CDS son altamente flexibles y modulares, lo que facilita su mantenimiento y actualización en comparación con las vistas de la SE11, que tienden a ser más rígidas y difíciles de modificar cuando cambian los requisitos.

Integración con tecnologías modernas

Las CDS están claramente diseñadas para el futuro. Se integran perfectamente con SAP Fiori y RAP, permitiendo la exposición de datos a través de servicios OData, algo crucial para el desarrollo de aplicaciones modernas y basadas en servicios. Por otro lado, las vistas SE11, aunque útiles, no están tan bien adaptadas para estos escenarios de aplicación moderna, lo que puede limitar su uso en proyectos que requieren conectividad y exposición de datos a través de servicios web.

Seguridad

Las CDS incorporan controles de acceso y autorizaciones directamente en la definición de la vista, lo que permite un control más detallado y seguro sobre quién puede acceder o modificar los datos. Las vistas de SE11, por su parte, dependen más de configuraciones externas para la seguridad, lo que las hace menos integradas en este aspecto.


Componentes Principales de CDS

SAP CDS se basa en tres componentes clave que permiten a los desarrolladores crear modelos de datos optimizados:

  • Vistas CDS: Las vistas CDS son la base de SAP CDS. Permiten definir estructuras de datos y consultas que se ejecutan directamente en la base de datos, actuando como una capa de abstracción sobre las tablas subyacentes. Estas vistas facilitan el acceso y la manipulación de los datos, optimizando las consultas SQL y mejorando el rendimiento general.
  • Anotaciones: Las anotaciones en CDS permiten enriquecer los modelos de datos con metadatos que definen características importantes como la seguridad, las relaciones entre entidades, y el comportamiento de los datos. Esto ayuda a crear modelos de datos que no solo son eficientes, sino también seguros y coherentes con la lógica de negocio.
  • Funciones de CDS: Las funciones de CDS son operaciones predefinidas que pueden aplicarse directamente sobre los datos en la capa de la base de datos, mejorando la eficiencia al realizar cálculos complejos o transformaciones de datos. Son parecidas a las funciones que podemos usar en SQL (SUM, MAX, MIN, etc.) pero más potentes porque se aplican directamente en las definiciones de las vistas CDS, lo que permite que la lógica de negocio se implemente y se ejecute en la base de datos, mejorando la eficiencia y reduciendo la necesidad de procesar los datos en la capa de aplicación.

La Herramienta Necesaria: ADT (ABAP Development Tools)

Para gestionar y desarrollar con CDS, es esencial utilizar ABAP Development Tools (ADT) en el entorno de desarrollo Eclipse. ADT proporciona un conjunto de herramientas específicas para trabajar con CDS, que incluyen un editor avanzado de código, herramientas de depuración, y funciones para la gestión y visualización de las vistas CDS.

Sobre ADT tengo previsto hacer un artículo explicando más pormenorizadamente sus capacidades, como instalarlo y su uso. No vanos a detenernos en ello ahora.


Beneficios de Usar SAP CDS

Más o menos los hemos ido viendo durante el artículo, pero lo podemos resumir en lo siguiente:

  • Rendimiento Mejorado: CDS maximiza el uso de SAP HANA, reduciendo la latencia y mejorando significativamente el rendimiento de las consultas. Es la forma nativa de explotar el potencial del procesamiento en Memoria de HANA.
  • Integración Nativa: CDS está profundamente integrado en el ecosistema SAP, lo que facilita la creación de aplicaciones que pueden interactuar con diferentes módulos de SAP, garantizando una interoperabilidad fluida. Siendo la base de tecnologías como RAP (RESTful ABAP Programming) o OData V4.
  • Facilidad de Mantenimiento: Dado que las vistas CDS son declarativas el mantenimiento y las actualizaciones de las aplicaciones son más simples y menos propensas a errores. La lógica de negocio queda claramente definida y separada de la lógica de presentación, mejorando la mantenibilidad del código. De todo esto y de como usarlo hablaremos en otro artículo concreto.

En conclusión

Sirva este artículo como introducción a SAP CDS si es que alguien no lo conocía ya. Quiero hacer una serie sobre como usar CDSs y ejemplos más palpables de las ventajas que ofrece.

abapGit: Integración de Git para Desarrollo ABAP en SAP

En otros lenguajes de programación que no están tan ligados al núcleo de un aplicativo empresarial, es común y casi obligatorio ver el uso de control de versiones y repositorios como GitHub, GitLab, etc. para gestionar y colaborar en el desarrollo del código. Sin embargo, en el caso de ABAP, un lenguaje que está profundamente arraigado dentro del framework SAP Netweaver, que tiene su propio repositorio y gestor de versiones, la adopción de herramientas modernas como Git para ABAP ha sido más lenta.

Es aquí donde abapGit entra en escena, proporcionando una solución clave para los desarrolladores ABAP que quieren aprovechar las ventajas del control de versiones distribuido. Pero antes de nada, veamos el escenario habitual en otros lenguajes y en entorno de desarrollo conjunto distribuido. Lo primero que tenemos que saber es qué es eso de Git.

¿Qué es Git?

Git es un sistema de control de versiones distribuido diseñado para rastrear los cambios en archivos de código fuente y facilitar la colaboración entre múltiples desarrolladores en un proyecto. Fue creado por Linus Torvalds en 2005, inicialmente para el desarrollo del Kernel de Linux. Es utilizado principalmente en el desarrollo de software, pero también puede aplicarse a otros tipos de proyectos donde se necesita llevar un control detallado de cambios en archivos.

Características Claves de Git

Las características que hacen de Git una tecnología tan potente son:

  • Control de versiones distribuido: A diferencia de los sistemas centralizados de control de versiones, en Git cada desarrollador tiene una copia completa del historial del proyecto en su máquina local, lo que permite trabajar de manera independiente y sin conexión.
  • Snapshots: En lugar de registrar diferencias entre versiones de los archivos, Git toma «instantáneas» del estado de los archivos en cada commit. Si no hay cambios en un archivo, Git solo referencia la versión anterior.
  • Integración y colaboración: Git facilita la integración continua y la colaboración mediante ramas (branches), que permiten que varios desarrolladores trabajen en diferentes características de un proyecto sin interferir con el trabajo de otros. Posteriormente, las ramas pueden fusionarse (merge) de manera segura.
  • Rendimiento eficiente: Dado que Git opera de manera distribuida y guarda versiones localmente, la mayoría de las operaciones (como commits, comparaciones y creación de ramas) son extremadamente rápidas, ya que no dependen de un servidor remoto.
  • Compatibilidad con plataformas como GitHub: Git es la tecnología subyacente que soporta plataformas populares como GitHub, GitLab, Bitbucket, las cuales añaden características adicionales como la gestión de proyectos, seguimiento de errores y funciones de revisión de código.

Beneficios de usar Git

Seré breve, os podéis imaginar los beneficios, viendo las características clave.

  • Seguridad: El historial de cambios en Git está protegido contra alteraciones accidentales o malintencionadas.
  • Flexibilidad: Git es útil para proyectos de cualquier tamaño y es compatible con numerosos flujos de trabajo.
  • Desarrollo paralelo: Facilita el trabajo simultáneo de varios desarrolladores en diferentes partes de un proyecto, permitiendo integraciones y fusiones de código (Merge) sin perder la coherencia del proyecto.

Ya sabemos lo que es Git y sus características, pero nos falta saber que es eso de Github o GitLab.

¿Qué es GitHub?

GitHub es una plataforma de desarrollo colaborativo que permite a los programadores y equipos gestionar proyectos de software utilizando el sistema de control de versiones Git. GitHub proporciona un entorno basado en la web donde los desarrolladores pueden alojar y compartir sus proyectos de código, colaborar en equipo, y realizar un seguimiento de los cambios mediante el uso de repositorios.

No vamos a profundizar más en GitHub, puesto que esta basado en Git (ya lo hemos explicado) aportando una capa por encima con más funcionalidades de gestión de Proyectos.

Vamos ahora, una vez sabemos lo que es Git y lo que es GitHub (o similares), vamos a ver qué es abapGit.

¿Qué es abapGit?

Como podemos ver en la Help de SAP:

abapGit es un cliente Git desarrollado por código abierto para que el servidor ABAP importe y exporte objetos ABAP entre sistemas ABAP.

Con abapGit, puede exportar sus objetos ABAP de cualquier sistema a otro, normalmente de local a en la nube o de un sistema en la nube a otro.

SAP Help – Trabajar con abapGit

Esta entrada de la Help de SAP se centra, o está englobada, en SAP BTP – Business Technology Platform.

Pero en SAP BTP es un framework donde desplegar aplicaciones de muchos tipos ya sea SAP Build Apps, Fiori, CPI, Python, Go, Ruby, etc. Digamos que en el framework de trabajo de SAP BTP usar una solución Git es practicamente obligatorio.

Pero nosotros vamos a algo más mundano, queremos integrar la tecnología Git dentro de nuestros proyectos ABAP de toda la vida, con su SE80, SE38, sus paquetes de desarrollo, etc.

Por lo tanto, podemos decir que abapGit es un cliente de Git específico para ABAP, que permite a los desarrolladores trabajar con un control de versiones distribuido externo dentro del entorno SAP. Desarrollado como un proyecto de código abierto por la comunidad, abapGit permite exportar e importar objetos ABAP a repositorios externos como GitHub, GitLab o Bitbucket, lo que hace posible integrar flujos de trabajo modernos en sistemas SAP.


¿Qué puedo hacer con abapGit?

Pues SAP tiene varios tutoriales que nos pueden ayudar con esto:

Podemos ampliar esas dos tareas que propone el Learning de SAP por la siguiente lista:

  • Versionado del código ABAP: Permite realizar Commits del código ABAP en un repositorio Git (GitHub, GitLab, etc), creando un historial de cambios que facilita la colaboración entre múltiples desarrolladores.
  • Colaboración en equipo: Con la capacidad de clonar y fusionar repositorios, los equipos de desarrollo pueden trabajar en diferentes características del proyecto simultáneamente sin interferir entre sí, lo que mejora la productividad y reduce los errores.
  • Migración de código ABAP entre sistemas: abapGit facilita la migración de objetos ABAP de un sistema on-premise a la nube, o entre diferentes sistemas SAP. Esto es especialmente útil en proyectos de migración a SAP S/4HANA o SAP BTP. Esto es lo que comenta el enlace de SAP Learning que he puesto antes.
  • Integración con herramientas CI/CD: abapGit permite integrar proyectos ABAP en flujos de trabajo de integración y entrega continua (CI/CD), facilitando un enfoque ágil al desarrollo.
  • Exportación e importación de objetos: abapGit facilita la exportación de objetos ABAP, como clases, funciones, y programas, a repositorios Git. Desde allí, es posible importar estos objetos a otros sistemas SAP, lo que simplifica la colaboración entre diferentes entornos de desarrollo. Y esto es lo que comenta el otro enlace de SAP Learning que he puesto. Sobre este punto, quiero hacer una puntualización en el punto siguiente.
  • Importación de funcionalidad colaborativa: Existen proyectos de código abierto subidos a GitHub con funcionalidades concretas que están a nuestra disposición para importarlos en nuestro sistema SAP por medio de abapGit. Obviamente, con esto hay que tener cierto cuidado porque estamos importando código de otra persona. Tienen que ser fuentes contrastadas y validadas por la comunidad. Pero, para mi, es un aspecto fundamental ya que alimenta el conocimiento global y simplifica muchas tareas que alguien ya pensó e implementó. Ejemplos de esto pueden ser:
    • OpenAPI: El motivo de escribir esta entrada es básicamente poder explicar OpenAPI en SAP para nuestros servicios OData. Por lo tanto este punto lo explicaremos en la entrada correspondiente, cuando la publique actualizaré esta para poder el link.
    • ABAP2XLS: Proporciona un conjunto de opciones para el trabajo con excel desde ABAP, simplifica mucho el proceso de manejar Excel con muchas demos y muchas opciones.

¿Cómo instalar abapGit en mi sistema?

Pues es bastante sencillo, más que nada porque está perfectamente explicado en varios sitios. Por ejemplo:

Hay dos versiones de instalar el abapGit:

  • Standalone version: Se trata de un report que sirve para realizar la conexión de Importación (que puede ser desde un repositorio tipo GitHub) y Exportación a local.
  • Developer version: Es la versión que te permite trabajar con tus proyectos ABAP en un repositorio Git con toda la funcionalidad. Importar, Exportar, trabajar colaborativamente, etc. Para esta versión tienes que instalar primero la versión Standalone para descargarte el proyecto abapGit tal y como comenta el tutorial. Ten en cuenta que quizás tengas que instalar el certificado de GitHub en el sistema para poder establecer la conexión con GitHub, viene bien explicado en SSL Setup. También se puede instalar de forma offline descargándote el proyecto en Zip y subiéndolo al report de Standalone.
  • Versión para SAP BTP: Podéis verlo en el siguiente enlace de la Help de SAP SAP Help – Trabajar con abapGit o en SAP Learning – Install the abapGit Plugin donde te enseña a instalar el plugin para ADT.

Integración Continua/Entrega Continua (CI/CD)

Y es que Git no solo vale para la gestión de cambios y trabajo concurrente, como hemos visto aporta la funcionalidad de Integración con herramientas CI/CD, esto ¿Qué es?.

Integración Continua (CI)

La Integración Continua es una práctica en la que los desarrolladores integran su código en un repositorio compartido, como puede ser GitHub, varias veces al día. Cada vez que se hace una integración, se ejecuta una serie de pruebas automáticas para asegurarse de que el nuevo código no introduzca errores ni rompa las funcionalidades existentes. El objetivo es detectar y corregir problemas lo más rápido posible.

Entrega Continua (CD)

Ojo cuidado con esto. en la Entrega Continua, una vez que el código pasa las pruebas automáticas y es integrado, se prepara automáticamente para su despliegue en el entorno de producción.

Obviamente, en estas prácticas se puede llegar a la profundidad que se requiera, no es todo o nada. Hay mucho más que aprender de CI/CD pero yo no soy el más indicado para explicar más allá de la teoría. Para mi, viniendo del mundo SAP, con su cola de transportes, su paso a producción bajo ticket de Remedy o Service Now, y sus UATs, me parece complicado y peligroso. No obstante SAP ya está en ello, podemos ver la charla de SAP Teched 2020 «DevOps for ABAP? Try the Git-Enabled Change and Transport System | SAP TechEd in 2020«

Madre mía!

Podéis verlo en este video.

En Conclusión

El objetivo de esta entrada es servir de base a otras entradas en las que hago uso de ABAPGit para importar proyectos ABAP en el sistema. Es muy útil, ya no solo para tener un repositorio de tus desarrollo, si no también para utilizar proyectos ABAP de la comunidad que aporten valor inmediato a tu proyecto.

Networking

Tú me conoces, yo a tí posiblemente no, (algún amigo habrá leyendo esto). Si alguna vez necesito algo tengo una red de compañeros de viaje en consultoría que estará a mi lado apoyando, tengo la red del equilibrista sujeta por mucha gente, tengo mi red de contactos, mi Networking.

¿Qué es Networking?

El networking es el proceso de establecer y cultivar relaciones profesionales con otras personas en tu industria u otros campos relevantes. Estas conexiones pueden proporcionarte información, apoyo, oportunidades laborales y colaboraciones.

¡Vaya lío! Los amigos de mis amigos son mis amigos

¿Cómo se genera tu Red?

Leerás en muchos sitios que tienes que estar activo en LinkedIn, asistir a eventos, cursos, meetups, etc. Lamentándolo mucho, yo no creo que ese sea el camino. Por lo general, y hablo desde mi punto de vista, se trata de un trabajo lento, poco a poco, pero a mi no me supone trabajo alguno. Se trata básicamente de ser buen compañero, ser bueno en tu ámbito (sin locuras), ser buen consultor, ser humilde, saber decir «me he equivocado» y ayudar a tus compañeros en el día a día. Fácil ¿no? Pues para algunos imposible, porque parece que se esfuerzan en ser todo lo contrario.

No entiendo por qué nadie me recomienda para trabajar. Hijos de &€#@

Tu red personal/profesional

La red de contactos que construyes a lo largo de tu carrera es fundamental. Esta red no se forma de la noche a la mañana, sino que se construye con el tiempo, a través de experiencias compartidas y la confianza mutua.

Algunos consejos para fortalecer tu red personal y profesional podrían ser:

  • Sé Accesible y Amable: Siempre mantén una actitud positiva y accesible. Las personas están más inclinadas a recordar y querer trabajar con alguien que es agradable y confiable. No seas un ogro e intenta generar buen ambiente.
  • Brinda Apoyo y Ayuda: No dudes en ofrecer tu ayuda a otros, ya sea con consejos, recursos o simplemente escuchándolos. Las relaciones se construyen en base a la reciprocidad y el apoyo mutuo. Yo sé de uno que os está haciendo un blog por amor al arte.
  • Mantén el Contacto: No esperes a necesitar algo para contactar a alguien. Mantén tus relaciones vivas a través de mensajes ocasionales, reuniones informales o simplemente un saludo.

Marketing de marca

En el ámbito profesional, tu marca personal es tu carta de presentación. Asegúrate de que tu presencia en línea y fuera de línea refleje tus valores y habilidades. Aquí algunos aspectos clave:

  • Perfil en LinkedIn: Aunque mencioné que no creo que estar activo en LinkedIn sea el único camino, tener un perfil bien estructurado y actualizado es importante. Muestra tus logros, habilidades y experiencias de manera clara y profesional. Pídele a tus superiores recomendaciones.
  • Participación en Eventos: Asistir a eventos relevantes, aunque no sea el único camino, puede ser útil para ampliar tu red. Estos eventos te permiten conocer a personas influyentes y mantenerte al tanto de las tendencias de la industria. Yo esto no lo hago porque no tengo tiempo, tampoco lo veo imprescindible.
  • Contenido de Valor: Comparte contenido relevante y útil en tus redes sociales y blog (si tienes uno). Esto puede incluir artículos, investigaciones, opiniones sobre temas actuales, etc.
  • Cuida tu presencia online: Si buscan por tu nombre y apellidos y lo que sale es tu cara de fiesta en fiesta o comentarios fuera de tono en Twitter (perdón X), no vas bien. Los departamentos de RRHH se peinan ínternet para saber si estás loco, no se lo pongas fácil.
Puedes hacerlo si tú eres el jefe como Elon Musk

Recomendaciones

Las recomendaciones de colegas y clientes son valiosas para tu reputación profesional. Aquí algunas maneras de obtener y utilizar recomendaciones de manera efectiva:

  • Solicita Recomendaciones: No dudes en pedir recomendaciones a personas con las que has trabajado estrechamente. Una buena recomendación puede ser un gran respaldo para tu carrera. Yo desde antes de LinkedIn ya pedía cartas de recomendación al salir de los trabajos. Ahora siempre pido recomendaciones por LinkedIn.
  • Ofrece Recomendaciones: Sé proactivo y ofrece recomendaciones a aquellos con quienes has tenido buenas experiencias laborales. Esto no solo ayuda a otros, sino que también fortalece tu red. Nunca sabes si ese Junior que has recomendado (porque es un crack) será dentro de unos años socio de Deloitte o incluso tu jefe.
¡Maldita sea! Estuve con Jorge en la guerra. Desde ahí no siento las piernas. Jorge es muy bueno con el bazooka

Referencias

Tener referencias sólidas puede ser crucial en ciertos momentos de tu carrera, y entendemos por Referencia el que alguien pueda responder por ti en caso en que necesiten ese feedback directo. Esto se hace mucho en otros países, que te piden un par de contactos a los que llamar y preguntar por tu desempeño. Pero en España no es tan habitual.

Por supuesto que cabe la posibilidad de dar como contactos a tu amigo Paco y tu amiga Amalia que salís de fiesta todos los días y trabajáis en lo mismo. Pero los recruiters no son tontos, en este mundo global de internet, con un vistazo a LinkedIn ven si esa persona ha sido responsable tuyo y de qué manera. Además, una persona responsable no se va a prestar a hacer una trampa.

Si has sido bueno y buena gente no te faltarán teléfonos y contactos que se ofrezcan a ser referencia tuya. Al final pivotamos siempre sobre lo mismo.

¿Es el enemigo? ¿Qué me puedes decir de Jorge? Ah, que era bueno contando chistes. Y de lo de disparar ¿Cómo va?

¿Para qué quiero todo esto?

Ojalá nunca lo necesites, porque mientras siga habiendo demanda habrá trabajo para todos, pero en caso de una crisis de empleo, similar a la de 2008-2012, permanecerán aquellos mejor preparados, con más experiencia y con más contactos y mejores referencias (también los hay con malas referencias).

No es la especie más fuerte la que sobrevive, ni la más inteligente la que sobrevive. Es aquella que se adapta mejor al cambio.

Además, de esto, las ventajas principales, así Grosso Modo podrían ser:

  • Aceleración en la Búsqueda de Empleo: Según este artículo de la Reserva Federal de St. Louis, el networking puede reducir significativamente el tiempo necesario para encontrar un empleo, ya que el 70-80% de los puestos de trabajo nunca se publican oficialmente y se cubren a través de referencias y contactos
  • Mejora en el Desarrollo Profesional: Un estudio realizado por LinkedIn reveló que el 85% de los empleos se cubren a través del networking, lo que demuestra su importancia en el avance de la carrera profesional​.
  • Incremento de Conocimientos: El networking facilita el acceso a nuevas ideas y conocimientos al conectar a profesionales de diferentes campos, promoviendo el intercambio de información y el aprendizaje mutuo. A mi me ha pasado, tengo en mi red de contacto expertos en Fiori, tengo un problema o me han mandado algo al respecto y no tengo mucha idea, puedo pedir ayuda.
  • Creación de Oportunidades: Un artículo de Harvard Business Review menciona que el networking no solo abre puertas a nuevas oportunidades laborales, sino que también puede conducir a asociaciones estratégicas y colaboraciones que de otro modo no serían posible

En resumen, si tienes una buena red de contactos, siempre tendrás ayudas en aquello que necesites.


En conclusión

Hay que ser buena gente y gente buena, tender puentes y mantenerlos, crear ambientes de trabajo agradables, ser bueno en lo tuyo, ser humilde y agradecido. Tienes que estar pendiente de tus recomendaciones y tu imagen online. Y todo esto llegará solo.

Yo, por ahora, he salido de cada una de las crisis reforzado, evolucionando laboralmente, económicamente y ampliando y mejorando mi red de contactos. Ahora veo varias crisis sobrevolar el horizonte (económica, crisis de empleo por IA, guerras, etc.). Y alguna crisis personal he tenido hace poco, y lo que me ha salvado ha sido mi red de contactos.


¿Me quieres ayudar?

Si eres parte de mi red de networking y quieres ayudarme lo mejor que puedes hacer es:

  • Realizar comentarios en este u otro artículo.
  • Compartirlo / Darle a Like / Comentar  en LinkedIn
  • Darle a Me Gusta aquí en el Blog
  • Suscríbete por email al Blog que así te llega directo a la bandeja de entrada
  • Hazme un Bizum de no menos de 50€ (es broma, con 40€ me conformo)

Si te interesa, suscríbete al blog por email

OData y SAP Gateway – IV – Opciones sobre Entidades y Campos

En la entrada anterior de esta serie de artículos sobre OData ‘OData y SAP Gateway – II – Publicar un servicio OData en SAP‘ creamos un servicio muy básico de consulta de Businsess Partners, posteriormente añadimos la recuperación de Subentidades. Pero ahora toca para un poco, y saber las opciones de configuración del servicio Gateway. Se viene artículo denso, meramente informativo, pero necesario para sentar las bases.

Serie de Artículos sobre OData

Este artículo pertenece a una serie de artículos que se van complementando poco a poco como itinerario de conocimiento:


Opciones a nivel Modelo de Datos

Tenemos diversas opciones cuando estamos visualizando el modelo de datos, esto nos da una lista de Entidades y, para cada una de ellas, tenemos diversas opciones de configuración.

Donde tenemos las opciones de configuración:

  • Name: Indica el nombre de la entidad.
  • ABAP Structure: La estructura ABAP subyacente que define los campos y tipos de datos de la entidad. Utilizada para mapear los datos de la entidad a una estructura ABAP correspondiente en el backend.
  • Base Type: El tipo base del cual hereda la entidad, esto es utilizado en escenarios de herencia, donde una entidad puede extender otra entidad.
  • Is Abstract: Indicador de si la entidad es abstracta. Las entidades abstractas no pueden instanciarse directamente y se utilizan como base para otras entidades.
  • Label: El nombre legible o etiqueta de la entidad sirve para darle un nombre más amigable para los usuarios finales.
  • Label Editor: Herramienta para editar la etiqueta.
  • Semantics: Define el propósito de los datos contenidos en la entidad, ofreciendo un contexto adicional para entender cómo se deben utilizar e interpretar esos datos. Algunos ejemplos comunes de semántica en las entidades podrían ser CRM, HR, Clientes, Transaccional, etc. Estos términos ayudan a categorizar y definir el contexto de los datos. La ayuda del campo habla de propiedad y los valores posibles también, pero es un error, a nivel de entidad se usa para categorizar el propósito,
  • Thing Type: Checkbox que se selecciona para indicar si un tipo de entidad es una «cosa» (thing) en lugar de un objeto subordinado. En nuestro ejemplo el «objeto» serían los BusinesPartner y los objetos subordinados las entidades subordinadas.
  • Media: Especifica que el objeto de datos pertenece a una colección de medios. Este campo se utiliza para indicar que el tipo de entidad tiene un recurso de medios. Por ejemplo si tuviesemos una entidad Attachment.
  • As Author Property: No es necesario, es parte del estándar AtomPub, que se utiliza para publicar y editar recursos en un servidor web, el servidor se encarga de completar el campo atom:author utilizando la información del usuario autenticado.
  • As ETag Property: Tampoco es necesario, se refiere a una propiedad en una entidad que se utiliza para la gestión de la concurrencia optimista en SAP Gateway. ETag (Entidad Tag) es un mecanismo que ayuda a prevenir conflictos durante actualizaciones concurrentes de los datos. El atributo ETag no necesita ser proporcionado por el cliente, ya que el servidor genera y gestiona este valor automáticamente. El ETag se utiliza para asegurar que las operaciones de actualización y eliminación solo se realicen si la versión de la entidad no ha cambiado desde que fue leída por el cliente.
  • As Published Property: El campo As Published Property se refiere a una propiedad específica en una entidad que se utiliza para almacenar la marca de tiempo (fecha y/o hora) en que el elemento fue publicado por primera vez. Este es un elemento del Protocolo de Publicación Atom (AtomPub) llamado atom:published
  • As Title Property: Se refiere a un elemento en el Protocolo de Publicación Atom (AtomPub) llamado atom:title. Indicará la propiedad que usaremos como texto que transmite un encabezado legible por humanos (título) para un nuevo miembro de la colección.
  • As Updated Property: Es como «As Published Property» pero con la fecha/hora de ultima actualización. Es un elemento del Protocolo de Publicación Atom (AtomPub) llamado atom:updated.

Opciones por entidad y propiedades

Si pulsamos en una entidad, y vamos a ver sus propiedades, vemos que, por cada campo, tenemos varias opciones para ser configuradas. Estas opciones serán las que marquen el comportamiento de dicho campo en dicha entidad en el Servicio OData.

Las opciones de configuración son:

  • Name: Nombre de la propiedad o campo de la entidad, el identificador único del campo dentro de la entidad.
  • Is Key: Marca de si la propiedad es clave en la entidad, indica si el campo es una clave primaria para la entidad. Esto es importante para el uso del servicio y para relacionar dicha entidad con otras subordinadas.
  • Edm. Core Type: Tipo de datos, el tipo de datos en el modelo de datos de entidad (EDM), como Edm.String, Edm.Int32, etc.
  • Precision: Precisión del campo, número de dígitos totales que el campo puede tener.
  • Scale: Escala del campo, número de dígitos que el campo puede tener a la derecha del punto decimal.
  • Max Length: Longitud máxima, la longitud máxima del campo, aplicable principalmente a tipos de datos string.
  • Unit Property Name: Nombre de la propiedad de unidad, campo relacionado que especifica la unidad de medida para este campo (por ejemplo, metros, kilogramos).
  • Creatable: Indicador de que la propiedad puede ser Creada, permite la asignación de valor a esta propiedad en solicitudes de creación (POST).
  • Updatable: Indicador de que la propiedad puede ser Actualizada, permite la asignación de valor a esta propiedad en solicitudes de actualización (PUT/PATCH).
  • Sortable: Indicador de que la propiedad puede ser Ordenada, permite que este campo sea utilizado en sentencias $orderby para ordenar datos.
  • Nullable: Indicador de que la propiedad puede ser Nula, permite que esta propiedad tenga un valor nulo. Por ejemplo, algo que da muchas veces error son las fechas a ‘00000000’, para que funcione correctamente tenemos que poner este indicador.
  • Filterable: Indicador de que la propiedad puede ser Filtrada, permite que esta propiedad sea utilizada en sentencias $filter para filtrar datos.
  • Label: Etiqueta descriptiva de la propiedad, un nombre descriptivo utilizado en interfaces de usuario o documentación.
  • Label Editor: Editor de la etiqueta de la propiedad, herramienta para editar y gestionar el texto de la etiqueta, incluyendo referencias a textos traducibles.
  • Complex Type Name: Nombre del tipo complejo, si la propiedad es de un tipo complejo, este es el nombre del tipo complejo.
  • ABAP Field Name: Nombre del campo en ABAP, el nombre del campo correspondiente en ABAP.
  • ABAP Type: Tipo de datos en ABAP, el tipo de datos ABAP correspondiente (por ejemplo, CHAR, NUMC, DATS).
  • Semantics: Semántica del campo, describe el propósito o la función del campo en un contexto más amplio, proporcionando significado adicional sobre su interpretación y uso.

Opciones por EntitySet

A nivel de EntitySet podemos elegir el comportamiento de cada entidad. Tendremos las siguientes opciones:

  • Name: Nombre del EntitySet. El nombre del conjunto de entidades utilizado en las URIs para acceder a las entidades del conjunto.
  • Entity Type Name: Nombre de la Entidad en la que se basa el EntitySet. El nombre del tipo de entidad que define la estructura y las propiedades de las entidades dentro del conjunto.
  • Label: Etiqueta descriptiva del EntitySet. Un nombre descriptivo utilizado en interfaces de usuario o documentación.
  • Label Text Reference Editor: Editor de referencia de texto de la etiqueta. Herramienta para editar y gestionar el texto de la etiqueta, incluyendo referencias a textos traducibles.
  • Semantics: Semántica del EntitySet. Describe el propósito o la función del EntitySet en un contexto más amplio, proporcionando significado adicional sobre su interpretación y uso.

Opciones de capacidades y comportamiento de las Entidades OData

Sobre el resto de checks de este menú vamos a detenernos un poco más, puesto que son las opciones que marcarán el comportamiento y capacidades de nuestras entidades dentro de un proyecto OData. Estas opciones permiten una gran flexibilidad y control sobre cómo se pueden gestionar y acceder a los datos a través de servicios OData en SAP Gateway, mejorando tanto la seguridad como el rendimiento de las aplicaciones que consumen estos servicios.

Creatable

Indicador de que la entidad puede ser Creada.

  • Descripción: Cuando esta opción está seleccionada, indica que los clientes pueden crear nuevas entidades en el conjunto de entidades utilizando el método HTTP POST.
  • Uso: Permite operaciones de creación de entidades. Esto es útil cuando el servicio OData debe permitir la inserción de nuevos registros en la base de datos.

Updatable

Indicador de que la entidad puede ser Actualizada.

  • Descripción: Permite que las entidades dentro del conjunto sean actualizables utilizando el método HTTP PUT o PATCH.
  • Uso: Esencial para permitir modificaciones a los registros existentes en el conjunto de entidades. Los clientes pueden actualizar una entidad específica mediante su clave primaria.

Deletable

Indicador de que la entidad puede ser Eliminada.

  • Descripción: Permite que las entidades dentro del conjunto sean eliminadas utilizando el método HTTP DELETE.
  • Uso: Facilita la eliminación de registros específicos del conjunto de entidades. Esto es útil para gestionar la vida útil de los datos.

Pageable

Indicador de que la entidad admite paginación.

  • Descripción: Permite la paginación de los resultados de una consulta OData utilizando los parámetros $skip y $top.
  • Uso: Mejora el rendimiento y la usabilidad cuando se trabaja con grandes volúmenes de datos. Los clientes pueden solicitar subconjuntos de datos en cada llamada, lo que facilita la gestión de grandes conjuntos de datos.

Addressable

Indicador de que la entidad es direccionable.

  • Descripción: Permite que las entidades sean accesibles directamente mediante su clave primaria en la URI.
  • Uso: Los clientes pueden acceder a una entidad específica utilizando su URI, facilitando operaciones CRUD directas sobre entidades individuales.

Searchable

Indicador de que la entidad puede ser buscada.

  • Descripción: Permite realizar búsquedas en las entidades utilizando el parámetro de consulta $search.
  • Uso: Facilita la búsqueda de entidades que contienen ciertos términos, mejorando la experiencia del usuario al permitir consultas más complejas.

Subscribable

Indicador de que la entidad puede ser suscrita.

  • Descripción: Permite que los clientes se suscriban a cambios en el conjunto de entidades.
  • Uso: Útil para aplicaciones que necesitan notificaciones o actualizaciones en tiempo real cuando ocurren cambios en los datos.

Requires Filter

Indicador de que se requiere un filtro para acceder a la entidad.

  • Descripción: Obliga a que todas las consultas al conjunto de entidades incluyan un parámetro de filtro ($filter).
  • Uso: Restringe el acceso directo a las entidades, asegurando que las consultas sean más específicas y potencialmente mejorando el rendimiento al reducir el volumen de datos devueltos en cada consulta.

Opciones aplicadas en nuestro proyecto Gateway

Pues para nuestro proyecto Gateway ZODATA_TEST_BP, en base a los apartados de este artículo se han aplicado las siguientes opciones:

Opciones a nivel Modelo de Datos

A nivel de Modelo de Datos, es decir, de Entidad, la configuración aplicada es la siguiente:


Opciones por entidad y propiedades

Por Entidad, se configuran sus propiedades de la siguiente forma:

BusinessPartners

Por ahora no se puede crear (no lo hemos implementado), no se puede actualizar (idem) por lo que las propiedades no tiene sentido que las marquemos como Creatable o Updatabe. Marcamos todos los campos con la posibilidad de hacer SORT, eso podremos afinarlo cuando afinemos el método de GetEntitySet, por ahora ninguno puede ser nulo (que no es lo mismo que vacío), y marcamos para filtrar todos menos el nombre completo.

Address

Lo mismo de la creación y actualización. Marcamos como Nullable las fechas porque si no da un error de que la fecha no puede ser «» y marcamos los campos por los que pensamos ordenar y filtrar.

IdentNumbers

Lo mismo de la creación y actualización. Lo mismo de las fechas Nullable y los filtros.

Relation

Igual que las anteriores.

Roles

Igual que las anteriores.


Opciones por EntitySet

A nivel Set de Entidad, EntitySet, como por ahora no tenemos la actualización ni creación, le ponemos la paginación y la búsqueda y que la entidad de BusinessPartner requiere filtro.


En conclusión

Nuestro proyecto está en una fase muy inicial, solo es de búsqueda y recuperación de datos, por lo tanto muchas de estas opciones directamente no aplican. Pero creo que hemos hecho un repaso exhaustivo de las posibilidades, a nivel configuración de un proyecto Gateway. Importante, he dicho posibilidades a nivel configuración, la lógica la tendremos que implementar en la clase Z*DPC_EXT correspondiente.


Si te interesa, suscríbete al blog por email