OData y SAP Gateway – II – Publicar un servicio OData en SAP

Nos metemos en harina y dejamos de teorizar. Después del artículo ‘OData y SAP Gateway‘ donde explicamos OData y su uso en SAP. Hoy vamos a aprender lo básico para saber montar un servicio OData en SAP usando el Gateway. Vamos a intentar que esto sea una serie de artículos sobre OData y SAP Gateway.


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:


Modelo de datos

Lo primero que vamos a hacer es definir nuestro modelo de datos a extraer. Esto no forma parte del proceso, pero es algo que necesitamos tener claro antes de continuar. Aquí os hago una propuesta. Vamos a hacer un servicio sobre Business Partners (BP) y sus objetos relacionados. Si no sabes lo que es un Business Partner revísa la entrada del blog:

Lo escribo en esquema para tenerlo claro.

Datos generales de Business Partner.

  1. Roles de BP
  2. Direcciones
  3. Relaciones
  4. Datos de Área de Ventas

Ahora lo pongo en un diagrama Entidad-relación.

Y además añadimos la estructura sencilla de tablas donde se encuentran estos datos:

Con esta estructura «sencilla» podemos abordar el problema (publicar un servicio web) de múltiples formas. Podríamos crear un servicio de consulta SOAP que por id de BP te devuelva una tabla con tablas anidadas con esa estructura. Pero luego, si queremos crear o actualizar tenemos que crear otro o crear un servicio monstruoso.

La potencia de OData reside en generar estas entidades y subentidades con las acciones CRUD (Create Read Update Delete) que necesitemos sobre cualquier entidad o subentidad. Por lo tanto, con OData hacemos un servicio web de microservicios. Pudiendo elegir entidad por entidad y campo por campo si se puede consultar, crear, actualizar o eliminar.


Estructuras a usar

Para crear este OData podemos hacer que cada entidad del modelo sea una entidad OData. De esta forma veremos que el servicio OData será muy versátil, pudiendo recuperar la profundidad de datos que necesitemos.

Para ello vamos a crear las siguientes estructuras y tipos tabla de las entidades subordinadas a los datos de cabecera.

Estructura para Roles de BP
Tipo Tabla para Roles de BP
Estructura para Direcciones de BP
Tipo Tabla para Direcciones de BP
Estructura de datos para Relaciones del BP
Tipo Tabla de Relaciones del BP
Estructura de Identificadores del BP
Tipo Tabla de Identificadores del BP

Con estos tipos de tablas creamos la estructura de datos de cabecera del BP.

Donde vemos que hay 4 tablas dentro de la estructura para los datos de Roles, Direcciones, Relaciones y Números de identificación del BP.


Gateway Service Builder (SEGW)

Una vez tenemos nuestro modelo y las estructuras creadas tenemos que crear un proyecto en la Gateway Service Builder (SEGW) y añadir la entidad del BP.

Al pulsar el botón de Nuevo nos aparecerá esta ventana

El campo Project Type es importante, porque nos permitiría crear un servicio OData v4. Ya hablaremos de eso, pero por ahora vamos a hacer un servicio OData básico, ya lo complicaremos más adelante.

Una vez creado el proyecto, estará vacío, por lo que vamos a añadir las entidades. Como previamente hemos creado la entidad de datos generales del Business Partner junto con todas las tablas relacionadas, vamos a importar esa estructura generada.

Entramos en la opción de importar una estructura del diccionario

Añadimos nuestra estructura padre de datos generales de Business Partners.

Seleccionamos nuestra estructura padre

Al darle a Next nos pedirá que indiquemos que campos/entidades queremos importar de la estructura seleccionada.

Como la estructura es nuestra, seleccionamos todo

Una vez hayamos seleccionado los campos y entidades nos pedirá, de cada entidad que vaya a crear y campo, cual es la clave, nombre y etiqueta. No obstante es algo que podemos cambiar posteriormente.

En Address la clave es Partner y Addrnumber
De IdentNumber la clave es PARTNER y TYPE.
De Relation la clave es PARTNER1 y PARTNER2.
De Roles la clave es PARTNER y RLTYP

Como resultado tendremos cinco entidades creadas:

  • BusinessPartner
  • Address
  • IdentNumbers
  • Relation
  • Roles

Cada una de ellas con los atributos y claves seleccionados en el punto anterior.

Relaciones entre Entidades

Ahora lo que tenemos que hacer es relacionar las entidades subordinadas con la entidad padre, para ello creamos una Assiciation

Botón derecho en Association y Create

Vamos a ver el ejemplo de Roles, el resto serán iguales puesto que la estructura de entidades es sencilla.

Definición de la Asociación entre entidades y su cardinalidad
Identificamos la asociación de claves entre entidades
Resumen de Asociación

Una vez hayamos hecho todas las asociaciones tendremos que generar el servicio con el botón

Vemos las entidades, asociaciones entre entidades y pulsamos a Generar

Al generar se nos propone unos nombres de clases controladoras del servicio OData. Por norma general esto aceptamos la propuesta y seguimos generando.

Clases controladoras del servicio OData

Al generar se nos añade la información de Service Implementation con todas las acciones CRUD de cada una de las entidades.


Implementación del servicio

Una vez tengamos generado el servicio veremos, en la parte de Service Implementation veremos cada una de las acciones posibles de cada una de las entidades. Por cada entidad tendremos las acciones:

  • Create: Creación de la entidad. Si estamos hablando de BusinessPartner, pues creación de un BP nuevo.
  • Delete: Borrado de la entidad. Por ejemplo, cuando queremos eliminar una dirección del Business Partner.
  • GetEntity: Consulta de los datos por clave, es decir, solo consultamos un registro
  • GetEntitySet: Consulta de los datos por Query, es decir, se va a recuperar una colección (tabla) de datos en base a unos criterios de búsqueda.
  • Update: Actualización de una entidad ya existente.

Como en nuestro caso se trata de un servicio OData de consulta de datos de BPs nos fijamos en la carpeta de Service Implementation del proyecto OData. Donde vemos cada una de las entidades y subentidades las acciones y, al pulsar doble click vemos el objeto técnico y la clase y el método donde se debe implementar la lógica.

De una entidad vemos sus métodos de implementación de la clase DPC_EXT

La clase donde se debe implementar la lógica es la ZCL_<NOMBRE_PROYECTO>_DPC_EXT (guárdate esto en la cabeza que lo vas a usar mucho). Para acceder a la clase es tan sencillo como entrar en la SE24 o entrar, dando doble-click sobre ella en el apartado Runtime Artifacs.

En una primera instancia veremos todos los métodos del CRUD de cada entidad sin redefinir. Para ir añadiendo nuestro código tenemos que ir redefiniendo cada método en la clase DCP_EXT e ir añadiendo la lógica esto lo haremos con más en otro artículo, pero en este vamos a hacer algo muy básico.


Implementado una query simple de BPs

Para implementar la consulta básica de los Business Partners vamos a implementar el método GET_ENTITYSET de la entidad BusinessPartners. Por lo tanto será el método BUSINESSPARTNERS_GET_ENTITYSET de la clase ZCL_ZODATA_TEXT_BP_DPC_EXT. Para ello debemos redefinir este método.

Formas de Redefinir el método en la clase DPC_EXT

Al redefinir el método aparece una propuesta de código.

Propuesta de código

Vamos a realizar una implementación muy muy sencilla para ver la funcionalidad básica. Todo esto puede llegar a ser mucho más complejo. Ya lo explicaremos.

Ponemos una Select muy sencilla para ver cómo se implementa.
En posteriores artículos entraremos en detalle de las posibilidades que nos da de implementación.

Activación del servicio /IWFND/MAINT_SERVICE

Una vez tenemos el servicio OData generado e implementado tenemos que activar el servicio para que pueda ser llamado, Para ello entramos en la transacción /IWFND/MAINT_SERVICE. Es algo que sólo hay que hacerlo una vez por servicio.

En una primera vez, tenemos que añadir el servicio a la lista.

Al pulsar el botón «Añadir servicio» se nos abrirá una búsqueda de servicios, buscamos el nuestro, lo seleccionamos y pulsamos «Añadir servicios seleccionados».

Añadimos nuestro servicio

Nos pedirá el nombre, paquete y si queremos que se genere el nodo ICF.

Una vez añadido el servicio lo tendremos disponible en la lista de servicios de la /IWFND/MAINT_SERVICE.


Probando el servicio

Una vez tengamos el servicio activo en la /IWFND/MAINT_SERVICE podemos entrar en el SAP Gateway Client para probar el servicio OData. Para ello podemos entrar con la transacción /IWFND/GW_CLIENT o bien desde la /IWFND/MAINT_SERVICE pulsando el botón Cliente SAP Gateway.

Podemos pulsar este botón o ir directamente a la Transacción /IWFND/GW_CLIENT

Una vez dentro del SAP Gateway Client veremos la siguiente pantalla. Pero esa URL propuesta lo único que nos dará será un XML de definición del servicio. Si queremos probarlo será en base a una entidad con las acciones CRUD.

Una ves aquí podemos seleccionar la entidad sobre la que queramos hacer la acción con el botón .

Seleccionamos BusinessPartnerSet porque es lo que hemos configurado

Resumen

El resultado de este servicio OData que hemos creado es una consulta básica a los datos de cabecera de los Business Partners. Tan básica que no tiene ni filtros y no sacamos datos de subentidades. Pero el objetivo es que tuviésemos algo que pueda ejecutarse de forma fácil para ver un resultado. En siguientes capítulos de esta serie me gustaría abordar:

  • Subentidades de una entidad (Expanded Entities)
  • Filtros en la consulta
  • Opciones de CRUD por entidad en OData
  • Documentar un servicio OData con OpenAPI/Swagger
  • Probar el servicio con Postman
  • Creación de un OData desde un Módulo de Función

Veremos a lo que llegamos, porque esto tiene mucho contenido, paso a paso.


Si te interesa, suscríbete al blog por email

La jaula de oro

Vamos a hablar de un concepto que es bastante común, y peligroso en los ambientes laborales especializados. La jaula de oro.

Lo que nunca podrá comprar el dinero es el tiempo. Tempus Fugit
Imagen creada con ChatGPT y Dall-E 3

La jaula de oro (o rat race en inglés) es el término utilizado para ilustrar ese comportamiento de ciertas personas que adecuan constantemente su nivel de vida a sus ingresos, haciendo que necesiten esos ingresos para mantener ese nivel de vida, y si suben sus ingresos aumentan el nivel de vida.

Siempre vivirán al límite de sus capacidades, sin poder permitirse un trabajo más relajado o más tiempo libre. Su poder adquisitivo se convierte en su jaula de oro, llena de cosas materiales, pero vacía de vida más allá del trabajo.


Quien mucho paga poco más puede ofrecer

Cuidado con cambiarte constantemente de trabajo buscando siempre la mejora económica sin mirar más. Hay empresas que lo único que pueden ofrecer es dinero para contratar/retener gente porque sin ese aliciente no tienen nada más atractivo. En uno de estos saltos puedes meterte en la jaula y luego salir es complicado.


La hipoteca como yugo

Porque cuando ganas X miles al año te compras una casa de Todoloquemedeelbanco y cuando ganas más te compras una mejor, porque el banco te va a dar más. Es ley de vida pero te estás hipotecando y no solo en el sentido puramente económico, te metes en una rueda de gastos fijos que no te deja parar a descansar.


La Educación Financiera es la clave (otra vez)

Por mucho que se cobre, si hacemos lo mismo que hacen otros que cobran menos, es decir, llevar una vida al límite de sus ingresos, estaremos en su misma situación.

Nunca se sabe qué pasará mañana y, sin agobios, hay que planificar el camino que nos gustaría seguir y qué haríamos ante diversos escenarios.

Hay que conocer conceptos como plan de ahorro, TAE, TIN, ROI, IPC, Inflación, deflación, tipos de interés del banco central, tipo interés variable, sistema francés de amortización, etc. He dicho conocer, no es necesario ser un experto.

Te pueden decir que te dan un préstamo al 2% TIN pero luego, con los gastos asociados eso se te sube al 5% TAE. O tienes que saber qué le pasa a tu hipoteca cuando el Banco Central Europeo sube 0,5 puntos los tipos de interés. O qué te conviene más, tipo fijo o tipo variable.

Si no pongo este video reviento.
Al final tenían razón

Conclusión

No es este Blog el indicado para explicar estos conceptos, ni yo puedo ir dando lecciones, pero el ideal sería tener espíritu crítico, ser realista, previsor, presentar los escenarios que pueden suceder y generar una red de seguridad mínima (ahorros, inversiones, etc.) Y, en definitiva, intentar trabajar en un sitio en el que estés cómodo, y poder tener capacidad de maniobra para descartar trabajos con gran salario porque te restan vida por dinero.

Que el dinero no sea lo que te quite el sueño.

Y no, no te va a tocar la lotería.

Tipos de archivos

En la entrada ‘¿Qué son los Servicios Web (Web Services)?‘ aparecieron muchos tipos de archivos (XML, JSON, WSDL…) dando por hecho que se conocen. Pero esto no tiene que ser así necesariamente, por lo que vamos a repasar los que, a mi juicio, son más interesantes, particulares y usados dentro del mundo de sistemas de información.

Antes de la digitalización de documentos la cosa no pintaba a bien

CSV (Valores Separados por Comas)

Los archivos CSV son fundamentales para el almacenamiento y la transferencia de datos tabulares. Su simplicidad y eficiencia los hacen ideales para el intercambio de grandes volúmenes de datos entre aplicaciones.

  • Características: Datos tabulares separados por comas, fácil de leer y escribir.
  • Usos: Intercambio de datos entre aplicaciones, manejo de grandes cantidades de datos.
  • Estructura: Filas con el mismo número de campos, separados por comas o punto y coma, líneas separadas por saltos de línea.
  • Ventajas: Simplicidad, bajo sobrecoste computacional.
  • Desventajas: Limitado en cuanto a tipos de datos, no es ideal para datos complejos.
  • Ejemplo:
nombre,edad,ciudad
Juan,30,Madrid

La forma más sencilla de crear archivos CSV es desde un fichero Excel (xlsx) ya que el propio Excel permite Guardar el archivo como un CSV separado por comas. Además la apertura de un CSV también es directa a Excel. Pero, cuidado, que esto conlleva sus riesgos, ya que el Excel quita los ceros a la izquierda de las celdas que considera números. En este caso hay que indicar siempre que todas las celdas son de tipo texto.


JSON (JavaScript Object Notation)

JSON se destaca por su facilidad de lectura y estructuración de datos en un formato de texto. Es ampliamente utilizado para la transmisión de datos en aplicaciones web.

  • Características: Texto legible, nombres y valores como indicadores.
  • Usos: Intercambio de información entre aplicaciones.
  • Estructura: Datos en formato de texto, incluyendo números, cadenas y fechas.
  • Ventajas: Fácil de leer, liviano y rápido.
  • Desventajas: No es tan adecuado para datos muy complejos.
  • Ejemplo:
{
  "estudiantes": [
    {
      "id": 1,
      "nombre": "Ana",
      "asignaturas": {
        "matematicas": 85,
        "ciencias": 90
      }
    },
    {
      "id": 2,
      "nombre": "Luis",
      "asignaturas": {
        "matematicas": 75,
        "ciencias": 80
      }
    }
  ]
}

Lo que yo recomiendo cuando tenemos un json y queremos poder verlo y entenderlo es usar o bien el Visual Studio o una web gratuita de JSON Viewer. Que se verá en jerárquico y pudiendo expandir o contraer nodos.


XML (Extensible Markup Language)

XML es un meta-lenguaje que permite definir lenguajes estructurados (WSDL, XHTML para páginas web, MathML para expresiones matemáticas, SVG para gráficos vectoriales y RSS para feeds web), utilizado en la representación de datos en la web y en el intercambio de información entre aplicaciones.

  • Características: Meta-lenguaje para definir otros lenguajes estructurados.
  • Usos: Representación de datos en la web, intercambio de datos, configuración. Es la base de los servicios web SOAP. Tanto para definición del WSDL y los XSD como para el. Intercambio de mensajes.
  • Estructura: Elementos y atributos, con reglas predefinidas.
  • Ventajas: Interoperabilidad, validación de documentos.
  • Desventajas: Puede ser verboso y complejo.
  • Ejemplo:
<estudiantes>
  <estudiante id="1">
    <nombre>Ana</nombre>
    <asignaturas>
      <matematicas>85</matematicas>
      <ciencias>90</ciencias>
    </asignaturas>
  </estudiante>
  <estudiante id="2">
    <nombre>Luis</nombre>
    <asignaturas>
      <matematicas>75</matematicas>
      <ciencias>80</ciencias>
    </asignaturas>
  </estudiante>
</estudiantes>

Es el formato de archivo que se usa en los servicios SOAP. Personalmente a mi me gusta pegarlos en Ultraedit y pulsar en «View as highlighting file type» para verlo bien.


PROPERTIES

Estos archivos son esenciales en aplicaciones Java, almacenando información como texto en un formato de clave-valor.

  • Características: Almacena valores emparejados a nombres.
  • Usos: Principalmente en aplicaciones Java.
  • Estructura: Texto con formato clave=valor.
  • Ventajas: Fácil de editar y leer.
  • Desventajas: Limitado en cuanto a tipos de datos.
  • Ejemplo:
language=ES
hostname=www.jorgeocampos.com

WSDL (Web Services Description Language)

WSDL es crucial para describir servicios web, especificando interfaces y protocolos en un formato basado en XML.

  • Características: Basado en XML para describir servicios web.
  • Usos: Define interfaces para servicios web.
  • Estructura: Tipos de datos, mensajes, tipos de puerto, bindings, servicios.
  • Ventajas: Permite una descripción detallada y precisa.
  • Desventajas: Complejidad y requerimiento de conocimientos específicos.
  • Ejemplo:
<definitions name="EstudiantesService"
             targetNamespace="http://www.example.com/estudiantes"
             xmlns="http://schemas.xmlsoap.org/wsdl/"
             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
             xmlns:est="http://www.example.com/estudiantes">
    <types>
        <schema targetNamespace="http://www.example.com/estudiantes"
                xmlns="http://www.w3.org/2001/XMLSchema">
            <complexType name="DetallesEstudiante">
                <sequence>
                    <element name="nombre" type="xsd:string"/>
                    <element name="matematicas" type="xsd:int"/>
                    <element name="ciencias" type="xsd:int"/>
                </sequence>
            </complexType>
        </schema>
    </types>
    <message name="ObtenerEstudianteRequest">
        <part name="idEstudiante" type="xsd:int"/>
    </message>
    <message name="ObtenerEstudianteResponse">
        <part name="detallesEstudiante" type="est:DetallesEstudiante"/>
    </message>
    <!-- ... Resto del WSDL ... -->
</definitions>

Como norma general, desde SAP no tenemos que generar WSDL «a mano», ya se encarga el propio sistema de generarlo y consumirlo vía Wizard. Pero me consta que otras tecnologías si que hay que hacer manualidades. Y lo se porque es un estándar y, en ocasiones, viene mal creado (SAP es estricto y no admite errores). No obstante para el las pruebas del consumo de servicios web SOAP y la validación del WSDL yo uso la aplicación gratuita SOAPUI.

Si un servicio funciona, sin errores de validación, en SOAPUI es que esta bien. Y así descartas problemas y te centras en temas de redes, firewall, etc.


XSD (XML Schema Definition)

XSD es un lenguaje que describe la estructura y las reglas de un documento XML, permitiendo validar su contenido. WSDL utiliza XSD para definir las operaciones, mensajes y protocolos de un servicio web.

  • Características: Define elementos y atributos en documentos XML.
  • Usos: Validación de documentos XML.
  • Estructura: Reglas y restricciones para documentos XML.
  • Ventajas: Marco claro para estructura XML.
  • Desventajas: Puede ser complejo de entender y manejar.
  • Ejemplo:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="estudiantes">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="estudiante" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="id" type="xs:int"/>
              <xs:element name="nombre" type="xs:string"/>
              <xs:element name="matematicas" type="xs:int"/>
              <xs:element name="ciencias" type="xs:int"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

YAML (YAML Ain’t Markup Language)

Los archivos YAML (YAML Ain’t Markup Language) son utilizados para la serialización de datos de forma que sean legibles por humanos. Son comunes en configuraciones, archivos de definición y transmisión de datos entre diferentes componentes de un sistema. Su estructura se basa en la utilización de sangrías para representar jerarquías de datos, lo cual facilita su lectura y escritura. Son muy usados en el mundo del desarrollo, especialmente en la configuración de proyectos y entornos.

  • Características: Lenguaje de serialización de datos, fácil de leer.
  • Usos: Creación de archivos de configuración, automatización (Ansible).
  • Estructura: Mapas y listas con jerarquía basada en sangría.
  • Ventajas: Lectura sencilla, sin caracteres de tabulación.
  • Desventajas: Necesidad de validar la sintaxis.
  • Ejemplo:
estudiantes:
- id: 1
nombre: Ana
asignaturas:
matematicas: 85
ciencias: 90
- id: 2
nombre: Luis
asignaturas:
matematicas: 75
ciencias: 80

JS (JavaScript)

Los archivos JS son el núcleo de la interactividad en las páginas web, almacenando código JavaScript para diversas funciones.

  • Características: Código JavaScript para funciones en páginas web.
  • Usos: Interacción dinámica en páginas web.
  • Estructura: Texto con código JavaScript.
  • Ventajas: Flexibilidad y dinamismo en páginas web.
  • Desventajas: Puede afectar la velocidad de carga de la página.
  • Ejemplo:
function saludo() { 
    alert('Hola Mundo!');
}

CSS (Cascading Style Sheets)

CSS dicta cómo se presentan los elementos HTML en la pantalla, siendo fundamental para el diseño de páginas web.

  • Características: Define la presentación de documentos HTML
  • Usos: Diseño y estilización de páginas web.
  • Estructura: Selectores y declaraciones (propiedad y valor).
  • Ventajas: Consistencia en el diseño en múltiples páginas.
  • Desventajas: Complejidad al manejar estilos extensos.
  • Ejemplo:
body {
  font-family: Arial, sans-serif;
  background-color: #f8f8f8;
}

h1 {
  color: #333;
  font-size: 24px;
}

p {
  color: #666;
  line-height: 1.6;
}

HTML (HyperText Markup Language)

HTML es el lenguaje utilizado para estructurar y presentar contenido en la World Wide Web.

  • Características: Lenguaje de marcado para la creación de páginas web.
  • Usos: Estructuración y presentación de contenido en la web.
  • Estructura: Etiquetas que definen elementos y estructura
  • Ventajas: Amplia adaptabilidad, fácil interpretación.
  • Desventajas: Limitado en funcionalidades interactivas avanzadas.
  • Ejemplo:
<!DOCTYPE html>
<html>
<head>
  <title>Mi Página Web</title>
</head>
<body>
  <h1>Bienvenidos a Mi Página Web</h1>
  <p>Este es un párrafo de introducción.</p>
  <h2>Sección 1</h2>
  <p>Información detallada sobre el primer tema.</p>
  <h2>Sección 2</h2>
  <p>Información detallada sobre el segundo tema.</p>
  <p>Para más información, visita <a href="http://www.jorgeocampos.com">nuestro sitio</a>.</p>
</body>
</html>

EDI (Electronic Data Interchange)

EDI facilita la transmisión estructurada de datos comerciales entre organizaciones, optimizando la eficiencia y precisión.

  • Características: Transmisión estructurada de datos entre organizaciones.
  • Usos: Transferencia de documentos electrónicos o datos de negocios.
  • Estructura: Varía según el estándar (EDIFACT, XML, ANSI ASC X12).
  • Ventajas: Ahorro de tiempo, evita errores de comunicación en papel.
  • Desventajas: Requiere estándares y protocolos específicos.
  • Ejemplo: No aplicable directamente, ya que depende del estándar utilizado.

BAT (Archivo Batch)

Un archivo `.BAT` es un archivo de procesamiento por lotes en sistemas operativos Windows. Contiene una serie de comandos de línea de comandos que se ejecutan secuencialmente. Es utilizado comúnmente para automatizar tareas repetitivas y puede ejecutar prácticamente cualquier comando que un usuario podría introducir en la consola de comandos.

  • Características: Ejecutan comandos de la consola automáticamente
  • Usos: Automatización de tareas en Windows.
  • Estructura: Serie de comandos de línea de comandos.
  • Ventajas: Automatización sencilla y rápida.
  • Desventajas: Limitado a las capacidades del intérprete de comandos.
  • Ejemplo: echo Hola Mundo

Se trata de un tipo de archivo bastante rudimentario. Pero yo lo uso todos los días para acceder al SAP GUI directamente sin necesidad de tener que introducir usuario y contraseña. Además lo he usado para automatizar ciertas acciones manuales encadenadas en una sola. Me lo apunto y si veo que tiene suficiente entidad lo explicaré.


INI (Archivos de Configuración)

Los archivos .ini son archivos de texto utilizados para la configuración de aplicaciones y sistemas. Contienen pares clave=valor organizados en secciones, lo que permite una fácil lectura y edición. A pesar de su simplicidad y utilidad, carecen de un estándar universal, lo que puede conducir a inconsistencias entre diferentes programas. Son ampliamente utilizados para personalizar la configuración del software y adaptar el comportamiento de los programas a las necesidades específicas del usuario.

  • Características: Texto simple con pares clave=valor.
  • Usos: Configuración de programas y sistemas.
  • Estructura: Secciones con claves y valores.
  • Ventajas: Fácil de leer y editar.
  • Desventajas: Falta de estándares universales.
  • Ejemplo:
[Settings]
language=es
theme=dark

Dll (Dynamic Link Library)

Los archivos .dll son bibliotecas de enlace dinámico esenciales en sistemas Windows para compartir funciones entre diversas aplicaciones. Aportan eficiencia al evitar la redundancia de código y facilitan actualizaciones. Sin embargo, pueden presentar desafíos de seguridad y dependencias complejas. Estos archivos no se ejecutan por sí solos, sino que son invocados por aplicaciones que requieren sus servicios.

  • Características: Contienen código y recursos utilizados por múltiples programas.
  • Usos: Compartir funciones y recursos en aplicaciones Windows.
  • Estructura: Binaria compilada.
  • Ventajas: Reutilización de código y eficiencia en memoria.
  • Desventajas: Problemas de seguridad y compatibilidad.
  • Ejemplo: No aplicable; es un archivo binario.

Ver las extensiones de archivo en Windows

No te fíes de los iconos que aparecen en el explorador de Windows. Si quieres ser tu quien controle que archivos estás visualizando y para poder modificar las extensiones de archivo, es necesario activar en Windows la visualización de extensiones de archivo.


En conclusión

El objetivo de este artículo no es el aprenderse todos estos tipos de archivos, además muchos de ellos se circunscriben a un lenguaje o aplicación que quizás nunca manejemos y otros son más comunes. Estos son los que yo, de una forma u otra, he manejado. Además de los evidentes claro (Excel, Word, PPT, TXT…)

Reuniones – II – Técnicas y Estrategias

Este artículo es la continuación del artículo «Reuniones» que publicamos anteriormente. En este artículo vamos a proponer estrategias para abordar las reuniones que son interesantes.

La Regla de las dos Pizzas

Jeff Bezos, CEO de Amazon y una de las personas más ricas del mundo, usa la «Reglas de las dos pizzas» para grupos de trabajo en las reuniones. Dicha regla establece que el grupo de personas de una reunión debe ser, como máximo, el número de personas que pueda alimentar dos pizzas.

¿Quién ha pedido la de piña?

Suponiendo que compramos dos pizzas familiares, esto supone unos 4-7 personas (depende lo glotonas que sean).


Técnica «Silent Start» de Jeff Bezos

Una vez más, Amazon, se trata de comenzar la reunión con unos minutos de silencio donde todos leen la agenda o los documentos relevantes. Esto asegura que todos estén en la misma página y reduce las repeticiones durante la reunión. Estos minutos pueden ser hasta 30 minutos. Suena loco, pero todos estarían conociendo el alcance de la reunión perfectamente. No es más que bloquear ese tiempo para preparar la reunión.


Técnica «Parking Lot» (Zona de Aparcamiento)

Si surgen temas interesantes pero no relevantes para la agenda actual, anótalos en una «zona de aparcamiento» para discutirlos en otro momento.

Esto sirve para centrarnos a tratar los temas agendados antes de abordar otro y, si no diese tiempo, ya tienes la agenda de la siguiente reunión hecha en un parking lot.


Método «No Agenda, No Asistencia»

No permitir reuniones a menos que haya una agenda claramente definida y compartida con antelación. Esto asegura que todos sepan de qué se tratará y puedan prepararse adecuadamente.

Dall-E 3 no maneja bien el texto

Es que a la gente le encanta hacer perder tiempo a los demás. Además, pensando en una agenda de reunión ya estás organizando el problema, duda o acciones a realizar. Ya estás avanzando en el trabajo.


Si llegas tarde, no entras

Otra buena. Para aquellos que, sistemáticamente, llegan tarde a las reuniones, haciendo perder el tiempo a los demás. Son los famosos 15 minutos de cortesía, pero que pasado este tiempo se pasa de cortesía a aspereza y se cierra la puerta.

La ves desde fuera

Días sin reunión Meeting free days

Un estudio publicado en el MIT Sloan Management Review que se realizó durante un año en 76 empresas de más de 1000 empleados reveló que introducir días sin reuniones en las empresas conduce a un aumento significativo en la productividad, colaboración, autonomía de los empleados y satisfacción laboral.

The Surprising Impact of Meeting-Free Days

MIT Sloan Management Review

Yo con tener 3 horas sin reuniones ya tengo suficiente.


Regla de los 5 Minutos

Si un tema no puede ser presentado y discutido en 5 minutos, debe ser tratado fuera de la reunión o en un grupo más pequeño y específico. Esto mantiene la reunión enfocada y rápida y obliga a los participantes a concentrarse en la esencia de lo que necesitan comunicar, eliminando divagaciones o detalles innecesarios.

Esta regla me parece muy drástica. Yo soy más partidario de usar esos 5 minutos con la técnica de Parking Lot. Si sale un tema a discutir, si se puede cerrar en 5 minutos, se discute, si no se aparca para otra reunión.


Reuniones «Stand-Up»

Esta estrategia implica realizar reuniones breves y de pie. Al no estar cómodamente sentados, los participantes tienden a ser más concisos y directos, lo que acorta la duración de la reunión. Pero claro, a ver quién apunta ahí. Lo que yo he visto y es muy interesante son las zonas abiertas con mesas y sillas para hacer reuniones más rápidas.


Limitación del Tiempo Total de Reunión

Establece un límite de tiempo total para tus reuniones, no solo por tema discutido. Por ejemplo, ninguna reunión puede exceder los 60 minutos. Esto obliga a todos a ser más conscientes del tiempo y priorizar los temas más importantes.


Uso de Técnicas de Facilitación

Incorpora técnicas de facilitación como el «round robin» para asegurar que todos tengan la oportunidad de hablar. Esto es particularmente útil para garantizar que incluso las voces más silenciosas sean escuchadas y que todos los puntos de vista sean considerados.

¡Yo tengo la banderita! ¡Ahora me escucháis a mí!
Luego le toca a Lucía

Sobre este tema profundizare en otro artículo, porque tiene mucho que contar.


Reuniones de Pie para Check-ins Diarios

Además de las reuniones de pie breves para discusiones específicas, considera implementar reuniones de pie diarias para actualizaciones rápidas del equipo. Estas pueden ser muy efectivas para mantener a todos alineados y enfocados en los objetivos diarios sin tomar demasiado tiempo.


Asignación de un «Abogado del Diablo»

Para temas importantes que requieren deliberación, asigna temporalmente a una persona el rol de «abogado del diablo». Su trabajo será cuestionar ideas y suposiciones, ayudando a evitar el pensamiento de grupo y fomentando una discusión más profunda.

Mira lo que ha hecho el %&@# de tu manager

Sesiones de «Brainwriting»

En lugar de un brainstorming tradicional donde las personas gritan ideas, prueba el «brainwriting», donde cada participante escribe sus ideas en silencio y las comparte de manera anónima. Luego, el equipo puede discutir estas ideas juntas. Esto fomenta la participación igualitaria y puede generar ideas más diversificadas y creativas.


Uso de «Timeboxing»

Asigna una cantidad fija de tiempo a cada punto de la agenda (timeboxing) y mantén el compromiso con esos límites. Esto ayuda a asegurar que se dedique tiempo a todos los temas importantes sin permitir que ninguno domine indebidamente la reunión. Lo que no se llegue a abordar, lo llevamos al Parking Lot para la siguiente o para el final de la reunión.


Mi Opinión

Todo esto está genial, pero necesita que la filosofía de la empresa y del cliente estén alineadas para que esto se lleve a cabo. Quizás para reuniones internas de la empresa, donde sólo hay un equipo y una filosofía, sea más factible. Sobre todo cuando estás en desarrollo de producto. Pero en Consultoría, puedes ser todo lo ordenado que quieras, tener todas las estrategias claras, pero el cliente no, y no estás ahí para enseñarle a hacer reuniones.

¡El Rey está desnudo!


Érase una vez, en un lejano reino, un vanidoso y autoritario rey que se preocupaba más por su vestimenta y apariencia que por el bienestar de sus súbditos. Un día, dos astutos estafadores llegaron al reino con la intención de aprovecharse de la vanidad del rey. Se presentaron ante él como tejedores y le ofrecieron confeccionar un traje especial, diciendo que era de un tejido tan extraordinario que solo las personas inteligentes y aptas para sus cargos podían verlo.

El rey, emocionado por la idea de tener un traje que le permitiera descubrir quiénes eran los incultos o incompetentes en su corte, aceptó inmediatamente y les pagó una gran suma de dinero. Los estafadores pusieron manos a la obra, fingiendo trabajar en un telar, pero en realidad no estaban tejiendo nada.

Cuando el rey envió a sus ministros más confiables a revisar el progreso, ninguno de ellos vio tela alguna en el telar, pero temiendo ser considerados tontos o incompetentes, todos elogiaron el tejido invisible y la belleza del traje.

Finalmente, el traje estuvo «listo» y los estafadores simularon vestir al rey con él. El rey, aunque no veía ninguna tela, no se atrevió a admitirlo, pues no quería ser considerado un incapaz. Así que marchó en un desfile ante sus súbditos, orgulloso de su nuevo «traje».

Todo el pueblo había escuchado sobre la mágica tela y, aunque ninguno veía el traje, nadie se atrevía a decir la verdad, temiendo ser considerado estúpido o incompetente. Así, todos elogiaron la vestimenta del rey.

Finalmente, un niño, que no tenía miedo de decir la verdad, exclamó: «¡El Rey está desnudo!» Este comentario hizo que todos los presentes se dieran cuenta de la realidad y comenzaran a murmurar lo mismo entre ellos. El rey, avergonzado decidido a terminar el desfile, continuó marchando más orgulloso que nunca, mientras sus cortesanos le seguían sosteniendo la cola de un traje que no existía.

Fábula del Rey desnudo
¡El Rey está desnudo!

¿Y por qué pongo esta fábula?

Pues porque en muchas ocasiones, en consultoría, se da esta situación. Todo el mundo ve al rey desnudo, el rey se ve desnudo, los cortesanos ven al Rey desnudo, pero nadie se atrevía a decirlo. Todo el mundo se engaña a sí mismo, y al resto.

Esto sucede cuando hay problemas en un proyecto de implantación (¿siempre?). Al inicio del proyecto se hace una planificación y unos hitos, que deben de estar fijados con pegamento, porque no hay quien los mueva. Nadie quiere ser el que diga que ¡El rey está desnudo! Ya pueden cambiar los requerimientos, estar mal dimensionados los equipos (tanto de cliente como de implantador), tener dificultades no identificadas, da igual. Nadie quiere decir la verdad, y se sigue echando más leña a la locomotora hasta que casi se llega a pegarse contra el muro de la realidad.

Se traspasa local

Es cierto que ambas partes han de mantener cierta tensión para evitar que se relaje el proyecto y caiga en más retrasos. Pero a mi, personalmente, no me gusta mentir (otra cosa es no decir toda la verdad) y aquí nos mentimos al solitario muchas veces (no siempre).

La Disonancia Cognitiva

En un estudio de Festinger, L. (1957), propuso que los individuos experimentan un malestar psicológico (disonancia) cuando mantienen dos pensamientos contradictorios, creencias, opiniones o actitudes, especialmente en relación con sus comportamientos y decisiones. Este malestar lleva a las personas a realizar cambios en sus actitudes, creencias o comportamientos para reducir la disonancia y restaurar el equilibrio psicológico. Es como estar en una dieta estricta y encontrarte cara a cara con una tentadora tarta de chocolate. Sabes que no deberías, pero oh, ¡cómo quieres!.

En el vasto reino de la consultoría, esta disonancia se manifiesta cuando sabemos que algo no va bien en el proyecto (el rey va desnudo, por cierto), pero seguimos adelante, aplaudiendo el traje invisible del monarca. ¿Por qué? Porque admitir lo contrario sería reconocer que hemos permitido que la situación llegue a este punto, o peor aún, que no hemos visto venir el desastre a pesar de las señales de advertencia.

¿Cómo estás Paco?
¡Muy bien!

Aquí entran en juego el orgullo, el miedo y una pizca de optimismo irracional. «Quizás si cerramos los ojos lo suficientemente fuerte y creemos con todas nuestras fuerzas, el traje mágico aparecerá», nos decimos. Pero al igual que el público en la fábula, a menudo nos encontramos participando en una danza colectiva de negación. Nos convencemos a nosotros mismos y a los demás de que todo va según lo planeado, incluso cuando internamente estamos gritando:

«¡Esto es un desastre!»