Novedades en 4D 21 LTS

Este documento destaca todas las nuevas funcionalidades introducidas en 4D 21 LTS, cubriendo todo lo añadido desde 4D 20 R2 hasta 4D 21. Cada funcionalidad incluye enlaces directos a su entrada de blog para ejemplos prácticos y a la documentación para detalles técnicos completos.

Además, las secciones con la etiqueta se centran específicamente en las novedades desde 4D 20 R10.

Este documento está dividido en diez secciones:

4D 21: SU MOTOR DE INTELIGENCIA ARTIFICIAL

4D 21 convierte a 4D en su propio motor de IA, ofreciendo un conjunto de herramientas de IA con todas las funciones, construido para aplicaciones comerciales del mundo real. Puede comunicarse con modelos alojados en la nube o localmente, generar y almacenar vectores, ejecutar búsquedas semánticas de forma nativa en ORDA, y conectar su lógica de negocio directamente a las conversaciones impulsadas por la IA, todo ello sin envolturas externas, procesos de parches o cambios arquitectónicos importantes.

La IA se convierte en una extensión natural de su código existente, tanto si su aplicación es nueva como si tiene décadas de antigüedad. Con soporte vectorial nativo, comunicación de modelos simplificada y herramientas para integrar comportamientos inteligentes en los flujos de trabajo diarios, 4D 21 hace que la integración de la IA sea sencilla, práctica y útil de inmediato.

Añada capacidades de IA con el componente inTEGRado 4D AIKit

4D AIKit es un componente 4D integrado que aporta capacidades compatibles con OpenAI directamente a su entorno 4D. Con sólo unas pocas líneas de código, puede automatizar procesos, enriquecer experiencias de usuario e integrar funciones inteligentes en la lógica de negocio sin salir de 4D.

AIKit incluye más de 30 clases diseñadas para soportar:

  • Generación de texto e interfaces basadas en chat

  • Etiquetado de imágenes, reconocimiento de objetos y análisis descriptivo

  • Transcripción de voz a texto

  • Generación visual a partir de prompts

  • Moderación de contenido textual

AIKit también permite flujos de trabajo avanzados que combinan modelos basados en la nube y alojados localmente. Puede crear herramientas de automatización de redes sociales, canalizaciones de contenidos con IA o experiencias de aprendizaje dinámico combinando el análisis de texto e imágenes en un único flujo.

SOPORTE VECTORIAL NATIVO PARA LA INTEGRACIÓN DE LA AI Y LA BÚSQUEDA SEMÁNTICA

Las funcionalidades inteligentes comienzan con un elemento fundamental: los vectores. Ya sea que esté construyendo búsqueda semántica, sistemas de recomendación, clasificación de documentos o agrupación de imágenes, los vectores son la estructura que representa el significado. Con 4D 21, los vectores se convierten en una parte nativa y de primera clase de la plataforma.

4D.Vector es una nueva clase integrada diseñada específicamente para almacenar y operar con integraciones de IA. Almacena datos numéricos de alta dimensión en un formato eficiente de memoria y soporta operaciones clave de similitud como similitud coseno, producto punto y distancia euclidiana directamente dentro de 4D. Esto hace que las consultas semánticas sean rápidas, precisas y totalmente integradas con su modelo de datos.

Puede almacenar vectores en su base de datos, utilizarlos en atributos de tipo clase y crear funcionalidades que ordenen, comparen o agrupen datos basándose en el significado y no en coincidencias exactas. Es la columna vertebral de los modernos flujos de trabajo basados en IA, ahora nativos en 4D.

Para complementar esto, 4D AIKit introduce la generación nativa de vectores a través de la API de integración de OpenAI. El nuevo método OpenAIEmbeddingsAPI.create() transforma cadenas o colecciones en instancias 4D.Vector en una sola llamada, sin manipulación de tokens, sin plomería HTTP, sin análisis JSON. Una vez generados, los vectores fluyen sin problemas en la puntuación de similitud, el filtrado semántico, los sistemas de clasificación o las consultas ORDA.

4D.Vector + AIKit embeddings ofrecen un pipeline completo para la inteligencia semántica:

  • Generar incrustaciones
  • Almacenarlas eficientemente
  • Compararlas y puntuarlas de forma nativa
  • Ejecute consultas semánticas directamente en 4D.

Es una arquitectura preparada para la IA, integrada al lenguaje y a la capa de datos.

CONSULTAS SEMÁNTICAS

Ahora puede integrar la búsqueda semántica directamente en sus consultas ORDA. En lugar de depender de procesos separados, puede comparar el campo vectorial de un registro con un vector de referencia y devolver al instante los resultados más relevantes, todo dentro de la misma gramática ORDA que ya utiliza.

La consulta acepta un simple objeto parámetro con un vector requerido y atributos opcionales como la similitud metric (que por defecto es coseno) y una similitud threshold.

// Step 1: Define the kind of profile you want to match semantically
$searchText:="senior project manager with strong HR background, based in France"

// Step 2: Create an AI client (local baseURL optional)
$client:=cs.AIKit.OpenAI.new("YourApiKey")
$client.baseURL:="http://127.0.0.1:1234/v1"

// Step 3: Generate an embedding vector for the search text
$embedResult:=$client.embeddings.create($searchText; "text-embedding-mxbai-embed-large-v1")
$semanticVector:=$embedResult.vector

// Step 4: Build the semantic query object with similarity options
$semanticQuery:={vector: $semanticVector; metric: "cosine"; threshold: 0.4}

// Step 5: Run the query — combine semantic match with traditional filter
$results:=ds.Profiles.query("yearsOfExperience >= 5 & expertise >= :1"; $semanticQuery)

Las condiciones vectoriales se combinan a la perfección con la lógica ORDA clásica, por lo que puede combinar la similitud semántica con los filtros tradicionales en una sola consulta. Ajustando el umbral, los resultados pueden pasar de ser amplios y ruidosos a estrechos y precisos, ofreciéndole resultados significativos y conscientes del contexto sin añadir complejidad. Todo el proceso se mantiene dentro de la gramática ORDA que ya conoce, manteniendo sus consultas limpias, expresivas y fáciles de mantener.

formatoS de Llamada y DE respuesta a las herramientas DE Ia

La llamada a herramientas de IA y los formatos de respuesta estructurados amplían 4D AIKit con la capacidad de integrar funciones específicas de negocio directamente en conversaciones impulsadas por IA. La llamada a herramientas le permite exponer funcionalidades seleccionadas de su aplicación, como «listar categorías de productos disponibles» u «obtener los productos más vendidos«, como herramientas a las que se puede llamar. Cuando un modelo de IA determina que se necesita una herramienta, 4D AIKit dirige automáticamente la llamada a sus funciones 4D registradas e integra el resultado en la respuesta. Esto evita la necesidad de cargar o volver a entrenar grandes conjuntos de datos, al tiempo que permite a la IA responder a las consultas de los usuarios con datos en vivo y específicos de la aplicación. En la práctica, esto significa que puede incrustar un asistente de chat en su aplicación, y cuando un usuario pregunta: «¿Cuáles son los 10 productos más vendidos por categoría?», el modelo puede llamar a sus funciones, recuperar datos reales del negocio y devolver la respuesta en lenguaje natural.

Además, 4D AIKit ahora soporta formatos de respuesta estructurados, lo que hace que la integración con los procesos posteriores sea más fiable. Además de texto plano, las respuestas pueden ser solicitadas como objetos JSON estrictos o forzadas a cumplir con un esquema JSON que usted defina. Esto resulta especialmente útil cuando es necesario transformar las entradas no estructuradas de los usuarios en datos predecibles, o cuando el contenido generado por IA debe fluir en flujos de trabajo automatizados sin limpieza manual.

En conjunto, las consultas semánticas, la llamada a herramientas y los formatos de respuesta estructurados hacen que la IA en 4D no sea sólo una capa conversacional, sino un componente del sistema totalmente integrado, capaz de recuperar datos empresariales relevantes, aplicar la lógica de forma segura dentro de su aplicación y ofrecer resultados estructurados que se adaptan perfectamente a sus flujos de trabajo. Y ahora, con AIKit de código abierto, obtendrá una visibilidad completa y la capacidad de darle forma, ampliarlo y hacerlo evolucionar en función de sus propias necesidades comerciales.

RED

4D 21 redefine la capa de red con una base moderna y orientada al rendimiento construida para las expectativas de conectividad de hoy en día. Tanto si ejecuta cargas de trabajo cliente/servidor de alta latencia, como si cambia de red a mitad de sesión, integra dispositivos sobre TCP o UDP u optimiza llamadas HTTP repetidas, toda la pila está diseñada para ofrecer conexiones más rápidas, una mayor resistencia y un control más estricto. QUIC se convierte en el protocolo de transporte recomendado para sesiones remotas más fluidas y de baja latencia, TCP obtiene API asíncronas con TLS y gestión precisa del tiempo de espera, UDP llega con una nueva API de socket basada en eventos y las solicitudes HTTP se benefician de la gestión de conexión persistente a través de agentes dedicados. Juntas, estas mejoras aportan velocidad, estabilidad y flexibilidad a todas las capas de comunicación de red de su aplicación.

QUIC: CONECTIVIDAD CLIENTE/SERVIDOR MÁS RESISTENTE

QUIC es una moderna capa de red diseñada para hacer que las conexiones Cliente/Servidor 4D sean más resistentes y confiables, especialmente cuando la calidad de la red varía. Con 4D 21, puede habilitar QUIC directamente desde los ajustes de estructura, usuario o base de datos, incluso en aplicaciones compiladas, lo que facilita las pruebas y el despliegue sin necesidad de reconstruir.

En cargas de trabajo reales, QUIC ofrece mejor rendimiento que ServerNet y maneja mejor las conexiones inestables o de alta latencia. Esto se traduce en interacciones más rápidas para los usuarios, un trabajo más fluido en redes Wi-Fi o móviles y una experiencia más resistente en general.

ServerNet sigue siendo compatible, pero QUIC es ahora la opción recomendada para los nuevos despliegues que pretendan beneficiarse de los estándares de transporte de Internet actuales. Antes de migrar un entorno existente, asegúrese de que su infraestructura soporta UDP, ya que algunas redes lo restringen.

Conmutación de red sin fisuras con QUIC

Con QUIC, el cambio entre interfaces de red ya no interrumpe su conexión 4D Remote. Tanto si pasa de Ethernet a Wi-Fi, cambia de adaptador o activa un portátil en una red diferente, el cliente restablece automáticamente su sesión con 4D Server y continúa la ejecución sin pérdida de datos. QUIC permite reconexiones rápidas y resistentes en condiciones de red cambiantes, haciendo que la experiencia sea fluida incluso en entornos móviles o inestables.

Su flujo de trabajo permanece intacto: el contexto de ejecución se conserva y los procesos se reanudan exactamente donde quedaron. Del lado del servidor, la dirección IP del cliente se actualiza en tiempo real en el cuadro de diálogo de administración, los registros de diagnóstico y los atributos de sesión, lo que ofrece a los administradores una visibilidad completa. Esto hace que 4D Remote sea significativamente más robusto cuando las condiciones de la red cambian con frecuencia.

REDES TCP MODERNAS Y SEGURAS (CLIENTES, SERVIDORES Y TLS)

4D 21 ofrece una pila de red TCP completa y moderna que reemplaza los antiguos comandos de Internet de 4D con un enfoque más rápido, más limpio y totalmente asíncrono.

La clase TCPConnection maneja la comunicación del lado del cliente con una API orientada a objetos y retrollamadas como onConnection, onData, onShutdown y onError. Puede enviar blobs o texto, reaccionar a los eventos a medida que se producen, y conectarse a dispositivos externos, servicios o protocolos personalizados con facilidad.

La clase TCPListener añade la parte del servidor. Le permite escuchar en un puerto, aceptar o rechazar conexiones entrantes, y entregar cada cliente aceptado a una instancia dedicada de TCPConnection. Esto le da un modelo consistente para construir servicios ligeros o pasarelas de dispositivos directamente en 4D.

Para asegurar todo, las conexiones TCP ahora soportan encriptación nativa TLS/SSL. Activando el atributo TLS en el nuevo parámetro options de 4D.TCPConnection.new(), se establecen sesiones cifradas automáticamente, con TLS 1.3 como protocolo por defecto. Los puertos estándar y seguros pueden ejecutarse en paralelo, y la comunicación cifrada comienza en cuanto finaliza el apretón de manos.

Las conexiones TCP también disponen de una propiedad .connectionTimeout, que permite controlar directamente el tiempo de espera antes de abandonar una conexión bloqueada o que no responde. Esto permite ajustar los umbrales de latencia, fallar rápidamente en condiciones de red deficientes y evitar que la interfaz de usuario se bloquee o las esperas interminables.

En conjunto, estas funcionalidades ofrecen una base moderna, flexible y segura para implementar protocolos TCP personalizados y construir soluciones de red cliente y servidor completamente en 4D.

NUEVOS COMANDOS UDP

La nueva clase 4D.UDPSocket ofrece a los desarrolladores un control total sobre la comunicación en tiempo real basada en eventos utilizando el protocolo UDP. Admite los modos cliente y servidor y está optimizada para la transmisión rápida de datos sin conexión en casos de uso como la mensajería IoT, la supervisión de dispositivos en tiempo real o la señalización interna.

Esta clase está totalmente orientada a eventos y admite retrollamadas como onData, onError y onTerminate. Los desarrolladores pueden emitir y recibir paquetes utilizando send(), analizar los metadatos de los paquetes a través de 4D.UDPEvent, y registrar el tráfico en el archivo unificado 4DTCPUDPLog.txt.

La clase UDPSocket, compatible con subprocesos preferentes, se ejecuta de forma eficiente en entornos de alta concurrencia y sustituye al antiguo plugin Internet Commands por una alternativa moderna y orientada a objetos.

OPTIMICE SUS CONEXIONES HTTP CON LOS AGENTES HTTP

4D 21 introduce los agentes HTTP, dándole más control sobre cómo su aplicación se conecta a los servidores HTTP. Los agentes gestionan la persistencia y reutilización de las conexiones, evitando la sobrecarga de renegociar una nueva conexión, especialmente TLS/SSL, para cada petición.

Por defecto, todos los comandos de HTTPRequest utilizan ahora un agente integrado que mantiene vivas las conexiones. Cuando necesite más control, puede crear su propio agente para afinar comportamientos como:

  • la gestión keep-alive

  • el número máximo de conexiones simultáneas

  • los tiempos de espera de conexión

  • la configuración TLS/SSL a nivel del agente

Utilizar un agente es sencillo, lo crea una vez y lo pasa a través de sus opciones de demanda. Dado que HTTPAgent es un objeto compartido, también puede mantener un único agente para todas las peticiones al mismo servidor, o incluso reutilizarlo en varios servidores, manteniendo cada uno su propio pool de conexiones.

Los agentes HTTP hacen que las llamadas repetidas sean más rápidas, predecibles y fáciles de gestionar, especialmente en aplicaciones que interactúan mucho con API externas.

ORDA

4D 21 amplía ORDA con un control más profundo del ciclo de vida y un manejo de datos más refinado, permitiendo a los desarrolladores construir una lógica de negocio más limpia y autónoma. Con los nuevos eventos de ciclo de vida, soporte de constructores, filtrado de entidades más inteligente y funciones de limpieza de memoria, la capa de datos se convierte no sólo en un sistema de almacenamiento, sino en un motor de respuesta basado en reglas integrado directamente en su modelo.

MODELO COMPLETO DE EVENTOS DE CICLO DE VIDA DE LAs ENTIDADes

4D 21 introduce un modelo de ciclo de vida completo y unificado para las entidades ORDA, dándole un control total sobre cómo se comportan los datos desde su creación hasta su eliminación. En lugar de dispersar las reglas a través de formularios, APIs o disparadores, ahora usted define toda su lógica de negocio directamente dentro de sus clases de datos: más limpio, centralizado y fácil de mantener.

Este ciclo de vida comienza en el momento en que se crea una entidad. Los constructores de entidades le permiten asignar valores por defecto, inicializar la lógica específica del contexto (como el usuario o la sesión actual) o llenar automáticamente los atributos. En cuanto se modifica una entidad en memoria, el evento onTouch reacciona a esos cambios en tiempo real, lo que facilita la normalización de valores, la aplicación de reglas o la preparación de actualizaciones dependientes antes de que comience cualquier operación de guardado.

Cuando se guarda una entidad, 4D 21 ejecuta ahora una secuencia de tres fases: validateSave, saving, y afterSave. Esto le permite bloquear las operaciones no válidas, aplicar la lógica de negocio mientras se está guardando y lanzar acciones de seguimiento una vez que la operación se ha completado. La misma secuencia de tres fases existe para las eliminaciones con validateDrop, dropping, y afterDrop, lo que le permite evitar eliminaciones no autorizadas, limpiar los datos relacionados y ejecutar la lógica posterior a la eliminación de forma coherente.

Todos los eventos están disponibles tanto a nivel de entidad como de atributo. Los eventos de validación pueden bloquear operaciones cuando no se cumplen las reglas, mientras que los post-eventos siempre se ejecutan, incluso si la operación falla, garantizando un comportamiento fiable y predecible en todo el modelo.

Al consolidar esta lógica dentro de sus clases de datos ORDA, el comportamiento de la entidad se vuelve predecible, autónomo y consistente en toda su aplicación. Las reglas de negocio ya no están ocultas en triggers. Los sistemas externos pueden integrarse limpiamente a través de ganchos de eventos nativos. Y en los proyectos basados en ORDA, los triggers tradicionales ya no son necesarios, los eventos del ciclo de vida ofrecen toda la potencia de ORDA en una arquitectura más limpia y fácil de mantener.

Restringir los datos en las selecciones de entidades

Controlar quién ve qué datos es fundamental en las aplicaciones empresariales, y ahora puede definir esas reglas una vez, de forma limpia y directamente en su modelo de datos.

Mientras que el sistema de permisos existente en 4D controla si los usuarios pueden acceder a toda una clase de datos, la nueva función restrict() introducida en 4D 21 refina aún más ese acceso. Le permite aplicar filtros contextuales en selecciones de entidades basadas en valores de sesión, roles de usuario o cualquier otra lógica de tiempo de ejecución.

En lugar de aplicar filtros manualmente a través de su código, usted los define una vez dentro de la clase de datos utilizando la función restrict(). Por ejemplo, un vendedor podría limitarse a ver sólo los clientes que gestiona, mientras que los administradores seguirían viendo el conjunto de datos completo, todo ello determinado automáticamente durante cada operación de lectura como query() o all().

Este enfoque centralizado no sólo refuerza la seguridad, sino que también mantiene la lógica limpia y coherente tanto en contextos web como cliente-servidor.

SELECCIONES DE ENTIDADES LIMPIA CON ELIMINACIÓN AUTOMÁTICA DE espacios

Cuando los usuarios eliminan entidades de una selección, la interfaz suele quedar abarrotada de marcadores de posición vacíos. Esto rompe el flujo, añade fricción y hace que su interfaz de usuario parezca menos sensible.

Con 4D 21, la nueva función clean() resuelve este problema en una sola línea. Después de realizar un drop, basta con llamar a .clean() sobre la selección de entidades para eliminar automáticamente los huecos dejados por las entidades eliminadas. Es fluido, eficiente y restaura una vista pulida e ininterrumpida sin necesidad de reconstrucción manual.

Este pequeño añadido se traduce en una gran mejora de la calidad de la interfaz y de la experiencia del usuario. Y no se limita a la interfaz de usuario: la API REST de $entityset también admite el parámetro clean, que permite que las respuestas de la API devuelvan datos limpios y sin espacios incluso después de una eliminación.

Tanto si desarrolla una interfaz de escritorio como si trabaja con clientes web, esta función mantiene sus vistas de datos ordenadas y las interacciones con el usuario fluidas.

4D Qodly Pro

4D Qodly Pro le permite ampliar su aplicación con modernas interfaces basadas en navegador, todo ello sin escribir una sola línea de HTML o JavaScript. Con un editor visual de arrastrar y soltar, puede construir formularios web reactivos y conectarlos directamente a su lógica de negocio 4D.

Las páginas Qodly pueden ser integradas directamente en formularios 4D clásicos usando un área Web. Desde el punto de vista del usuario, todo se siente como una interfaz única y unificada. No hay necesidad de ventanas separadas o licencias adicionales. La página Qodly integrada comparte la misma sesión y licencia que el cliente 4D Remote, manteniendo la experiencia transparente y sin costo adicional.

Si quiere ver lo rápido que esto funciona en la práctica, puede ver la repetición del webinario oficial de 4D Qodly Pro, un tutorial de cómo añadir formularios basados en navegador a una aplicación 4D real.

CONSTRUIR INTERFACES WEB MODERNAS SIN REESCRIBIR SU APLICACIÓN

4D Qodly Pro le permite crear interfaces modernas basadas en un navegador directamente sobre su aplicación 4D existente, sin necesidad de aprender frameworks web, reescribir la lógica o gestionar bases de código separadas. Usted diseña páginas visualmente, enlaza datos visualmente, asegura el acceso visualmente, y expone APIs visualmente, todo mientras permanece dentro de su flujo de trabajo 4D familiar. El resultado es un camino más rápido a la web con menos código, menos complejidad y sin desconexión entre su interfaz de usuario y su lógica de negocio.

  • Extienda o traslade sus aplicaciones de escritorio a la web sin reestructurar su arquitectura: las páginas Qodly se asienta sobre el modelo ORDA y las clases de servidor existentes. Su lógica, base de datos y reglas de seguridad permanecen exactamente donde están.

  • Construya interfaces reactivas visualmente utilizando los componentes reutilizables: arrastre los componentes al canvas, configúrelos a través de paneles laterales y enlácelos a qodlysources sin código. Los componentes elaborados y las plantillas listas le permiten montar pantallas rápidamente con un estilo coherente.

  • Acelere el desarrollo eliminando la complejidad del frontend: la vinculación de datos, el formato, los estados condicionales, los eventos y la navegación son visuales. No se requiere HTML, CSS o JavaScript, sólo la lógica 4D y los paneles de Qodly Studio.

  • Utilice la licencia 4D Client que ya tiene: cuando una Página Qodly está integrada en un área Web de un cliente 4D Remoto, se ejecuta bajo la misma sesión y licencia. Los usuarios ven una interfaz unificada, y el despliegue sigue siendo sencillo y rentable.

  • Mantenga a los equipos productivos con una experiencia familiar de arrastrar y soltar: Qodly Studio sigue el modelo del editor de formularios de 4D, lo que facilita a los nuevos desarrolladores unirse al proyecto y a los equipos experimentados de 4D trabajar más rápido.

  • El diseño, la lógica y los datos viven en el mismo entorno: Qodly Studio maneja el diseño, Qodly Pages define la estructura, y sus reglas de negocio se sientan en sus clases. Nada se dispersa a través de archivos externos o marcos desconectados.

  • Construya visualmente un comportamiento dinámico: los estados condicionales y no condicionales permiten que las páginas se adapten a los roles de los usuarios, a los cambios de datos o a las interacciones de la interfaz de usuario, todo ello configurado a través de paneles guiados. Podrá ver exactamente cuándo y por qué aparecen, cambian o reaccionan los elementos.

  • Defina funciones, privilegios y reglas de acceso de forma visual: una interfaz específica le permite crear jerarquías de roles, asignar privilegios y revisar los permisos finales de un vistazo. Precisa quién puede leer, actualizar, eliminar o ejecutar cada parte de su aplicación.

  • Exponga la lógica del servidor como gestores HTTP sencillos y visuales: usted escoge una clase, elige un método, define un modelo de URL, y Qodly se encarga del enrutamiento. Es una manera fácil de publicar APIs o integrar sistemas externos sin capas o frameworks adicionales.

  • Depure páginas directamente en su servidor 4D: puede previsualizar los cambios en la interfaz de usuario al instante, inspeccionar qodlysources y utilizar el depurador 4D dentro de Qodly Pro – ejecutando exactamente donde se ejecuta la lógica.

Componentes personalizados: Extienda Qodly con sus propios bloques de construcción

4D Qodly Pro también soporta componentes personalizados, dándole una manera de ampliar la interfaz de usuario cuando se necesita algo más allá del conjunto de herramientas integradas.

  • Añada nuevas capacidades con sus propios componentes React: los widgets complejos, las visualizaciones especializadas o las interacciones únicas se pueden construir como componentes React y cargar directamente en Qodly Studio.

  • Reutilizarlos a través de proyectos o compartirlos dentro de la comunidad: los componentes personalizados se comportan como componentes nativos una vez instalados, arrastrar y soltar, vincular datos, aplicar estilos y desencadenar eventos exactamente de la misma manera.

  • Desarrollo eficiente: en lugar de volver a crear una interfaz de usuario especializada cada vez, instale un componente una vez y utilícelo en todas partes.

  • Se integra perfectamente con el resto de la interfaz de usuario: usted controla la apariencia, el comportamiento y la integración, mientras que Qodly garantiza que los componentes se ejecuten de manera eficiente dentro de su tiempo de ejecución.

Y con una comunidad activa que comparte continuamente componentes personalizados, puede enriquecer su caja de herramientas sin tener que construirlo todo usted mismo.

Configuración automática de Qodly Studio

Al iniciar Qodly Studio por primera vez desde el modo Diseño 4D, se activa un asistente de configuración automática. Todos los parámetros requeridos: activación del servidor REST, sesiones escalables, puertos del servidor web, se detectan y se presentan con un aviso para activarlos.

Si se acepta, los servicios se reinician según sea necesario y Qodly Studio se abre en el navegador. Si se rechaza, no se produce ningún cambio. El flujo de trabajo es fluido, rápido y sin intervención por parte de los nuevos usuarios.

Sesiones compartidas e interacciones entre aplicaciones cliente/servidor y 4D Qodly Pro

Cuando una página Qodly se muestra en un área Web de un cliente 4D Remote, se ejecuta bajo la misma sesión y licencia. Esto significa que no se consume ninguna licencia extra, y que el mismo contexto de sesión fluye sin problemas entre el formulario de escritorio y la página 4D Qodly Pro.

La autenticación y los privilegios se conservan automáticamente, y los datos de sesión se pueden pasar para inicializar la página web con el contexto del escritorio, por ejemplo, mostrando detalles de la entidad actualmente seleccionada.

Además de compartir la sesión, las acciones de 4D Qodly Pro permiten una interacción bidireccional directa entre los formularios 4D y las páginas 4D Qodly Pro. Desde una página Qodly, los desarrolladores pueden llamar funciones 4D a través del objeto $4d, previamente inicializado con el comando WA SET CONTEXT. A la inversa, un formulario 4D puede actualizar las Fuentes Qodly directamente, asegurando un estado y lógica sincronizados en ambos entornos.

Juntas, estas mejoras facilitan la combinación de formularios 4D clásicos con páginas Qodly modernas en una única aplicación, unificando sesiones, interacciones y contexto a la vez que se evitan inicios de sesión redundantes, licencias adicionales o trabajo de integración complejo.

Internacionalización integrada (i18n)

4D Qodly Pro incluye internacionalización integrada (i18n), para que sus aplicaciones puedan adaptarse sin problemas a múltiples idiomas y configuraciones regionales.

Los idiomas soportados se definen como locales en la nueva sección de Localización, donde las claves de traducción y los valores pueden ser gestionados y vinculados a los componentes. La elección del idioma se realiza a través de la fuente Qodly integrada a UserLanguage, que aplica la selección del usuario en tiempo real.

Los retrocesos automáticos cubren los datos de sesión, los valores predeterminados del navegador o una configuración regional primaria, mientras que la compatibilidad nativa de derecha a izquierda (RTL) hace que idiomas como el árabe resulten naturales. Al cambiar de idioma, el contenido se actualiza al instante, creando una experiencia fluida y personalizada.

Esto le permite expandirse a nuevos mercados, reducir la fricción de la integración y reforzar la confianza del usuario sin rediseñar su interfaz de usuario ni añadir complejidad. Ya se trate de un lanzamiento local o global, su producto estará listo para hablar el idioma de sus usuarios.

Informe de eventos de la Página Qodly

El informe de eventos ofrece una visión clara y unificada de todos los eventos de su página, ya procedan de acciones estándar, acciones de navegación, funciones de clase o acciones de diálogo. Muestra qué eventos se declaran, dónde se implementan y el orden exacto en que se ejecutan.

Al hacer transparente el flujo de eventos, acelera la depuración, descubre al instante solapamientos o controladores que faltan y facilita la optimización. Los equipos pueden colaborar más fácilmente, y usted gana confianza sabiendo exactamente cómo se comporta su página.

Es una forma sencilla de aportar claridad, precisión y eficacia a la gestión de eventos, tanto si está creando una pequeña aplicación como una solución a gran escala.

CONTROLES DE ZOOM DEL CANVAS

El editor de páginas 4D Qodly Pro incluye controles de zoom en el canvas para facilitar el trabajo con diseños complejos. Los desarrolladores ahora pueden acercar, alejar o restablecer la vista directamente desde la barra de herramientas, con soporte para atajos de teclado y navegación con la rueda del ratón.

El nivel de zoom actual se muestra en la interfaz, lo que ofrece a los desarrolladores un control preciso sobre la forma de ver y organizar los componentes en el lienzo.

Estas mejoras mejoran la navegación, la precisión del diseño y la usabilidad general, alineando el editor de páginas con los estándares de las modernas herramientas de diseño visual.

BASE DE DATOS

4D 21 refuerza las bases de su modelo de datos con funcionalidades que aportan más estructura, más fiabilidad y mejor rendimiento a escala. Ahora puede asignar clases directamente a los campos de objetos para garantizar la validación de la forma y de los modelos tipados más seguros. Las selecciones de registros se mantienen coherentes incluso cuando los datos cambian en segundo plano, lo que garantiza resultados estables en operaciones de larga duración. Y con la nueva compatibilidad con UUID v7, los identificadores se ordenan en el tiempo y se indexan fácilmente, lo que facilita la clasificación de grandes conjuntos de datos y agiliza las consultas en sistemas distribuidos.

CAMPOS DE OBJETO DE TIPO CLASE EN EL EDITOR DE ESTRUCTURAS

En el editor de estructuras, los campos de objetos pueden asignarse ahora a una clase específica. No se trata sólo de metadatos, sino de un contrato que 4D aplica a varios niveles.

Asigne una clase de usuarios a un campo de objeto y obtendrá:

  • Autocompletado a nivel de la propiedad

  • Verificación de sintaxis en tiempo de compilación

  • Validación de la forma del objeto en tiempo de ejecución 

Si el objeto no coincide con la clase declarada, 4D emite un error. La estructura se convierte en esquema, sus datos permanecen limpios, y cuando se combina con 4D.Vector, la definición de un atributo vectorial tipado dentro de su clase significa que cada entidad lleva su propia huella semántica, lista para la evaluación de similitud, la clasificación impulsada por IA o las recomendaciones inteligentes.

ASEGURE LA COHERENCIA EN LA SELECCIÓN DE REGISTROS

4D 21 refuerza la fiabilidad de los datos garantizando que las selecciones de registros permanezcan estables incluso cuando se eliminan registros y se crean otros nuevos en segundo plano.

En versiones anteriores, la eliminación de un registro podía liberar un espacio interno que más tarde podría ser reutilizado por un registro recién creado, haciendo que una selección existente incluyera inesperadamente datos que no coincidían con los criterios originales.

Ahora, una vez que se crea una selección, ésta permanece consistente durante toda su vida útil. Los registros eliminados simplemente desaparecen de la selección, y los registros recién creados nunca se cuelan en ella. Esto se aplica tanto a las selecciones clásicas QUERY como a las selecciones de entidades ORDA.

Con esta actualización, los bucles, las fusiones de correo, las tareas en segundo plano y las selecciones de larga duración se comportan exactamente como se pretendía, sin sorpresas, sin verificaciones adicionales, sólo resultados fiables.

COMPATIBILIDAD CON UUIDS V7

La generación de UUID es ahora más inteligente. Generate UUID admite ahora identificadores de la versión 7. Esto significa que sus UUID no sólo son universalmente únicos, sino que también se pueden ordenar cronológicamente, son compatibles con bases de datos y están diseñados para sistemas distribuidos modernos.

Internamente, los UUID de la versión 7 integran datos de fecha y hora, lo que los hace ideales para el almacenamiento ordenado y más fáciles de indexar. Se trata de un pequeño cambio con un enorme impacto en la escala y el rendimiento de las consultas.

Componente 4D

4D 21 aporta dos grandes avances al desarrollo de componentes: un gestor de dependencias totalmente moderno y una edición de componentes en el proyecto sin fisuras. Puede cargar «sólo lo que necesita» con la gestión opcional de componentes, extraer componentes directamente de GitHub, mantener todo alineado automáticamente con su versión 4D, y confiar en 4D para resolver dependencias recursivas y evitar conflictos. Al mismo tiempo, puede ver, editar y depurar el código de los componentes directamente dentro de su proyecto anfitrión, haciendo que el desarrollo basado en componentes sea más rápido, más limpio y mucho más fácil de mantener. Juntos, estos cambios crean un flujo de trabajo optimizado y predecible para crear, compartir y escalar componentes entre equipos y proyectos.

PERFECTA INTEGRACIÓN DE COMPONENTES EN EL PROYECTO

El desarrollo de componentes en 4D ha dado un gran paso adelante. Los métodos y clases de un componente, compartido o no, ahora pueden verse y editarse directamente en el proyecto anfitrión, sin tener que abrir el componente por separado o interrumpir el enfoque durante el desarrollo. Ahora todos los métodos pueden editarse en el acto, y pueden crearse componentes enteros desde la interfaz de usuario del host, inicializarlos con el espacio de nombres, los archivos y la estructura y, a continuación, editarlos inmediatamente en modo interpretado.

Más allá del código, la visibilidad se ha ampliado para incluir formularios de sólo lectura, carpetas, constantes, comandos, plug-ins e incluso una papelera específica para cada componente. Las constantes mantienen el vínculo con sus componentes de origen, lo que garantiza la coherencia en toda la aplicación, mientras que los nuevos flujos de creación conectan automáticamente las dependencias y establecen la estructura para los modos gestionado y heredado.

Todo ello agiliza la iteración de componentes, facilita la modularización y hace que los proyectos sean más limpios y transparentes. Se trata de un hito importante en el acercamiento de los componentes al flujo de trabajo del proyecto anfitrión.

GESTIÓN OPCIONAL DE los COMPONENTES

4D 21 ya no incluye componentes 4D estándar. En su lugar, usted declara sus necesidades a través del diálogo Add Dependency, y 4D los obtiene e instala automáticamente bajo demanda. Desde ahí, puede acceder directamente al catálogo completo de componentes 4D, incluyendo 4D AI Kit, 4D NetKit, 4D View Pro, SVG, y más, todos publicados como código abierto en GitHub. Esto le da la flexibilidad de instalar sólo lo que necesita, mientras que también hace que sea más fácil explorar el interior de los componentes, contribuir con mejoras, y alinear sus proyectos con las necesidades cambiantes.

  • Dependencias específicas: sólo se instalan los componentes necesarios.

  • Alineación de versiones: las dependencias siguen su versión actual de 4D por defecto, asegurando la compatibilidad sin verificaciones manuales.

Al actualizar a 4D 21, los proyectos existentes pueden descargar automáticamente los componentes requeridos, mientras que las bases de datos binarias continúan accediendo a ellos a través del instalador o del portal de descargas.

AutomatiZAR la compatibilidad de dependencias con Follow 4D Version

La regla Follow 4D version simplifica la gestión de dependencias sincronizando automáticamente sus dependencias con su entorno 4D. Esto reduce los problemas de compatibilidad y le ahorra tiempo.

  • Compatibilidad automática: las dependencias se alinean con su versión 4D, sin necesidad de seguimiento manual.
  • Actualizaciones y retrogradaciones sin esfuerzo: las dependencias se actualizan automáticamente al actualizar o retrogradar 4D.
  • Resolución fiable de dependencias: el sistema resuelve las dependencias basándose en convenciones estructuradas de nomenclatura de etiquetas para versiones LTS y R.

INTEGRACIÓN DE COMPONENTES GITHUB-NATIVE Y CONTROL DE DEPENDENCIAS

La integración de componentes en 4D 21 está diseñada para la forma en la que se desarrolla actualmente. Los equipos comparten código. Las bibliotecas internas evolucionan. Los componentes públicos mejoran. Y todo se mueve a través de GitHub. El nuevo sistema de dependencias conecta su proyecto directamente con esos repositorios para que los componentes se instalen, actualicen y se mantengan alineados con su fuente sin ninguna manipulación manual.

Una vez que se hace referencia a un componente, 4D lo extrae directamente de GitHub y aplica reglas semánticas de versión para que pueda decidir exactamente cómo de estricta o vagamente desea realizar un seguimiento de las actualizaciones. Puede congelar una versión cuando la estabilidad es importante, mantenerse dentro de un rango seguro cuando desea actualizaciones controladas, o seguir la última versión cuando está iterando rápidamente. Cuando una nueva versión está disponible en GitHub, 4D la destaca inmediatamente para que pueda actualizar un solo componente o todo el conjunto en un solo paso.

Los repositorios privados encajan perfectamente. Usted añade un token una vez, y 4D se encarga del resto, obteniendo los componentes internos tan fácilmente como los públicos.

Esto crea un flujo limpio y predecible. Cada componente es trazable. Cada actualización es intencional. Cada dependencia permanece conectada al código base que la define. La adopción se hace más fácil, el mantenimiento se aligera y compartir código entre equipos se convierte en una parte natural de su flujo de trabajo.

RESOLUCIÓN Y GESTIÓN RECURSIVA DE DEPENDENCIAS

El Gestor de componentes comprende ahora el árbol completo. Una vez que un componente está dentro de su proyecto, 4D analiza cada dependencia de la que depende, carga las necesarias automáticamente y comprueba los conflictos antes de que aparezcan.

La carga recursiva garantiza que nunca falten subdependencias. Los rangos de versiones se resuelven de forma inteligente para que múltiples componentes puedan depender de la misma librería sin romper la compilación. Y si aparece un ciclo, 4D lo bloquea de raíz para mantener estable su proyecto.

Usted obtiene una clara visibilidad de la estructura: dependencias declaradas, indirectas y exactamente qué componente requiere qué. Cada adición, actualización o eliminación se propaga a través del árbol para que su proyecto se mantenga coherente sin necesidad de limpieza manual.

Añadir y eliminar componentes locales

La gestión de componentes locales en 4D 21 es ahora mucho más fluida y predecible. La interfaz de las dependencias del proyecto le ofrece un único lugar para añadir, eliminar y organizar componentes sin tocar el sistema de archivos o buscar en la configuración del proyecto.

Todo está controlado por dos archivos: dependencies.json, que centraliza todas las dependencias del proyecto para mantener la coherencia, y environment4d.json, que gestiona las rutas personalizables de los componentes. Cuando añade un componente local, 4D escribe la entrada correcta automáticamente. Si el componente vive en otro lugar, ambos archivos se actualizan para que el proyecto se abra limpiamente en cualquier máquina, en macOS o Windows. La eliminación de un componente sigue el mismo flujo, con avisos de confirmación para evitar roturas accidentales y limpieza automática para mantener su configuración estable.

Es necesario reiniciar para que cualquier cambio surta efecto, y 4D lo guía con notificaciones claras. Todo el proceso reduce la fricción, el tiempo de configuración y le ofrece un acceso más rápido y fiable a los componentes de los que depende.

UTILIzar las CLASES ENTRE COMPONENTES CON ESPACIOS DE NOMBRES DECLARADOS

4D 21 simplifica la interacción entre componentes. Cuando un componente declara un espacio de nombres, todas sus clases quedan automáticamente disponibles para cualquier otro componente del mismo proyecto.

Esto elimina la necesidad de configuraciones especiales o soluciones, sólo tiene que incluir los componentes que necesita, y puede utilizar directamente sus clases a través de cs.<namespace> en su código.

Este enfoque hace que el desarrollo basado en componentes sea más modular, predecible y fácil de mantener.

ESTRUCTURA DE LOS COMPONENTES ACTUALIZADA PARA LA NOTARIZACIÓN DE SILICON MACOS

4D 21 introduce una estructura de componentes rediseñada que se alinea con los requisitos de notarización de Apple para Macs basados en Silicon. Los componentes ahora siguen el mismo diseño que una aplicación 4D completa, lo que hace que la notarización sea más confiable y elimina los problemas estructurales que los desarrolladores enfrentaban con formatos anteriores.

Los metadatos se generan ahora automáticamente en el momento de la compilación. Los campos como CFBundleDisplayName, CFBundleShortVersionString, CFBundleVersion y la información de copyright se llenan directamente desde la configuración de compilación. Cuando se utiliza Build4D, estos valores provienen de su buildApp.4DSettings, por lo que los componentes se empaquetan correctamente sin configuración adicional.

Tenga en cuenta que la estructura actualizada no es compatible con versiones anteriores de 4D como 4D 20 R7 o 20 LTS. Los componentes construidos con 4D 20 R8 introdujeron esta nueva estructura y aún pueden cargar componentes antiguos, pero las versiones anteriores no pueden cargar componentes construidos utilizando la estructura actualizada.

4D NetKit y Mailing

4D NetKit ha pasado de ser un conjunto de utilitarios Microsoft 365 y Google a un marco de autenticación y comunicación más profundo. Le permite a su aplicación beneficiarse de una autenticación única vía Microsoft 365, y extiende esa capacidad con el soporte completo OpenID Connect, abriendo la puerta a una amplia gama de proveedores de identidad: Google, Okta, los sistemas IAM empresariales, cualquier cosa que hable el estándar.

El resultado es un entorno en el que los flujos de inicio de sesión, la gestión de tokens, las operaciones de correo electrónico y las integraciones de calendario ya no parecen sistemas externos añadidos desde el exterior. Pasan a formar parte de los cimientos de su aplicación: seguros, modernos y predecibles.

GESTIÓN COMPLETA DE MENSAJES Y ETIQUETAS GMAIL

La integración de Gmail en 4D 21 pasa de ser un simple punto de entrada «enviar un correo» a un buzón completo y programable. Una vez que su aplicación se autentica a través de OAuth 2.0, Gmail se comporta como otra capa de su lógica, no como un servicio remoto con el que tiene que luchar.

Todo comienza con el envío. Cree correos electrónicos estructurados y los envía a través de la API de Gmail, evitando la fragilidad de los relés SMTP y los protocolos heredados. Es limpio, predecible y seguro.

A partir de ahí, se abre la bandeja de entrada. Puede leerla, darle forma, reorganizarla y limpiarla, todo con la misma precisión que aplica a sus propias estructuras de datos.

Ahora puede

  • Recuperar la lista completa de etiquetas de Gmail, incluidas las etiquetas del sistema y las personalizadas.

  • Obtener ID de mensajes para cualquier etiqueta (Bandeja de entrada, Papelera, No leídos, carpetas).

  • Cargar el contenido completo del correo electrónico bajo demanda

  • Eliminar o tirar a la papelera mensajes en una sola llamada

  • Recuperar varios correos electrónicos a la vez, hasta 100 por solicitud

  • Asignar o eliminar etiquetas, incluidas combinaciones como Trabajo + IMPORTANTE

  • Crear, actualizar y eliminar etiquetas por programación

  • Obtenga metadatos de las etiquetas, como el recuento de mensajes no leídos y el total de mensajes.

Lo que esto le ofrece no es «acceso al correo electrónico», sino una automatización del correo electrónico.

CREAR Y GESTIONAR BORRADORES GMAIL

4D 21 le permite crear borradores de Gmail directamente dentro del buzón, colocándolos bajo cualquier etiqueta que elija sin enviar nada. Es una forma sencilla de mantener plantillas reutilizables exactamente donde pertenecen, en Gmail, listas para ser recuperadas, editadas y enviadas cuando el momento lo requiera.

Gracias a la API de Gmail, puede adjuntar un mensaje como borrador (con la etiqueta predeterminada BORRADOR o su propia etiqueta personalizada), volver a abrirlo más tarde, modificarlo y enviarlo a través del flujo estándar de Gmail. Una vez que un borrador ya no es necesario, puede eliminarlo limpiamente.

ACTUALIZAR LAS PROPIEDADES DEL CORREO DE MICROSOFT 365

4D 21 le ofrece un control directo sobre los mensajes de Microsoft 365, permitiéndole actualizar las propiedades de los correos recibidos o redactados a través de Office365.mail.update(). La solicitud de modificación del indicador isRead es lo que abrió la puerta, pero la funcionalidad va más allá.

A través de Microsoft Graph, puede ajustar atributos como el estado de lectura, las categorías o la importancia. Y cuando trabaja con borradores, puede incluso actualizar elementos más profundos como el asunto o el cuerpo. Es una forma limpia de mantener el estado del buzón sincronizado con sus flujos de trabajo, sin manipulación manual ni herramientas externas.

Usted decide cómo reacciona su aplicación: marcando un mensaje como procesado, etiquetándolo para su revisión, reclasificándolo en función de reglas de negocio o preparando un borrador de mensaje para completarlo más tarde. Todo queda bajo una API, un flujo de autenticación, un modelo coherente.

CONTEO MÁS RÁPIDO DE CORREOS NO LEÍDOS EN MÚLTIPLES BUZONES

Con 4D 21, comprobar el recuento de correos no leídos es mucho más eficiente. La función IMAPTransporter.getBoxList() puede ahora devolver las propiedades de los buzones y los recuentos de no leídos en una sola petición, lo que mejora significativamente los tiempos de respuesta.

Si desea una visión general de todos los buzones, incluyendo los recuentos de correos no leídos, totales y recientes, puede activar la opción «withBoxInfo» y recuperar todo a la vez:

var $boxes := $transporter.getBoxList({withBoxInfo: True})
Si sólo necesitas los recuentos de buzones específicos, sólo tiene que pasar sus nombres en una colección:
$boxes := $transporter.getBoxList({ withBoxProperties: False; withBoxInfo: True; names: ["INBOX"; "Drafts"] })
Estas mejoras facilitan mantener a los usuarios actualizados con los recuentos recientes no leídos, al tiempo que reducen el número de llamadas al servidor. Las mismas mejoras también se aplican a la API de Gmail en 4D NetKit, lo que le proporciona beneficios consistentes en las integraciones IMAP y Gmail.

ACCESO A LA INFORMACIÓN DE LOS USUARIOS Y DE LOS DIRECTORIOS DE GOOGLE

4D 21 ofrece a su aplicación acceso directo a los datos de usuario de Google, facilitando la personalización de interfaces, la automatización de flujos de comunicación y el trabajo con directorios a nivel de dominio. Una vez autenticado a través de OAuth 2.0, puede extraer todo, desde el perfil básico del usuario actual hasta listas de contactos completas y registros de organización.

Puede recuperar:

  • Los detalles del usuario autenticado actualmente

  • Perfiles de dominio y directorios de contactos

  • Registros de usuarios específicos utilizando un nombre de recurso y máscaras de campo.

Estas funciones permiten que su aplicación se adapte a las personas que la utilizan, mostrando quién ha iniciado sesión, seleccionando automáticamente los destinatarios adecuados o sincronizando los datos de la organización sin búsquedas manuales.

GESTIÓN COMPLETA DE CALENDARIOS PARA GOOGLE Y MICROSOFT 365

La gestión de calendarios en 4D 21 pasa de la simple recuperación al control total con las nuevas clases cs.NetKit.Office365.calendar y cs.NetKit.Google.calendar. Su aplicación puede leer calendarios, extraer eventos y gestionar todo el ciclo de vida de una reunión, tanto si se encuentra en Google Calendar como en Microsoft 365. Una conexión OAuth 2.0, y de repente sus flujos de trabajo de programación dejan de sentirse como sistemas externos y comienzan a comportarse como extensiones de su aplicación.

Puede recuperar todos los calendarios vinculados a una cuenta, elegir el que le interese a su lógica y cargar sus eventos con filtros de intervalos, límites o recurrencia. A partir de ahí, puede dar forma a la propia reunión: horas de inicio y fin, asistentes, recordatorios, categorías, reglas de recurrencia, incluso enlaces de videoconferencia como Teams o Google Meet.

Crear, actualizar o eliminar eventos se convierte en una simple llamada. Si se cancela un evento, se notifica automáticamente a los asistentes. Si se actualiza, la plataforma se encarga de reenviar los detalles. Su trabajo se convierte en dar forma al flujo de trabajo, no en gestionar llamadas HTTP o conciliar diferencias de API entre ecosistemas.

En la práctica, puede

  • recuperar calendarios de Google y Microsoft 365

  • cargar eventos con ventanas de tiempo, filtros y ampliación opcional

  • crear reuniones con asistentes, descripciones, recordatorios y enlaces

  • actualizar sólo los campos que importan sin reconstruir el evento

  • eliminar eventos de forma limpia, con la plataforma gestionando las notificaciones.

OAUTH2 MEJORADO, OPENID CONNECT Y CONTROL DE AUTENTICACIÓN

La autenticación en 4D 21 se vuelve más fluida, más segura y mucho más flexible. 4D NetKit ahora maneja el flujo completo de OAuth2 y OpenID con los principales proveedores, Microsoft, Google, GitHub, Okta, y cualquier servidor compatible con OAuth2, mientras que le da un control total sobre la seguridad, la presentación y el comportamiento de retrollamadas sin añadir capas adicionales de código.

4D NetKit maneja el intercambio completo automáticamente: ID de cliente, URI de redirección, ámbitos, recuperación de token, y el flujo de retorno. Una vez que la autenticación tiene éxito, su aplicación puede mostrar su propia página HTML directamente al usuario, manteniendo la experiencia limpia y totalmente integrada.

Aquí está el conjunto completo de mejoras, fusionadas en una función unificada:

  • Flujo de autorización OAuth2 mejorado: 4D NetKit ahora gestiona el intercambio completo de OAuth2 para proveedores como Microsoft, Google, GitHub, o cualquier servidor OAuth2 personalizado, gestionando el ID de cliente, redirigir URI, ámbitos, recuperación de token y retorno final. Esto crea una experiencia de incorporación más fluida, sin páginas de sistema incómodas, sin transiciones confusas y con un traspaso limpio directamente a su aplicación. En el momento en que la autenticación tiene éxito, puede mostrar su propia página HTML para que el flujo se sienta integrado, moderno y totalmente bajo su control.

  • Protección PKCE (Proof Key for Code Exchange) para una autorización más segura: al habilitar PKCEEnabled en cs.NetKit.OAuth2Provider, cada intercambio de código de autorización se vuelve criptográficamente seguro. Esto protege su aplicación contra ataques de interceptación o repetición, especialmente importantes para aplicaciones nativas y de escritorio, garantizando que el código de autorización devuelto sólo pueda ser utilizado por el cliente solicitante original. Obtendrá una importante mejora de la seguridad sin tener que escribir ningún código criptográfico.

  • Autenticación OAuth2 basada en certificados para una seguridad de nivel empresarial: en lugar de depender de los secretos del cliente, puede autenticar utilizando una llave privada y una huella digital del certificado. 4D NetKit construye y firma la aserción automáticamente, reduciendo drásticamente los riesgos de exposición y alineándose con las prácticas modernas de seguridad empresarial, como las requeridas por la plataforma de identidad de Microsoft. Estableciendo el permiso en Service y proporcionando .privateKey y .thumbprint en su objeto cs.NetKit.OAuth2Provider, el apretón de manos completo del certificado y el intercambio de tokens se ejecutan de forma segura y consistente en todos los entornos.

  • Control de visualización personalizado para flujos de inicio de sesión OAuth: si define browserAutoOpen en False en sus credenciales de cs.NetKit.OAuth2Provider, tendrá un control total sobre dónde aparece la pantalla de inicio de sesión. Puede mostrarla en un área Web, incorporarla en un diálogo o integrarla en un flujo de trabajo guiado que coincida con su interfaz de usuario. El flujo de seguridad sigue siendo gestionado por 4D NetKit, pero la presentación se convierte en la suya, creando una experiencia de inicio de sesión que se siente nativa en lugar de externa, ideal para aplicaciones de marca o flujos de acogida tranquilos.

  • Utilizar el servidor web local para retrollamadas OAuth2: las respuestas OAuth ahora pueden retornar directamente a través de los puertos propios de su servidor web anfitrión. 4D NetKit elige automáticamente el servidor correcto basándose en su URI de redirección: los puertos coincidentes van al servidor anfitrión, los puertos estándar como 80 o 443 por defecto, y cualquier otro se devuelve al servidor interno de NetKit. Cuando se utiliza el servidor anfitrión, basta con añadir un controlador HTTP para capturar la devolución de llamada, y NetKit.OAuth2Authorization.getResponse completa el intercambio. De este modo se evitan las escuchas secundarias, los conflictos entre puertos y la complejidad de la configuración, lo que hace que los flujos de autenticación sean más limpios y fáciles de implementar.

  • Cumplimiento de OpenID Connect con gestión de estado y de nonce : el flujo de autenticación ahora es totalmente compatible con state y nonce, lo que permite a su aplicación validar la integridad del redireccionamiento e imponer la unicidad del token automáticamente. state protege contra la manipulación CSRF asegurando que la respuesta coincide con la solicitud, mientras que nonce evita los ataques de repetición garantizando que los tokens son nuevos y únicos. Dado que 4D NetKit gestiona ambos parámetros internamente, puede integrarse con los modernos proveedores OpenID, Google, Microsoft y Okta, sin necesidad de crear capas de validación personalizadas.

  • URLs personalizadas para los resultados de autenticación y de error : los atributos authenticationPage y authenticationErrorPage del comando cs.NetKit.OAuth2Provider.new() ahora aceptan URLs completas, dándole control total sobre lo que el usuario ve después de la autenticación. Sus páginas de éxito o error pueden alojarse en cualquier lugar, en una aplicación 4D Qodly Pro, en su propio servidor web o en un servicio de terceros, en lugar de limitarse a archivos HTML locales. Esto le permite entregar respuestas dinámicas, de marca y conscientes del contexto que pueden ser actualizadas independientemente de su aplicación 4D, sin necesidad de despliegues o reconstrucciones.

SERVIDOR HTTP

4D 21 expande el servidor HTTP en una capa más capaz, segura y fácil de desarrollar. Puede definir reglas de respuesta globalmente, enrutar solicitudes a través de mapeos de manejadores limpios, devolver contenido web estructurado e integrar sistemas externos sin arriesgar la exposición de la sesión. La comunicación en tiempo real resulta más sencilla gracias a la compatibilidad total con clientes WebSocket, y el uso de licencias permanece bajo su control con opciones de flujo de autenticación más inteligentes. Todo está diseñado para simplificar el enrutamiento, reforzar la seguridad y racionalizar la forma en que se comunican sus puntos finales web.

reglas de respuesta http personalizadas

Los encabezados de respuesta HTTP de 4D son ahora configurables a nivel de servidor. Utilizando un nuevo archivo HTTPRules.json o el parámetro settings.rules durante el inicio, los desarrolladores pueden definir reglas de respuesta que coincidan con un patrón URL. Las reglas soportadas incluyen:

  • removedHeaders: eliminar encabezados no deseados (por ejemplo, eliminar el encabezado Server para auditorías más estrictas).

  • addedHeaders: inyecta encabezados de seguridad como Content-Security-Policy, X-Frame-Options o Permissions-Policy.

  • denyAccess: bloquea el acceso a rutas sensibles con un estado 403.

  • redirección: redirige las solicitudes de imágenes, CSS o JavaScript a una CDN.

  • status: define explícitamente el código de estado de la respuesta.

Al manejar los encabezados directamente en 4D, la infraestructura se vuelve más ligera, con mucha menos dependencia de proxies inversos externos o inyección manual de encabezados. La consistencia mejora, y las políticas se aplican a nivel de framework para todas las respuestas web, incluyendo REST.

ENRUTAMIENTO HTTP ESTRUCTURADO CON GESTORES DE PETICIONES

4D 21 introduce los gestores de peticiones, una forma más limpia y modular de decidir cómo responde su servidor a las peticiones web entrantes. En lugar de escribir grandes bloques On Web Connection, usted asigna patrones URL a funciones de clase, haciendo su enrutamiento más fácil de organizar, probar y mantener.

Con las nuevas funciones 4D.IncomingMessage y 4D.OutgoingMessage puede inspeccionar URLs, encabezados, parámetros y contenido del cuerpo, y luego devolver respuestas estructuradas, ya sea que esté autenticando usuarios, sirviendo archivos, redirigiendo a páginas o manejando descargas.

Todo se configura a través de HTTPHandlers.json, donde cada entrada define

  • El modelo de URL a utilizar

  • Los verbos HTTP a aceptar

  • La clase singleton y el método que gestionan la petición

Esto le da un control preciso sobre el enrutamiento de la solicitud, una separación más limpia de la lógica de negocio, y soporte integrado para escenarios como la redirección de autenticación, manejo de archivos, e incluso el reenvío de usuarios a páginas Qodly.

INTEGRACIONES SEGURAS Y SIN RIESGO DESESIONES CON CÓDIGOS DE ACCESO DE USO ÚNICO

4D 21 añade códigos de contraseña de un solo uso (OTPs) y herramientas de restauración de sesión que facilitan la conexión de sus aplicaciones web a sistemas de terceros sin exponer las cookies de sesión o romper el flujo de usuarios.

Con Session.createOTP() se genera un código de acceso de un solo uso vinculado a la sesión web actual. Puede enviar de forma segura esta OTP a servicios externos, por ejemplo, en enlaces de verificación de correo electrónico o en retrollamadas de procesamiento de inventario, sin exponer nunca la cookie de sesión 4D. Cuando la petición vuelve, 4D restaura automáticamente la sesión correcta utilizando la cookie de sesión:

  • $4DSID en la URL, cuando está permitido

  • Session.restore() cuando el proveedor sólo admite un parámetro de estado

Esto mantiene el contexto del usuario intacto a través de procesos de múltiples pasos, previene riesgos de intercepción y soporta integraciones más limpias con APIs externas.

COMPATIBILIDAD CON CLIENTES WEBSOCKET PARA COMUNICACIÓN EN TIEMPO REAL

Las actualizaciones en tiempo real son esenciales en las aplicaciones modernas, desde cuadros de mando hasta interfaces IoT. Para ello, 4D 21 introduce la clase 4D.WebSocket que ofrece una forma sencilla de crear clientes WebSocket que se conectan a cualquier servidor WebSocket.

Los WebSockets crean una conexión full-duplex, permitiéndole enviar y recibir mensajes instantáneamente. Ya podía alojar su propio servidor WebSocket utilizando 4D.WebSocketServer; ahora también puede conectarse a otros externos, intercambiar mensajes y reaccionar a los eventos del servidor.

Sólo tiene que definir una clase de gestión con retrollamadas como onMessage, onOpen, onTerminate y onError, y crear su cliente con:

Form.webSocket := 4D.WebSocket.new($url; cs.WSConnectionHandler.new())

A partir de ahí, su aplicación puede escuchar los mensajes entrantes y enviar actualizaciones en tiempo real, lo que resulta perfecto para funciones de chat, paneles de control en directo, dispositivos IoT, etc.

ENCABEZADOs cliente Websocket PERSONALIZADOS

Cuando necesite pasar información extra durante un saludo WebSocket, como tokens de seguridad, metadatos de la aplicación o identificadores personalizados, 4D 21 le permite definir encabezados personalizadas directamente desde su cliente WebSocket.

Simplemente añada un atributo headers a su clase WebSocket handler. Este objeto funciona igual que los encabezados HTTP estándar, utilizando pares llave/valor:

This.headers := New object("x-authorization"; $token) 
This.headers.Cookie := "yummy_cookie=choco; tasty_cookie=strawberry"

Estos encabezados se envían automáticamente cuando se abre la conexión, ofreciéndole una forma flexible de autenticar, personalizar o configurar sus sesiones WebSocket sin cambiar el código del servidor.

Perfecto para la seguridad basada en tokens, configuraciones multi-locatarias, o cualquier flujo de trabajo en el que el cliente debe presentarse antes de que los datos comiencen a fluir.

ENTREGUE CONTENIDO WEB PERSONALIZADO CON LA CLASE OUTGOINGMESSAGE

4D 21 introduce la clase OutgoingMessage, haciendo mucho más fácil devolver contenido personalizado, como archivos, imágenes o datos binarios, desde sus puntos de extremidad web o REST. En lugar de estar limitado a valores escalares o entidades ORDA, ahora puede enviar respuestas completas listas para la web directamente al navegador.

Con esta clase, puede definir los encabezados, definir el cuerpo de la respuesta y elegir el código de estado HTTP, lo que le da un control completo sobre cómo se entrega el contenido. Es ideal para casos de uso como la descarga de archivos PDF, el servicio de imágenes o la devolución de toda carga binaria.

Para hacer esto aún más suave, 4D ahora soporta la palabra clave onHTTPGet. Cuando se añade a una función expuesta, esa función se convierte en invocable a través de una simple petición GET del navegador, perfecta para enlaces fáciles de usar o descargas directas de archivos.

CONTROLAR EL USO DE LICENCIAS CON FORCE LOGIN

4D 21 introduce Force Login, un modo que evita que las peticiones REST consuman una licencia 4D Client hasta que el usuario realmente se autentique. La carga de una página Qodly, la visualización de un formulario, o la activación de llamadas REST descriptivas ya no consume una licencia, sólo la autenticación exitosa lo hace.

Esto evita que las pantallas de inicio de sesión bloqueen los recursos, reduce el uso innecesario de licencias y le ofrece un control total sobre cuándo se asignan las licencias. Una vez que el usuario cierra la sesión, la licencia se libera inmediatamente.

4D Write Pro

4D Write Pro da un gran paso adelante con nuevas herramientas que hacen que los documentos sean más fáciles de construir, más inteligentes de formatear y más potentes de automatizar. Las tablas se adaptan de forma inteligente a sus datos, los diseños son más fáciles de modelar visualmente o mediante programación, los documentos se escalan a miles de líneas sin esfuerzo, la exportación se vuelve más capaz con PDF/A, los archivos adjuntos y el soporte de factura electrónica. Y por primera vez, un asistente de IA integrado le ayuda a escribir, refinar y mejorar su contenido directamente dentro de 4D Write Pro.

ASISTENTE DE ESCRITURA CON AI PARA 4D WRITE PRO

4D Write Pro ahora cuenta con un asistente de escritura impulsado por IA que lo ayuda a redactar, editar y refinar sus documentos directamente dentro de 4D Write Pro. Una vez conectado a la API OpenAI, obtiene soporte en tiempo real para mejorar la claridad, corregir errores, remodelar el texto o simplemente encontrar las palabras adecuadas.

Active las funciones de IA configurando su clave API con WP SetAIKey. Después, aparece un nuevo botón de IA en la interfaz, que le da acceso rápido a herramientas útiles.

Puede chatear con el asistente para obtener ideas, mejorar la redacción o resolver un bloqueo del escritor. Las acciones predefinidas agilizan aún más las cosas: resume el contenido, traduce el texto, revisa la gramática o reescribe secciones para que fluyan mejor.

Al insertar contenido generado por la IA, usted elige cómo aplicarlo: texto sin formato, con estilo completo o copiado para su uso posterior. Un historial de solicitudes integrado le permite volver a consultar solicitudes anteriores, saltar a respuestas anteriores y reutilizar resultados sin perder de vista tu trabajo.

EXPORTACIÓN PDF/A, ADJUNTOS Y SOPORTE DE FACTURA ELECTRÓNICA

4D 21 amplía 4D Write Pro con un conjunto completo de herramientas para producir archivos PDF, incorporar archivos adjuntos y generar facturas electrónicas. En el centro de estas mejoras se encuentra la compatibilidad con la familia PDF/A, una versión de PDF orientada a la conservación y diseñada para mantener los documentos legibles durante décadas, a la vez que permite nuevos flujos de trabajo como la facturación electrónica.

Para equipos de todos los sectores, legal, médico, técnico, contable, construcción, obras públicas, etc., PDF/A-3 destaca porque permite integrar archivos adjuntos directamente dentro del documento. Con la nueva opción de exportación de archivos, puede agrupar archivos de texto, imágenes, XML u otros documentos en un único PDF duradero.

La exportación sigue el mismo flujo de trabajo que ya conoce: a través de la interfaz o por programación, eligiendo formatos como PDF/A-2 o PDF/A-3. Cuando se utiliza PDF/A-3, los archivos adjuntos se incluyen simplemente a través de las opciones de exportación, lo que resulta ideal cuando se desea un archivo autónomo que mantenga unida toda la información relacionada.

Esta mejora también permite generar facturas electrónicas. Las facturas electrónicas modernas suelen basarse en PDF/A-3 combinado con un archivo XML estructurado que contiene los detalles de la factura en formatos estandarizados como FACTUR-X (Francia) o ZUGFeRD (Alemania). En 4D Write Pro, puede crear estas facturas híbridas añadiendo el XML a través del objeto facturX y la colección de archivos durante la exportación.

CONTROL AVANZADO DE SECCIONES DESDE LA INTERFAZ Y EL CÓDIGO

4D 21 le da mucho más control sobre cómo respiran y circulan sus documentos. Las secciones y subsecciones dejan de ser mecánicas ocultas y se convierten en herramientas a las que puede dar forma, visualmente desde la interfaz o con precisión en el código.

Los controles de sección ofrecen ahora opciones más completas a través de menús sencillos, que permiten insertar saltos, definir primeras páginas diferentes, dividir las páginas izquierda y derecha o eliminar los encabezados y pies de página de rangos específicos. Lo que antes requería rebuscar en los atributos, ahora se hace con un rápido clic en el momento en que se necesita.

En cuanto a la programación, los nuevos comandos de gestión de secciones permiten eliminar o restablecer elementos estructurales sin alterar el resto del documento.

  • WP DELETE SECTION elimina una sección entera, su contenido, encabezados, pies de página y elementos anclados, sin colapsar el formato o cambiar los índices de forma impredecible.

  • WP DELETE SUBSECTION borra atributos ligados a «primera página diferente » o «páginas izquierda/derecha diferentes», incluyendo las imágenes ancladas y cajas de texto.

  • WP RESET ATTRIBUTES borra las anulaciones a nivel de sección o subsección, permitiéndole volver al formato heredado en un solo paso.

Combinadas, estas mejoras le ofrecen un flujo de trabajo descendente y fluido: edición intuitiva desde la interfaz al dar forma al diseño, y control programático preciso cuando su lógica necesita reinicializar, cortar o reconstruir secciones a petición.

DEFINA EL TAMAÑO DE LA PÁGINA EN UN SOLO PASO CON wk page size

4D 21 añade un nuevo atributo al documento 4D Write Pro, wk page size, haciendo mucho más fácil definir el tamaño total de un documento. En lugar de definir el ancho y el alto por separado, ahora puede aplicar ambas a la vez con un único valor.

Puede elegir entre:

  • Formatos de impresora integrados

  • Sus propios formatos personalizados

  • Una gama completa de tamaños ISO (A0-A10, serie B, serie C, DL, Legal, Tabloide, etc.)

Esto significa que puede diseñar documentos para imprimir o exportar sin preocuparse de qué impresora está seleccionada en ese momento. Tanto si está preparando cartas, facturas, folletos o diseños personalizados, definir el tamaño adecuado es ahora más sencillo, rápido y coherente.

Envolver texto alrededor de imágenes y cuadros de texto

Con 4D 21, las imágenes y los cuadros de texto ahora ofrecen la posibilidad de envolver texto, lo que da flexibilidad en el diseño de la maquetación de documentos. Con los nuevos modos de anclaje, los usuarios pueden envolver texto alrededor de imágenes y cuadros de texto, creando documentos visualmente atractivos sin restricciones.

Se ha mejorado la interfaz de 4D Write Pro para que pueda elegir cómo desea que se muestren las imágenes y los cuadros de texto. Están disponibles nuevos valores para la acción estándar image/anchorLayout y textBox/anchorLayout. También puede ajustar estos valores por programación utilizando los nuevos atributos: wk text wrap top bottom, wk text wrap square, wk text wrap square left, wk text wrap square right, y wk text wrap square largest.

Estos parámetros de ajuste también se conservan al exportar a SVG, PDF y HTML incrustado, y al importar o exportar documentos de Word.

DISEÑO INTELIGENTE DE TABLAS Y FUSIÓN DE CELDAS

4D 21 trae dos mejoras importantes que hacen la construcción y el formateo de tablas en 4D Write Pro mucho más fácil tanto para los desarrolladores como para los usuarios finales.

El asistente de tablas permite a los usuarios generar tablas a partir de datos de bases de datos sin necesidad de entender fuentes de datos o fórmulas. Utilizando plantillas suministradas por el desarrollador, pueden elegir campos, traducir etiquetas, preparar fórmulas específicas para el negocio y aplicar estilos gráficos, todo ello a través de una interfaz guiada.

Una vez creada la tabla, las nuevas funciones de fusión de celdas le ofrecen un control total sobre el diseño y la estructura. Puede fusionar celdas horizontalmente, verticalmente o en bloques, tanto si la tabla se llena automática como manualmente. Las fusiones pueden hacerse a través de la interfaz (botones de la barra de herramientas y menús contextuales), acciones estándar (celda/fusionar, celda/dividir), o por código usando los nuevos comandos WP TABLE MERGE CELLS y WP TABLE SPLIT CELLS.

En conjunto, estas herramientas facilitan el diseño de tablas más limpias y flexibles que se adaptan a cualquier documento o necesidad de presentación de datos.

líneas y columnas de tabla Ilimitadas

4D 21 elimina el anterior límite de 1.000 líneas en las tablas de 4D Write Pro. Ahora las tablas pueden crecer tanto como lo permita la memoria disponible de su máquina, haciendo posible generar largas facturas, catálogos, directorios y cualquier documento basado en datos sin restricciones artificiales.

Cuando una tabla está vinculada a una fuente de datos, cada elemento de la selección o colección de entidades puede producir ahora una línea, incluso cuando hay encabezados, saltos de ordenación, líneas adicionales o arrastres. De este modo, podrá crear documentos de gran tamaño con total libertad y mantener estructurados los diseños.

Gestión de fuentes de datos vacías

4D 21 le da más control sobre cómo aparecen las tablas cuando su fuente de datos vinculada no tiene datos. Un nuevo atributo, wk empty datasource, le permite decidir exactamente qué debe suceder en esa situación para que sus documentos siempre parezcan intencionados y pulidos.

Puede elegir entre:

  • Mostrar la línea de datos (por defecto)

  • Ocultar la línea de datos manteniendo las líneas de encabezado y las líneas siguientes.

  • Ocultar toda la tabla cuando ya no aporte contenido significativo.

  • Mostrar una línea de marcador de posición diseñada específicamente para estados vacíos

Visibilidad temporal de los bordes ocultos de la tabla

4D 21 facilita el trabajo con tablas introduciendo la propiedad visibleTableBorders, una opción de vista que muestra temporalmente los bordes ocultos como líneas punteadas. Esto le ayuda a ver la estructura de su tabla, especialmente cuando se fusionan celdas, sin cambiar la apariencia final del documento.

Puede activar esta opción directamente desde la barra de herramientas o la barra lateral, lo que le ofrece una visión más clara durante la edición y garantiza que los diseños sean precisos y fáciles de gestionar.

Asigne nombres a las fórmulas

Las fórmulas juegan un papel importante en los documentos 4D Write Pro, pero hasta ahora su visualización, valores, expresiones o símbolos, podían dificultar la lectura de las plantillas. Con 4D 21, puede asignar nombres a las fórmulas, dando a los usuarios una comprensión más clara de lo que representa cada fórmula y haciendo los documentos más fáciles de mantener.

En lugar de mostrar la fórmula en sí, puede mostrar una etiqueta simple y significativa. Esto hace que las plantillas sean mucho más intuitivas, especialmente cuando las fórmulas se vuelven complejas.

Se han actualizado dos comandos para dar soporte a esta mejora:

  • WP INSERT FORMULA ahora acepta un objeto que incluye tanto la fórmula como su nombre.

  • WP GET FORMULAS devuelve cada fórmula junto con su nombre, lo que facilita la inspección y gestión de fórmulas en un documento.

Mejoras en la sintaxis de los comandos

4D 21 aporta una serie de mejoras a 4D Write Pro que hacen que su código sea más fácil de escribir, más fácil de mantener y mucho más flexible. Muchos comandos ahora aceptan tipos de parámetros modernos como objetos y colecciones, varios comandos se han convertido en funciones que devuelven resultados útiles, y nuevos ayudantes hacen más sencillo trabajar con secciones, páginas y tablas.

He aquí un breve resumen de las novedades:

  • Manejo más limpio de los atributos: ahora puede pasar un único objeto a WP SET ATTRIBUTES, lo que le permite aplicar varias propiedades de formato a la vez.
  • Operaciones con tablas más flexibles: WP TABLE APPEND ROW acepta ahora fórmulas, fórmulas con nombre e incluso colecciones completas de valores.
  • Manejo de imágenes más sencillo: WP INSERT PICTURE es ahora una función que devuelve el elemento de imagen insertado. También acepta valores de 4D.File, lo que ofrece más opciones para almacenar y cargar imágenes.
  • Comandos de importación/exportación modernizados: comandos como WP IMPORT DOCUMENT,WP EXPORT DOCUMENT, y WP Add picture funcionan ahora sin problemas con 4D.File. Además, WP INSERT DOCUMENT ha pasado a llamarse WP Insert document body para reflejar mejor lo que hace.
  • Comandos que por fin devuelven rangos: ahora se devuelve un rango utilizable al insertar fórmulas, saltos o cuerpos de documentos.
  • Fácil acceso a la estructura del documento: nuevas funciones como This.sectionIndex, This.sectionNamey This.pageIndex le permiten hacer referencia a la sección o página actual directamente dentro de las fórmulas.

Controle el formato del correo electrónico con opciones personalizadas de espacio en blanco

Garantice un formato de correo electrónico limpio y coherente seleccionando el valor de espacio en blanco CSS durante la exportación MIME. Esta opción ayuda a evitar saltos de línea no deseados causados por la interpretación incorrecta de white-space:pre-wrap por parte de algunos clientes de correo, permitiéndote utilizar white-space:normal en su lugar para una mejor compatibilidad de visualización.

4D view Pro

4D View Pro recibe un gran impulso con nuevas formas de manejar grandes hojas de cálculo, flujos de trabajo de Excel más inteligentes y funciones más sensibles y fáciles de usar para los desarrolladores. Los formatos comprimidos hacen que los documentos pesados se carguen y almacenen más rápido, las funciones personalizadas se vuelven más poderosas, las actualizaciones de SpreadJS amplían lo que puede crear y las opciones mejoradas de importación/exportación mantienen sus datos precisos y fáciles de controlar.

FORMATOS DE DOCUMENTOS COMPRIMIDOS PARA UN MEJOR RENDIMIENTO

4D 21 introduce dos formas de manejar documentos 4D View Pro grandes y complejos de forma más eficiente: el nuevo formato de archivo comprimido .sjs y el soporte para importar y exportar documentos como BLOBs.

El formato .sjs es una estructura ligera y comprimida formada por múltiples archivos JSON pequeños, similar al diseño XML de Excel. Reduce el tamaño de los archivos, acelera la carga y maneja hojas de cálculo de gran tamaño de forma más fiable. Puede importarlo y exportarlo igual que un archivo .4vp estándar utilizando VP IMPORT DOCUMENT y VP EXPORT DOCUMENT.

Como complemento, 4D soporta ahora un formato BLOB comprimido, que le ofrece las mismas ventajas de rendimiento directamente en su base de datos. Utilice VP EXPORT TO BLOB para almacenar un documento como un BLOB de forma asíncrona, y luego recárguelo en cualquier momento con VP IMPORT FROM BLOB. Esto facilita guardar, recuperar y procesar documentos pesados de View Pro sin depender del sistema de archivos.

Ambos formatos están diseñados para mejorar el rendimiento, agilizar el almacenamiento y garantizar un manejo más fluido de los contenidos de gran tamaño de View Pro.

Mejora de las funciones personalizadas

4D 21 permite realizar cálculos personalizados sobre el contenido de columnas o filas de una hoja de cálculo sin necesidad de conocer el número de celdas implicadas. Esto es posible al permitir el paso de múltiples rangos de celdas u objetos a las fórmulas personalizadas, lo que resulta en la recuperación de una colección u objeto que contiene todo el contenido de las celdas dentro de un método 4D.

ACTUALIZACIONES DE SPREADJS 16.2 Y MEJORAS EN LA CINTA DE OPCIONES

4D 21 introduce una importante actualización a 4D View Pro con la integración de SpreadJS 16.2 y una cinta de opciones actualizada diseñada para aprovechar sus nuevas capacidades.

A continuación, se presentan las nuevas funcionalidades para SpreadJS:

  • Panel Editor de Fórmulas para facilitar la lectura, edición y depuración de fórmulas largas.

  • Modo de cálculo manual para controlar cuándo se recalculan las fórmulas.

  • Referencias entre hojas durante la edición de fórmulas.

  • Mejora de PivotTable: definición posiciones de subtotal por campo.

  • Nuevas herramientas de gráficos: gráficos en cascada, formato de línea suave y gráficos construidos a partir de rangos de selección múltiple.

  • Lollipop Variance Sparkline para una visualización compacta de las variaciones.

  • Arrastre los encabezados para mover o insertar filas y columnas.

  • Opciones adicionales de pegado especial (comentarios, validación, anchos, formatos…).

  • Estilo de ficha con colores e iconos personalizables.

  • Desplazamiento basado en píxeles para una respuesta más fluida.

  • La importación de Excel mantiene las condiciones de ordenación para obtener resultados coherentes.

  • Mejoras en los libros de trabajo: mostrar/ocultar ceros, hojas protegidas con contraseña, valores de celda por defecto e inserción de celdas cortadas en tablas.

A continuación, se indican las nuevas funcionalidades de la cinta de opciones actualizada:

  • Controles directos de cinta para la edición de fórmulas, temas, colores y fuentes.

  • Opciones para mover/insertar filas y columnas cuando está activado arrastrar para mover.

  • Controles de gráficos actualizados para crear y formatear rápidamente utilizando las nuevas funciones de SpreadJS.

Mejoras en la importación/exportación de Excel

4D 21 hace más flexible el trabajo con archivos Excel en 4D View Pro ampliando las opciones de importación y exportación disponibles en VP EXPORT DOCUMENT y VP IMPORT DOCUMENT.

En la exportación, ahora puede decidir exactamente qué va en el libro generado, vinculando fuentes, estilos, fórmulas, celdas combinadas, datos de cálculo, nombres no utilizados, e incluso si los encabezados deben comportarse como filas o columnas congeladas. También puede añadir protección por contraseña y acelerar la carga del libro de trabajo incluyendo datos de cálculo almacenados en caché.

Al importar, las nuevas opciones ayudan a conservar el formato, las fórmulas, los encabezados congelados y los estilos, a la vez que permiten controlar el recálculo, las referencias dinámicas y los modos de apertura (normal, lento, incremental). Esto asegura que los archivos Excel se carguen de forma limpia y consistente en su interfaz de 4D View Pro.

Todos los ajustes están organizados en un único objeto excelOptions, haciendo que su código sea más fácil de leer, mantener y mantener la compatibilidad con los proyectos existentes.

IMPORTACIONES FIABLES CON SOPORTE DE FUNCIONES PERSONALIZADAS

4D 21 garantiza que los comandos de importación como VP IMPORT DOCUMENT, VP IMPORT FORM BLOB y VP IMPORT FROM OBJECT ahora activan su retrollamada sólo después de que todos los cálculos de las funciones personalizadas hayan finalizado. Esto permite predecir el tiempo necesario para acciones posteriores como imprimir, exportar o guardar.

La actualización también amplía VP FLUSH COMMANDS que ahora acepta una llamada de retorno asíncrona que se ejecuta una vez finalizados todos los cálculos pendientes. Esto le permite poner en cola operaciones de forma segura sin bloquear la interfaz o arriesgarse a obtener resultados incompletos.

En conjunto, estas mejoras facilitan el trabajo con documentos que dependen de fórmulas personalizadas, reduciendo errores y garantizando que el flujo de trabajo se desarrolle sin problemas desde la importación hasta el resultado final.

seguridad

4D 21 refuerza la seguridad en todas las capas, desde la comunicación cifrada hasta el manejo más seguro de los datos y una gestión más inteligente de los certificados. Los certificados TLS automáticos simplifican el despliegue, el soporte ampliado para llaves RSA y ECDSA moderniza sus opciones criptográficas, y las nuevas herramientas de validación CA ayudan a proteger el tráfico cliente-servidor en redes no fiables. Las solicitudes HTTPS pueden ahora extraer credenciales directamente del sistema operativo, la firma criptográfica funciona limpiamente tanto con datos de texto como binarios, y la supervisión de sesiones ofrece a los administradores una visión unificada y en tiempo real de toda la actividad web activa. Incluso tareas cotidianas como pegar fórmulas se benefician de valores predeterminados más seguros, mientras que las principales actualizaciones de las bibliotecas garantizan que sus aplicaciones se ejecuten sobre una base actual y reforzada.

Certificados SSL/TLS autogenerados para comunicaciones cliente-servidor

4D 21 simplifica el despliegue seguro eliminando los antiguos certificados SSL/TLS por defecto que se incluían con 4D Server. En su lugar, cuando un servidor inicia una aplicación utilizando conexiones encriptadas, ahora comprueba la carpeta Resources en busca de certificados proporcionados por el usuario. Si no se encuentra ninguno, 4D genera automáticamente un certificado SSL/TLS temporal.

Esto significa que ya no es necesario proporcionar certificados sólo para permitir la comunicación cifrada cliente-servidor. Cada reinicio del servidor produce un nuevo certificado, mejorando la seguridad y reduciendo los pasos de configuración.(Nota: esto no se aplica al servidor web, que sigue necesitando certificados validados por CA para la compatibilidad con navegadores).

Soporte ampliado de certificados SSL/TLS con ECDSA

4D ha soportado durante mucho tiempo certificados RSA para asegurar la comunicación SSL/TLS. Con 4D 21, ahora también puede utilizar certificados ECDSA, ofreciéndole una alternativa moderna que muchas plataformas están adoptando cada vez más.

Ya sea que esté asegurando la comunicación cliente-servidor o solicitudes HTTPS, 4D 21 ahora acepta tanto RSA como ECDSA, sin necesidad de cambios en el flujo de trabajo. Simplemente coloque sus archivos key.pem y cert.pem en las ubicaciones esperadas, y 4D se encarga del resto.

Validación de autoridad de certificación mejorada para la SEGURIDAD cliente-servidor

4D 21 refuerza la seguridad cliente-servidor permitiendo a los clientes verificar los certificados del servidor contra autoridades de certificación (CAs) de confianza. Esto asegura que el servidor al que se está conectando es auténtico y ayuda a prevenir ataques de intermediario (MITM).

Para activar la validación de CA, debe especificar dos valores en buildApp.4DSettings:

  • la ruta a un archivo que contenga firmas de CA de confianza

  • el nombre de dominio esperado del certificado del servidor

También puede proporcionar una lista de nombres de dominio permitidos cuando haya varios servidores implicados. Con esta información, el cliente comprueba que el certificado del servidor está firmado por una CA válida y coincide con el dominio previsto; de lo contrario, se rechaza la conexión.

Esto añade una capa crítica de protección para los despliegues que se ejecutan en redes públicas o no fiables.

Uso del almacén de certificados de Windows en lugar de archivos locales

Las solicitudes HTTPS ahora pueden extraer certificados directamente del llavero de Windows utilizando el parámetro storeCertificateName en las clases HTTPRequest y HTTPAgent . Esto elimina la necesidad de almacenar y gestionar archivos de certificados localmente.

La protección a nivel de sistema y la gestión centralizada sustituyen a los malabarismos manuales con los archivos. La gestión de certificados es más segura, coherente y fácil de administrar en todos los equipos y máquinas.

FORZAR EL INICIO DE SESIÓN COMO NUEVO VALOR PREDETERMINADO PARA LA AUTENTICACIÓN EN REPOSO

4D 21 ahora habilita Force Login como el modelo de seguridad por defecto para el acceso REST. En lugar de depender de mecanismos de autenticación más antiguos, cada solicitud REST ahora requiere un inicio de sesión explícito a través de la función ds.authentify.

Los nuevos proyectos incluyen automáticamente un archivo roles.json con forceLogin establecido en true, lo que significa que no se permite el acceso REST hasta que se asignen privilegios. Los proyectos existentes pueden cambiar a este modelo mediante un botón específico en el cuadro de diálogo Configuración de la estructura, que actualiza las configuraciones heredadas y crea un archivo roles.j son cuando es necesario.

Esta actualización lleva a todos los proyectos a un moderno modelo de seguridad basado en privilegios que es más fácil de mantener y mucho más preciso. Ahora puede gestionar los permisos mediante el editor de roles y privilegios de Qodly Studio y definir exactamente qué partes de su almacén de datos y funciones están expuestas.

Force Login garantiza que las API REST estén protegidas por defecto y le ofrece una forma clara y coherente de controlar el acceso en toda su aplicación.

FIRMA Y VERIFICACIÓN CRIPTOGRÁFICA SIMPLIFICADA CON SOPORTE DE BLOBs

4D 21 agiliza los flujos de trabajo criptográficos ampliando 4D.CryptoKey.sign() y 4D.CryptoKey.verify() para aceptar tanto entradas de texto como de blob. Ya no es necesario convertir datos binarios en texto, o viceversa, antes de firmarlos o verificarlos.

Esto facilita enormemente el trabajo con archivos, cargas útiles binarias y datos estructurados, al tiempo que mantiene su código de firma y verificación limpio y directo.

Gestión de sesión unificada para REST y 4DACTION

Con 4D 21, ahora tiene una forma integral de inspeccionar todas las sesiones web abiertas, ya sea que se originen de conexiones REST, llamadas SOAP o solicitudes 4DACTION.

  • Todas las sesiones activas se listan en tiempo real, dando a los administradores una visión transparente de la actividad y el uso de recursos.

  • Las sesiones se pueden etiquetar con nombres de usuario a través de Session.setPrivilege(), lo que facilita la identificación de los usuarios conectados, el seguimiento de las acciones y la gestión de licencias.

  • Las sesiones son seguras para los hilos y se optimizan automáticamente, lo que garantiza un uso eficiente de los recursos y un rendimiento fiable incluso con cargas pesadas.

Esto proporciona una ejecución más fluida de la API a escala, al tiempo que ofrece a los desarrolladores y administradores una supervisión más clara, una auditoría más sólida y una estabilidad mejorada.

PEGADO SEGURO de fórmulas

Para proteger sus datos cuando trabaja en diferentes entornos, 4D ahora pega fórmulas de fuentes externas sólo como valores.

Esto se aplica a los campos de texto multi-estilo y a los documentos 4D Write Pro:

  • Si la fórmula copiada nunca ha sido ejecutada, su fuente se pega como texto plano.

  • Si se ha evaluado, sólo se pega el valor resultante (texto o imagen), nunca la lógica subyacente.

Las fórmulas copiadas dentro de la misma aplicación siguen pegándose normalmente. Pero al mover contenido entre aplicaciones o entornos distintos, 4D elimina automáticamente las fórmulas para evitar el acceso involuntario a datos confidenciales.

actualizaciones de la librería de base y de las dependencias

Con 4D 21 LTS, hemos actualizado Xerces, libldap, ICU, Chromium (CEF), OpenSSL, libZip, LZMA, ZLib, Libuv, BoringSSL y PDFWriter, modernizando toda la pila para reforzar la seguridad, mejorar la estabilidad y garantizar la compatibilidad con las plataformas actuales.

Lenguaje 4D

El lenguaje de programación 4D ha experimentado una de sus mayores evoluciones hasta la fecha. A través de los Feature Releases que llevan a 4D 21 LTS, gana una sintaxis más clara, un manejo de errores más seguro, capacidades de clases modernas, tipado más fuerte, validación de código en tiempo real y herramientas más ricas para REST, sesiones, HTTP, sincronización de datos y más.

Tanto si está creando servicios web, manipulando datos, estructurando código u optimizando flujos de trabajo, las nuevas funcionalidades del lenguaje eliminan la repetición de tareas, refuerzan la seguridad y hacen que el desarrollo diario sea más rápido y predecible.

Code Live Checker

4D 21 introduce el Code Live Checker, un sistema de validación en tiempo real que detecta errores mientras se escribe. Comprueba la sintaxis, los nombres de clase, los nombres de función, las listas de parámetros y la compatibilidad de tipos, ayudándole a detectar errores tipográficos, desajustes y referencias no válidas antes de que se conviertan en errores de ejecución.

El verificador se ejecuta en segundo plano mientras escribe y durante las comprobaciones de sintaxis o la compilación. Funciona con clases que utilizan la notación por puntos y aplica las mismas reglas a las clases componentes que incluyen un archivo de sintaxis. Verá advertencias en caso de código incoherente y errores cuando algo falle en tiempo de ejecución, lo que hará que su código sea más seguro y fácil de mantener.

SINGLETONS EN SU APLICACIÓN, SESIONES Y EN EL RESTO DE LA APLICACIÓN

4D 21 introduce singletons, una nueva forma de crear un objeto que es accesible dondequiera que lo necesite. Los singletons pueden alojar valores interproceso, utilidades centrales, o incluso actuar como bloques de construcción para patrones como fábricas, dándole un lugar limpio y fiable para centralizar la lógica compartida.

Puede definir dos tipos básicos:

  • Singletons de proceso, únicos para cada proceso

  • Singletons compartidos, únicos para toda la aplicación.

Crear uno es sencillo: añada la palabra clave singleton al constructor de una clase (o singleton compartido para una versión compartida). A partir de ahí, la instancia singleton estará siempre disponible a través del atributo me, dando a su aplicación una única fuente de verdad para cualquier cosa que gestione esa clase.

4D 21 también añade singletons de sesión, que ofrecen a cada usuario su propia instancia aislada. Son ideales en entornos web y cliente-servidor donde múltiples procesos gestionan peticiones para el mismo usuario. Con los singletons de sesión, tareas como la gestión de un carrito de la compra o de una lista de trabajo específica de un usuario se vuelven sencillas y seguras, porque cada sesión mantiene su propio estado.

Por último, los singletons compartidos se integran perfectamente con las API REST y las páginas Qodly. Cualquier función expuesta en un singleton compartido puede ser llamada directamente a través de REST, o seleccionada como una acción de evento en Qodly Studio, al igual que los métodos de clase de datos. El acceso permanece totalmente controlado a través de roles y privilegios, garantizando la seguridad y la claridad en el funcionamiento de sus APIs.

Juntas, estas funcionalidades le ofrecen una forma coherente y escalable de gestionar valores globales, datos por usuario y lógica de aplicación compartida en todas las capas de su solución.

Simplificación de las declaraciones de parámetros de métodos

4D 21 simplifica la forma de declarar los parámetros de los métodos. Utilizando los prototipos de #DECLARE, ya no es necesario repetir las declaraciones de parámetros en métodos separados. compiler_ métodos. El compilador trata ahora las declaraciones de prototipos de la misma forma que trata las firmas de funciones de clase, reduciendo la redundancia y reforzando la seguridad de tipos.

El código existente sigue funcionando como antes, pero los tipos no coincidentes entre prototipos y declaraciones heredadas ahora provocan errores, lo que ayuda a detectar antes los problemas. También aparecerán advertencias cuando los parámetros se declaren dos veces o cuando se invoque a un método con más argumentos de los que permite el prototipo.

Esta actualización ahorra tiempo, elimina el desorden y ayuda a evitar errores de ejecución durante la compilación.

DECLARACIÓN E INICIALIZACIÓN DE VARIABLES Y PROPIEDADES EN UNA SOLA LÍNEA

4D 21 agiliza su código permitiéndole declarar e inicializar variables y propiedades de clase en una sola línea. Esto elimina la repetición y hace que la intención sea más clara de un vistazo.

Puede dejar que 4D infiera el tipo a partir del valor:

var <variableName> := <value>
property <propertyName> := <value>
O declarar el tipo explícitamente, útil para tipos complejos o cuando necesita total claridad del compilador:
var <variableName> : <type> := <value>
property <propertyName> : <type> := <value>
La inferencia de tipo funciona bien para valores simples, mientras que la tipificación explícita es más segura para cualquier cosa que el compilador no pueda deducir, como atributos de clase, variables interproceso o expresiones con tipos desconocidos. Esta sintaxis unificada elimina el desorden y le ayuda a escribir código claro e intencionado.

DECLARACIÓN SIMPLIFICADA DE FUNCIONES VARIADAS

4D 21 facilita la escritura de funciones que aceptan un número flexible de parámetros. Ahora puede utilizar el símbolo «…» como parámetro final en su declaración para indicar que la función acepta cualquier número de argumentos.

También puede adjuntar un tipo, dejando que 4D verifique que cada parámetro entrante coincide con sus expectativas:

#DECLARE(... : Real) : Real

O dejarlo sin tipo si quiere aceptar cualquier cosa:

#DECLARE(...)
Esta pequeña adición elimina mucha sobrecarga, haciendo que las funciones variádicas sean más claras, seguras y consistentes de escribir.

GESTIÓN DE ERRORES MODERNA Y ESTRUCTURADA (TRY-CATCH, TRY(), THROW)

4D 21 le ofrece una forma más limpia y predecible de gestionar los errores en su código. Ahora puede lanzar errores deliberadamente, capturarlos exactamente donde ocurren y recuperarse con elegancia, sin manejadores globales o diálogos inesperados que interrumpan el flujo.

  • Bloques Try-Catch para una recuperación controlada: envuelva varias sentencias dentro de Try … Catch … End try. Si algo dentro del bloque Try falla, la ejecución salta directamente a Catch. No aparecen cuadros de diálogo y no se activa ON ERR CALL. Esto le permite revertir el trabajo, registrar detalles o continuar con una ruta alternativa de forma estructurada y legible.

  • Try(Expression) para la gestión de errores en línea: ejecute una única expresión y gestione los fallos justo al lado del código que los ha provocado. Try() devuelve el resultado cuando tiene éxito o undefined cuando se produce un error. Puede comprobar Last errors inmediatamente, utilizando las mismas variables y contexto, manteniendo la lógica de error ajustada y local.

  • throw para lanzar errores personalizados: utilice el nuevo comando throw para señalar problemas en el momento exacto en que aparecen, estado no válido, suposiciones rotas o reglas de negocio que deben detener la ejecución. Estos errores se comportan exactamente igual que los errores nativos de 4D y pueden capturarse con Try(), Try–Catch, o ON ERR CALL. Puede lanzar mensajes sencillos o reutilizar definiciones de error basadas en XLF con marcadores de posición.

En conjunto, estas herramientas le proporcionan un modelo de error unificado y moderno, limpio de escribir, fácil de seguir y seguro para cada parte de la lógica de su aplicación.

Sincronización incremental con sellos globales

4D 21 expande el sistema de sellos globales, originalmente introducido para 4D for Mobile, a todo flujo de trabajo que necesite sincronización incremental. En lugar de transferir conjuntos de datos completos, ahora puede sincronizar sólo los registros que han cambiado desde la última actualización.

Una vez habilitado el seguimiento de cambios de datos, 4D asigna automáticamente un sello a cada registro creado, modificado o eliminado. Dos funciones le dan un control total:

  • .getGlobalStamp(): recupera el sello de modificación actual del almacén de datos para que pueda rastrear lo que ha cambiado con el tiempo.

  • .setGlobalStamp(): le permite actualizar manualmente los valores de los sellos cuando necesite anular el comportamiento predeterminado.

Como los sellos reflejan cada modificación de los datos, facilitan la consulta de lo que ha cambiado, detectan los registros eliminados y realizan una sincronización incremental rápida y fiable a través del servidor REST 4D, sin depender de la replicación SQL completa.

SINCRONIZAR MÚLTIPLES COLECCIONES CON MULTISORT()

Trabajar con varias colecciones relacionadas, especialmente cuando los datos provienen de fuera de 4D, puede hacer que ordenar y mantener todo alineado sea un reto. En 4D 21, la nueva función multiSort() resuelve esto permitiéndole ordenar múltiples colecciones en sincronía con una sola llamada.

Puede:

  • Ordenar una colección y reordenar automáticamente las otras para que coincidan

  • Aplicar fórmulas de ordenación personalizadas

  • Definir reglas de ordenación multinivel

  • Trabajar tanto con valores simples como con objetos

  • Mantener un orden estable cuando los valores son iguales

Tanto si está alineando matrices recibidas de sistemas externos como coordinando varias colecciones en su aplicación, multiSort() hace que todo el proceso sea más rápido, limpio y fiable.

Comparación de referencias SIMPLE para objetos y colecciones

4D 21 hace mucho más fácil comprobar si dos objetos o colecciones apuntan a la misma referencia en memoria. Ahora puede utilizar los operadores = y # para comparar referencias directamente, en lugar de comparar contenidos.

Esto le ofrece una forma rápida de ver si dos variables se refieren exactamente al mismo objeto o colección, especialmente útil cuando trabaja con referencias compartidas, estructuras anidadas o matrices de objetos.

También puedes utilizar estas comparaciones en funciones de matriz, consultas y otras operaciones, haciendo que el manejo de referencias sea más coherente en todo el lenguaje.

SIMPLIFIQUE LOS OBJETOS COMPARTIDOS CON CLASES COMPARTIDAS

4D 21 introduce las clases compartidas, una forma simplificada de trabajar con objetos compartidos sin gestionar manualmente los bloques Use…End use.

Añadiendo la palabra clave shared al constructor de una clase, cada llamada a new() crea automáticamente un objeto compartido. También puede marcar las funciones de clase como «compartidas » para indicar que modifican el objeto compartido subyacente. Cuando lo hace, 4D maneja automáticamente el flujo de trabajo de bloqueo, haciendo que el código de objetos compartidos se sienta tan natural como trabajar con objetos normales.

Las clases compartidas facilitan la ejecución de tareas en workers, la coordinación de estados entre procesos o el almacenamiento seguro de resultados compartidos. Tenga en cuenta que aunque las clases no compartidas pueden heredar de las compartidas, lo contrario no está permitido, así que planifique su jerarquía de clases en consecuencia.

SOPORTE DE SESIÓN CLIENTE/SERVIDOR EN EL COMANDO DE SESIÓN

4D 21 amplía el comando Session de modo que ahora cubre las conexiones Cliente/Servidor y los procedimientos almacenados, además de las sesiones Web y Móvil existentes en las aplicaciones 4D. Esto le da una forma unificada de acceder a la información a nivel de sesión en todos los contextos de ejecución.

Una nueva clase ClientServerSession para las sesiones 4D Remote, que le da acceso a propiedades clave:

  • id: el identificador único de sesión

  • info: detalles de máquina, usuario y entorno

  • storage: un objeto compartido disponible para todos los procesos de la misma sesión

  • userName: el usuario asociado a la sesión

Esto facilita el intercambio de datos entre procesos, el seguimiento del contexto específico del usuario y la escritura de código genérico consciente de la sesión que se comporta de forma coherente tanto si se ejecuta en entornos web, móviles, cliente/servidor o de procedimientos almacenados.

ACCEDA AL ALMACENAMIENTO DE SESIONES EN TODOS LOS TIPOS DE SESIONES

Mantener la coherencia de los datos del usuario en las distintas partes de la aplicación (cliente/servidor, web, móvil) solía requerir un trabajo adicional. Cada sesión mantenía su propio almacenamiento, y no había una forma sencilla de acceder a otra sesión para recuperar información compartida.

4D 21 resuelve esto con un nuevo comando: Session storage by id. Le permite acceder al almacenamiento de cualquier sesión en su aplicación, sin importar cómo fue creada. Una vez que tiene el ID de la sesión, puede leer o actualizar su almacenamiento compartido igual que el suyo.

Esto facilita el mantenimiento de la continuidad para los usuarios que trabajan en varios entornos. Por ejemplo, puede almacenar un registro de cliente cuando un usuario inicia sesión a través de la aplicación web y acceder a ese mismo registro más tarde desde una sesión cliente/servidor, manteniendo la experiencia fluida y coherente.

INSPECCIONE LOS PRIVILEGIOS DE SESIÓN PARA UNA DEPURACIÓN SEGURA Y SENCILLA

Controlar a qué pueden acceder los usuarios es una parte clave de la seguridad de su aplicación. Con 4D 21, ahora tiene una mejor visibilidad de esos permisos gracias a una mejora en los privilegios de sesión.

Los privilegios, asignados a través de roles durante la autenticación, determinan qué acciones puede realizar un usuario. Para facilitar la depuración, ahora puede inspeccionar estos privilegios directamente en la sesión mediante la nueva función getPrivileges(). Esto le ofrece una visión clara de qué permisos están activos en cada momento.

También hay un nuevo punto final REST(/$info/privileges) que devuelve la misma información, lo que simplifica la verificación de los derechos de acceso en distintos entornos.

Estas integraciones le ayudarán a confirmar que sus normas de seguridad funcionan según lo previsto y a garantizar que los usuarios sólo acceden a los datos y funciones que les corresponden.

GESTIÓN MEJORADA DE PROCESOS Y SESIONES

4D 21 facilita la inspección, el seguimiento y la gestión de procesos y sesiones, proporcionándole un mayor control y una visibilidad más clara de su aplicación. Se han mejorado o añadido varios comandos para agilizar la forma de recuperar información y supervisar la actividad.

Estas son las novedades

  • Información del proceso devuelve ahora un objeto completo, lo que facilita la lectura y el uso de las propiedades del proceso. También incluye una nueva propiedad creationDateTime para que pueda saber cuándo se creó cada proceso.

  • La información de la sesión le permite obtener detalles de la sesión directamente desde un ID de sesión, evitando pasos o búsquedas adicionales.

  • El número de proceso se ha actualizado para que pueda obtener el número de un proceso no sólo a partir de su nombre, sino también de su ID de proceso.

  • La actividad del proceso ahora admite el filtrado por ID de sesión, lo que le permite listar rápidamente sólo los procesos vinculados a una sesión específica, lo que resulta útil cuando se depuran o supervisan usuarios.

Gestión simplificada de sesiones para desarrollo y pruebas

Con 4D 21, la gestión de sesiones es mucho más sencilla durante el desarrollo. El comando Session ahora devuelve un objeto válido incluso en entornos standalone y monousuario, eliminando la necesidad de comprobaciones adicionales o lógica fallback.

Esta actualización facilita el trabajo con datos de sesión, la comprobación de restricciones basadas en roles y la simulación del comportamiento Cliente/Servidor, todo ello sin cambiar de entorno ni añadir código de solución.

En modo autónomo, ahora puede utilizar:

  • Session

  • Session info

  • Session storage

Estas sesiones simuladas están pensadas para el desarrollo y las pruebas, permitiéndole construir y depurar características como la autenticación, el filtrado de datos a través del evento Restringir o el almacenamiento compartido de sesiones, tal y como lo haría en una configuración Cliente/Servidor.

Para las aplicaciones autónomas de producción, seguirá confiando en Storage para los datos específicos del usuario, pero para el desarrollo, este cambio agiliza su flujo de trabajo y mejora la coherencia en todos los entornos.

EJECUCIÓN DE FÓRMULAS MÁS FLEXIBLE CON “FORMULA FROM STRING” (FÓRMULA A PARTIR DE CADENA)

4D 21 amplía el funcionamiento de Formula from string permitiéndole elegir el contexto de ejecución. Esto facilita mucho el desarrollo de componentes, especialmente cuando las fórmulas necesitan llamar a métodos o acceder a variables definidas en la base de datos anfitriona.

Anteriormente, las fórmulas siempre se ejecutaban en el contexto en el que se creaban, lo que significaba que un componente no podía ejecutar fórmulas que hicieran referencia a métodos no compartidos en el proyecto anfitrión. Ahora, puede decidir dónde debe ejecutarse la fórmula:

  • sk execute in host database: ejecuta la fórmula en el proyecto anfitrión, permitiendo el acceso a sus métodos y variables.

  • sk execute in current database: el comportamiento por defecto, manteniendo la ejecución dentro del componente.

Esta pequeña adición desbloquea un diseño de componentes mucho más flexible y le permite crear funciones (como interfaces personalizadas de 4D Write Pro) que llaman sin problemas a la base de datos host.

GESTIÓN DE ARCHIVOS DE REGISTRO MÁS FLEXIBLE

4D 21 le da más control sobre cómo su aplicación gestiona su archivo de registro (diario) durante el despliegue.

Ahora puede anular la configuración de Usar archivo de registro de la misma manera que anula otros parámetros de copia de seguridad. Cuando esta opción está activada, 4D le pide que cree o seleccione un registro cuando se crea un nuevo archivo de datos, y almacena esa ruta dentro del archivo de datos. Si más tarde abre un archivo de datos que no tiene registro mientras la opción está activa, 4D le pedirá que cree o seleccione uno.

Anteriormente, esta opción siempre se almacenaba en el archivo de catálogo. Ahora, usted puede decidir de dónde viene utilizando un archivo de parámetros de copia de seguridad, colocado junto a la estructura, junto a los datos, o dentro de la propia estructura. Esto te da más flexibilidad a la hora de desplegar en diferentes entornos sin cambiar los archivos principales de su proyecto.

Eliminación de Comandos PHP y Eliminación del Intérprete InTEGrado

PHP alguna vez llenó vacíos importantes en el desarrollo web de 4D, manejando tareas como ZIP, hashing o LDAP antes de que el lenguaje ofreciera soluciones nativas. A medida que estas capacidades se volvieron parte de 4D mismo, el intérprete PHP integrado fue removido en 4D 20 R3, y el conjunto de comandos PHP comienza su fase de desaprobación en 4D 21.

PHP Execute continúa funcionando, pero ahora requiere un intérprete PHP externo. Esto le da más flexibilidad para actualizar versiones de PHP, aplicar parches de seguridad, y cargar módulos adicionales. Para uso a largo plazo, el enfoque recomendado es ejecutar código PHP a través de system workers, los cuales proveen control total sobre como PHP es lanzado y administrado.

Los comandos permanecen disponibles por compatibilidad, pero los nuevos desarrollos deberían moverse hacia la ejecución basada en system-workers para asegurar un mantenimiento más sencillo y estabilidad futura.

Formatos personalizados de fecha y hora

Cuando necesita que las fechas y horas coincidan con requisitos específicos de una región o proyecto, los formatos por defecto del sistema no siempre son suficientes. Con 4D 21, ahora puede definir formatos personalizados precisos, ya sea para mostrar valores en formularios o para transformarlos en cadenas.

Esta actualización introduce opciones flexibles de formato a través de:

  • El comando String, que ahora admite cadenas de formato totalmente personalizadas.

  • El comando OBJECT SET FORMAT, que permite aplicar formatos personalizados directamente a objetos de formulario.

  • La interfaz, que ahora incluye una opción «Personalizada» para definir patrones visualmente.

Puede controlarlo todo, desde los números de trimestre y de semana hasta los nombres de días localizados y las expresiones horarias detalladas, utilizando una única sintaxis de formato compartida. Esto le da un control total sobre cómo aparecen las fechas y las horas en los documentos, las interfaces y el texto generado.

Exportar definición de estructura como HTML

4D 21 simplifica la forma de compartir definiciones de estructura exportándolas directamente como HTML. Anteriormente, la exportación se basaba en un par XML+XSL que los navegadores renderizaban como HTML, pero la seguridad de los navegadores modernos bloquea los archivos locales para que no carguen ciertos recursos externos.

Con la exportación actualizada, al seleccionar Archivo → Exportar → Definición de estructura a HTML… ahora se produce un archivo HTML independiente que se abre limpiamente en cualquier navegador. Todos los activos necesarios se colocan en una carpeta html_export_resources adjunta, que puede personalizar si es necesario.

También puede exportar en HTML por programación utilizando EXPORT STRUCTURE con su parámetro opcional, que le permite elegir entre los formatos XML y HTML.

FÓRMULAS DINÁMICAS PARA OBJETOS FORMULARIO

Con 4D 21, los objetos de formulario son mucho más flexibles gracias a las fuentes de datos basadas en fórmulas. En lugar de vincular un objeto a un campo fijo o puntero, ahora puede conectarlo directamente a una fórmula utilizando OBJECT SET DATA SOURCE FORMULA.

Esto permite que los valores se actualicen automáticamente en función de los cálculos, el contexto u otra lógica dinámica, lo que resulta perfecto para crear formularios adaptables o generar elementos de interfaz de usuario sobre la marcha.

Combínelo con constantes de list box como lk selected items expression y obtendrá un comportamiento de formulario que se adapta en tiempo real, reduciendo la duplicación de código y mejorando la capacidad de respuesta.

Conversión de cadenas hexadecimales a números

El comando String permite ahora convertir cadenas hexadecimales directamente en números. Se acabaron las utilidades de análisis sintáctico y los trucos con cadenas binarias. Basta con pasar la cadena y obtendrá el resultado numérico.

Es una adición sutil que elimina la fricción al trabajar con API externas, formatos de bajo nivel o integraciones que devuelven hexadecimales.

Nuevas funciones de recorte de cadenas

Los nuevos comandos trim, trimStart y trimEnd, facilitan la eliminación de espacios en blanco o caracteres específicos de las cadenas. Se comportan como sus equivalentes en JavaScript o Python y funcionan con cualquier conjunto de caracteres.

Ya no es necesaria la lógica de recorte manual. Los datos están más limpios, las entradas de formularios son más fáciles de validar y el código se ajusta a las expectativas de los lenguajes modernos.

Mejora de la gestión de catálogos en los sistemas de control de versiones

Antes, todos los detalles del proyecto, como colores y posiciones de tablas, campos y relaciones, se almacenaban en catalog.4DCatalog. Ahora, esta información se divide en un archivo independiente llamado catalog_editor.json.

Esto facilita la gestión de los cambios y la revisión del trabajo, especialmente cuando participan varios desarrolladores. Con este cambio, el archivo de catálogo permanece intacto cuando alguien ajusta una tabla o un campo.

Esto ayuda a evitar conflictos y simplifica la revisión de los cambios. Además, hemos añadido una opción para cambiar a esta nueva configuración en los proyectos más antiguos. Si activa accidentalmente esta función, ¡no se preocupes! Puede deshacerlo fácilmente volviendo a la configuración anterior.

Simplifique las declaraciones de variables con la tipificación directa

La nueva funcionalidad de tipado directo en 4D 21 simplifica las declaraciones de variables eliminando la necesidad de métodos «Compiler».

Este cambio permite a los desarrolladores declarar variables de proceso e inter-proceso directamente en su código, mejorando la organización y el encapsulamiento. En lugar de basarse en la inferencia de tipos, que puede ralentizar la compilación y provocar errores, el compilador se detiene cuando encuentra una variable no tipada, lo que garantiza la seguridad de tipos sin sacrificar la eficiencia. La tipificación directa está activada por defecto para los nuevos proyectos, y los proyectos existentes pueden cambiar fácilmente la función en la configuración del compilador para una transición sin problemas. Esto supone una mejora significativa en la flexibilidad y el control para los desarrolladores 4D.

Experiencia de depuración mejorada

4D 21 aporta mejoras significativas al depurador y al depurador remoto.

Con las expresiones auto-guardadas, ya no es necesario volver a introducir expresiones previamente evaluadas, asegurando una mejor experiencia de depuración. La nueva función «pin» le permite mantener las expresiones esenciales siempre accesibles.

También obtendrá más control con las variables locales, las expresiones de línea y las expresiones personalizadas en el observador de expresiones.

Por último, la interfaz rediseñada ofrece un entorno de depuración más limpio e intuitivo.

Editor de código y formularios

El entorno de desarrollo 4D ha dado un gran paso adelante. A través de los Feature Releases que llevan a 4D 21 LTS, el Editor de Código y Formularios gana advertencias más inteligentes, validación más fuerte, herramientas de edición más limpias y mejor visibilidad de problemas potenciales mucho antes de que lleguen al tiempo de ejecución.

Tanto si está refinando la lógica de negocio, construyendo interfaces dinámicas o manteniendo grandes bases de código, estas mejoras le ayudarán a centrarse en lo que importa, escribir código claro y fiable. Al reducir el ruido, detectar antes los errores y agilizar la navegación por los formularios, el editor permite ahora un flujo de trabajo de desarrollo más rápido y predecible.

Personalización de la visualización global de advertencias

    A medida que los proyectos crecen, el número de advertencias en el código puede aumentar rápidamente. Algunas son guardarraíles esenciales, mientras que otras pueden no aplicarse a su estilo de codificación o arquitectura. Con 4D 21, ahora tiene el control total sobre qué advertencias son importantes para usted.

    Puede definir, a nivel de proyecto, qué tipos de advertencias deben aparecer en el editor de código y en el diálogo del compilador. Esto le permite ocultar las advertencias que considere irrelevantes y mantener la atención en las que realmente le ayudan a detectar problemas a tiempo.

    Además, sigue teniendo el control local. Incluso si una advertencia se muestra u oculta globalmente, puedes activarla o desactivarla en secciones específicas de código utilizando los conocidos interruptores //%W+ y //%W-.

    Esta flexibilidad hace que sea mucho más fácil mantener la concentración, reducir el ruido y adaptar el sistema de advertencias a la forma en que construyes tus aplicaciones.

    Advertencias para elementos de lenguaje obsoletos

    4D 21 le ayuda a mantener su código moderno alertándole cuando utiliza elementos de lenguaje obsoletos. Por ejemplo, los comandos, constantes, parámetros y directivas de tipado que ya no se recomiendan ahora activan advertencias:

    • C_LONGINT($1)

    • C_BOOLEAN($draw)

    • _O_USE INTERNAL DATABASE

    Estos elementos siguen funcionando, pero ya no aparecerán en el completado de código, lo que lo animará a utilizar una sintaxis más reciente y compatible.

    Si lo prefiere, puede desactivar estas advertencias en la configuración de la estructura.

    Para facilitar la introspección, el comando Command name ahora devuelve detalles de depreciación además de información sobre la seguridad de los hilos, para que pueda comprobar rápidamente si un comando debería actualizarse.

    VERIFICACIÓN DE SINTAXIS MÁS INTELIGENTE Y EN TIEMPO REAL PARA FORMULARIOS

    4D 21 aporta una comprobación de sintaxis más profunda e inteligente a los formularios, ayudándole a detectar antes los problemas y a escribir un código más limpio con menos pruebas y errores.

    Ahora puede asociar una clase a un formulario, lo que significa que expresiones como Form.myProperty se validan completamente. El editor comprueba estas expresiones a medida que se escriben, tanto en el código del método como en la lista de propiedades, de modo que los errores aparecen inmediatamente y no durante la compilación.

    Cuando abre un formulario con DIALOG, 4D también instancia la clase asociada automáticamente cuando no se proporciona ningún objeto. Esto hace que el objeto Form sea predecible y consistente sin configuración extra.

    Para ayudarle a moverse más rápido, el editor de código ahora ofrece autocompletado para Form, listando las propiedades y funciones de la clase para que evite nombres mal escritos y se beneficie de un código más claro y fácil de encontrar.

    Comando FORM EDIT mejorado

    4D 21 hace que la edición de formularios sea más rápida e intuitiva ampliando el comando FORM EDIT. Ahora puede abrir un formulario y seleccionar automáticamente un objeto específico dentro de él, permitiéndole saltar directamente al elemento que necesita inspeccionar o ajustar.

    Esto resulta especialmente útil cuando se trabaja con herramientas de análisis, informes de errores o utilidades de refactorización. En lugar de navegar por varias páginas de formularios para localizar un objeto, un único comando le lleva directamente a él:

    FORM EDIT($formName; $objectName)
    Al seleccionar el objeto inmediatamente, incluso dentro de grupos, se obtiene acceso instantáneo a sus propiedades, lo que acelera el trabajo de depuración y limpieza.

    Extensión de código de Visual Studio

    El desarrollo asistido por IA se está convirtiendo en parte de la programación diaria. Desde escribir código y detectar errores hasta generar formularios 4D completos con CSS, clases de formularios y métodos de formularios, la IA cambia la velocidad a la que se mueve. Con Copilot dentro de Visual Studio Code y el soporte completo de las extensiones 4D Analyzer y 4D Debugger, puede utilizar la IA con confianza mientras mantiene su código limpio, validado y fácil de depurar. No se trata sólo de codificación asistida por IA. Se trata de darle un flujo de trabajo de desarrollo más inteligente, rápido y controlado.

    Formatee su código 4D en Visual Studio Code

    4D 21 trae una bienvenida mejora a la extensión VS Code: el formateo de código integrado.

    Si a menudo edita métodos o clases 4D en VS Code, ahora obtendrá un formato que coincide con el estilo utilizado dentro de 4D, haciendo que ambos entornos sean consistentes y más fáciles de cambiar.

    Puede formatear un archivo completo o sólo una selección, tal como lo haría con otros lenguajes en VS Code. El formateador maneja la sangría, el espaciado y el caso de los caracteres de los comandos, palabras clave y constantes, respetando la configuración de sangría de VS Code.

    Mostrar documentación 4D DIRECTAMENTE EN VS CODE

    La extensión 4D-Analyzer añade un práctico atajo para buscar documentación mientras codifica en el editor Visual Studio Code.

    Cuando pasa el ratón sobre un comando 4D, una clase o una función de clase, aparece un tooltip con una breve descripción. En la parte inferior, un enlace «Mostrar documentación 4D» le lleva directamente a la página completa de la documentación oficial de 4D, que se abre automáticamente en su navegador.

    Comprobación de la sintaxis del espacio de trabajo

    La extensión 4D-Analyzer lleva la comprobación de sintaxis del espacio de trabajo a Visual Studio Code. En lugar de validar sólo el archivo que está editando, VS Code ahora puede escanear todo su proyecto 4D y resaltar los problemas al instante.

    Los errores y advertencias aparecen en el panel de problemas de VS Code, agrupados por método o clase 4D. Un solo clic le lleva directamente a la línea exacta, haciendo que la limpieza sea rápida y predecible. Los resaltados en línea y los tooltips también le ayudan a entender los problemas justo donde ocurren.

    Descarga automática de Tool4D

    Con la versión 0.2.0 de la extensión 4D-Analyzer, en lugar de instalar manualmente una aplicación 4D e introducir su ruta en los parámetros de la extensión, ésta descarga automáticamente una versión de tool4d, la almacena en una ubicación del sistema y la ejecuta en segundo plano. Esta simplificación pretende agilizar el proceso de puesta en marcha y mejorar el desarrollo con VS Code para 4D.

    Codespaces de GitHub

    Los Codespaces de GitHub simplifican el desarrollo remoto permitiendo la edición de repositorios desde cualquier lugar a través de Visual Studio Code o la aplicación Codespaces.

    Con la integración de proyectos 4D, los desarrolladores pueden mejorar su experiencia de codificación con herramientas como 4D-Analyzer, que ofrece funcionalidades tales como resaltado de código y auto-completado. Como se ve en la sección anterior, 4D-Analyzer descarga y actualiza automáticamente la versión de la aplicación tool4d que haya definido. 4D ha lanzado una versión dedicada, tool4d, para GitHub para permitir esto en un entorno Codespace.

    Depuración de código 4D directamente en Visual Studio Code

    4D 21 presenta la nueva extensión 4D-Debugger para Visual Studio Code, que mejora la depuración con potentes funciones como establecer puntos de interrupción, recorrer el código e inspeccionar variables, todo directamente en VS Code. Esta herramienta se basa en 4D-Analyzer y se integra sin problemas, haciendo la depuración más rápida e intuitiva.

    Instale la extensión 4D-Debugger desde el marketplace de VS Code. Asegúrese de que un 4D Server se está ejecutando en su máquina, y configure la conexión en el archivo .vscode/launch.json. También puede conectarse a un servidor existente utilizando el puerto por defecto del depurador.

    Interfaz de usuario

    Desde la personalización de ventanas hasta un mejor desplazamiento, control de iconos y catálogos controlados por versiones más limpios, la capa de interfaz de usuario de 4D 21 se ha vuelto más flexible y fácil de usar para los desarrolladores. Estas mejoras le ayudarán a crear interfaces más elegantes y modernas a la vez que simplifican la colaboración, la depuración y el mantenimiento entre bastidores.

    Personalice la apariencia de la aplicación con nuevos tipos de ventanas

    Dos nuevos tipos de ventana le permiten diseñar usted mismo la barra de título de la ventana y añadir sus propios elementos, como botones o un cuadro de búsqueda. Esto significa total libertad para adaptar la apariencia de su aplicación a sus especificaciones.

    Pero eso no es todo. También hemos introducido varios comandos nuevos diseñados para agilizar su proceso de desarrollo:

    • Reducir una ventana en la barra de título en Windows o en el dock en macOS, REDUCE RESTORE WINDOW
    • Saber si la ventana está reducida en la barra de título en Windows o en el dock en macOS, Is Window Reduced
    • Saber si la ventana está maximizada, Is Window Maximized.

    Iconos personalizados para cada tipo de ventana

    El comando SET WINDOW DOCUMENT ICON permite definir un icono personalizado para cada tipo de ventana, lo que mejora la navegación y la experiencia del usuario. Utilizando la sintaxis del comando, puede definir un icono o documento para una ventana, haciendo que su interfaz sea visualmente más atractiva. El icono será visible en la ventana y en la barra de tareas de Windows, ofreciendo señales visuales claras. Esta función también permite asociar iconos a documentos, lo que ofrece opciones de personalización adicionales.

    Comportamiento de desplazamiento mejorado en los subformularios

    4D 21 hace que trabajar con subformularios en sus aplicaciones sea mucho más fluido e intuitivo para los usuarios.

    ¿Alguna vez se ha frustrado al intentar desplazarse por una lista en un subformulario, sólo para que todo el subformulario se mueva en su lugar? ¿O quizás ha intentado desplazarse por el subformulario, pero el list box no se mueve?

    4D 21 soluciona esto con un nuevo y mejorado comportamiento de desplazamiento del subformulario.

    Introducción de «blank if null» para columnas de tiempo y pies de página

    Con 4D 21, la propiedad «Blank if null» está ahora disponible para columnas de tipo «hora» y pies de página en listboxes, solucionando una antigua limitación.

    Puede definir fácilmente el comportamiento de visualización a través del tema de visualización o por programación. Esta mejora permite obtener resultados más claros e intuitivos, tanto si se utiliza una simple casilla de verificación como una línea de código.

    Parámetros personalizados para inicializar el área web intEGRada

    4D 21 facilita la personalización del área web integrada en sus aplicaciones. Esta área utiliza Chromium para navegar, y los desarrolladores a veces necesitan ajustar cómo funciona Chromium.

    Anteriormente, esto requería complejos cambios en el código. Ahora, con 4D 21, puede simplemente crear un archivo llamado«4DCEFParameters.json» y especificar las personalizaciones que desea en ese archivo. Esto hace que la gestión sea mucho más fácil y asegura que sus personalizaciones se apliquen correctamente.

    Por ejemplo, esta función permite que los vídeos se reproduzcan automáticamente en su área web, lo que antes no era posible.

    Utilizar una clase en áreas web intEGRadas con 4D

    Controle el acceso a los métodos 4D en sus áreas web definiendo exactamente qué funciones están expuestas a través de $4d. Con el nuevo comando WA SET CONTEXT de 4D 21, puede encapsular y restringir las funciones disponibles utilizando métodos de clase o contextos basados en objetos, aumentando la seguridad, mejorando la organización del código y simplificando el mantenimiento.

    Mejora de la edición de fórmulas y de la seguridad en el asistente de etiquetas

    4D 21 mejora el componente Label Wizard, haciendo más fácil y segura la inserción y modificación de fórmulas en sus etiquetas. Ahora, puede añadir fórmulas rápidamente utilizando un botón dedicado o un elemento de menú, y validarlas directamente en el Editor de fórmulas.

    Esta actualización mejora la seguridad filtrando las fórmulas maliciosas y garantiza la creación de fórmulas válidas bloqueando los comandos no permitidos. La edición también se simplifica, basta con hacer doble clic para abrir la fórmula y realizar cambios.

    Impresión sin bloqueo

    4D 21 introduce la impresión sin bloqueo, permitiendo la ejecución simultánea de múltiples trabajos de impresión para mejorar la capacidad de respuesta de la aplicación. La activación por defecto en los nuevos proyectos garantiza una experiencia fluida, pero las aplicaciones más antiguas deben activarla en las opciones de compatibilidad de los ajustes de estructura.