Pulse/Salesforce: Cómo mostrar colecciones Apex-Defined en un Data Table de Screen Flow

Salesforce: Cómo mostrar colecciones Apex-Defined en un Data Table de Screen Flow

Winter '26 permite usar colecciones Apex-Defined como fuente de un Data Table de Screen Flow. Qué cambia, cómo se configura y dónde están los límites, con fuentes oficiales.

Resumí este artículo con

TL;DR

La versión Winter '26 de Salesforce permite que los Data Tables de Screen Flows muestren colecciones definidas en Apex directamente, eliminando la necesidad de transformar datos complejos en objetos estándar. Esto simplifica la visualización de respuestas de llamadas HTTP o resultados de elementos Transform sin crear objetos intermedios. Aunque no permite la edición en línea, es ideal para mostrar y seleccionar datos complejos, mejorando la integración entre Apex y los flujos declarativos.

Durante años, mostrar en una pantalla los datos que devolvía una clase de Apex tuvo el mismo problema de base: el componente Data Table de los Screen Flows solo aceptaba colecciones de objetos estándar como fuente. Si tu lógica vivía en Apex, por ejemplo la respuesta de un callout HTTP a una API externa, no la podías pasar directo a la tabla. Tenías que transformar esos datos en registros de un objeto, real o en memoria, solo para poder visualizarlos.

La versión Winter '26 de Salesforce cambia eso. Vamos a ver qué incorpora exactamente, cómo funciona y dónde están sus límites. Todo lo que sigue está apoyado en documentación oficial, y los enlaces a las fuentes están al final.

Qué incorpora Winter '26

La nota de la versión, titulada "Display Complex Data with Apex-Defined Collection Support in Data Tables", confirma que los Data Tables de los Screen Flows ahora aceptan colecciones Apex-Defined como Source Collection. Antes la fuente estaba limitada a colecciones de objetos estándar. Ahora podés alimentar la tabla con la salida de un elemento Transform o de un callout HTTP, entre otros datos complejos.

En criollo: la colección que arma tu Apex puede ir directo al Data Table, sin crear un objeto intermedio ni grabar registros temporales solo para mostrarlos.

Un repaso: qué son las variables Apex-Defined

Las variables Apex-Defined existen en Flow desde la versión Summer '19. La idea es dejar que las flows trabajen con estructuras de datos complejas, del tipo que normalmente devuelve una llamada a un servicio web. Un desarrollador define una clase de Apex que actúa como molde, y la flow puede manipular esos objetos de forma declarativa.

Para que ese molde sea visible desde Flow, Salesforce documenta dos anotaciones:

  • @InvocableMethod identifica los métodos que se pueden ejecutar como acciones invocables, por ejemplo desde una flow.

  • @InvocableVariable identifica las variables que usan esos métodos invocables dentro de una clase personalizada. Cada variable anotada es, en la práctica, uno de los campos que vas a poder mostrar como columna.

Un ejemplo genérico del patrón documentado:

public with sharing class CotizacionAction {

    public class Cotizacion {
        @InvocableVariable(label='Codigo' required=true)
        public String codigo;   // identifica cada fila, por ejemplo "USD"

        @InvocableVariable(label='Moneda')
        public String moneda;

        @InvocableVariable(label='Valor')
        public Decimal valor;
    }

    @InvocableMethod(label='Obtener cotizaciones' callout=true)
    public static List<List<Cotizacion>> obtener() {
        List<Cotizacion> filas = new List<Cotizacion>();
        // Aca va el callout HTTP a la API y el armado de la coleccion
        return new List<List<Cotizacion>>{ filas };
    }
}

El método invocable es estático y público, y vive en una clase externa. callout=true se usa cuando el método hace llamadas HTTP. El doble List es el patrón de bulkificación de Apex: el método recibe y devuelve una lista por invocación, así que para entregar una colección como salida, el tipo de retorno es una lista de listas.

Cómo se configura en el Screen Flow

A alto nivel, el flujo de trabajo es este:

  1. En tu Screen Flow, agregás una acción de Apex que ejecute el método invocable y devuelva la colección Apex-Defined.

  2. En la pantalla, insertás el componente Data Table.

  3. En Source Collection, indicás esa colección Apex-Defined.

  4. En la sección Configure Rows, elegís un campo como Unique Identifier, por ejemplo el código o un id.

  5. Definís las columnas que se muestran y, si lo necesitás, habilitás Row Selection para que el usuario pueda elegir una o varias filas.

Como referencia, el componente Data Table para Screen Flows existe desde Winter '23, pensado para mostrar colecciones de registros y permitir su selección, o bien para una visualización simple sin selección.

Por qué importa el Unique Identifier

El Unique Identifier no es opcional por capricho. Salesforce indica que hay que configurar ese campo para que las filas se muestren y se seleccionen correctamente, y para evitar comportamientos impredecibles cuando aparecen valores duplicados. Es el mismo concepto que el keyField del componente base lightning-datatable: el identificador único que asocia cada fila con un registro.

Alcance y límites

Conviene tener clara una cosa antes de planificar tu caso de uso: esta mejora es para mostrar y seleccionar. El usuario puede ver la colección Apex-Defined en la tabla y, con Row Selection, elegir filas para reutilizarlas más adelante en la flow. La edición de celdas inline dentro del Data Table no forma parte de esta capacidad. Si tu escenario necesita que el usuario edite los datos ahí mismo, vas a tener que resolverlo con otro enfoque.

Dónde lo vas a usar

Algunos escenarios donde encaja bien:

  • Mostrar la respuesta de un callout HTTP, como cotizaciones, stock o datos de un sistema externo, sin persistirla en Salesforce.

  • Visualizar la salida de un elemento Transform o cálculos resueltos en Apex.

  • Armar pantallas internas de revisión rápida sobre datos complejos, sin crear objetos solo para alimentar la vista.

Cierre

La novedad no es la más vistosa de Winter '26, pero saca una fricción concreta entre la capa de código y la interfaz. Para los equipos que combinan Apex con automatización declarativa, es una de esas mejoras que simplifican el día a día y achican el código de transformación que antes era obligatorio.

Si trabajás con Screen Flows y datos que nacen en Apex, vale la pena probarlo en un sandbox antes de que la versión llegue a producción.

Fuentes oficiales de Salesforce

Preguntas frecuentes

¿Qué novedad trae la versión Winter '26 de Salesforce para los Data Tables de Screen Flows?

La versión Winter '26 permite que los Data Tables de Screen Flows acepten colecciones Apex-Defined como fuente de datos. Esto significa que ahora puedes mostrar directamente datos complejos generados por Apex, como respuestas de llamadas HTTP, sin necesidad de transformarlos en registros de objetos estándar.

¿Qué son las variables Apex-Defined y cómo se usan en Flow?

Las variables Apex-Defined son estructuras de datos complejas definidas en Apex que Flow puede manipular. Se crean mediante clases de Apex con anotaciones como @InvocableMethod y @InvocableVariable, permitiendo que Flow trabaje con tipos de datos personalizados de forma declarativa.

¿Cómo se configura una colección Apex-Defined en un Data Table de Screen Flow?

Primero, agregas una acción de Apex en tu Screen Flow para ejecutar el método invocable que devuelve la colección. Luego, en el componente Data Table de la pantalla, seleccionas esa colección Apex-Defined como Source Collection. Finalmente, configuras las columnas a mostrar y un campo como Unique Identifier.

¿Por qué es importante el Unique Identifier en el Data Table?

El Unique Identifier es crucial para que las filas se muestren y seleccionen correctamente, y para evitar comportamientos impredecibles con valores duplicados. Actúa como un identificador único que asocia cada fila, similar al keyField en lightning-datatable.

¿Se pueden editar las celdas de un Data Table que muestra colecciones Apex-Defined?

No, esta mejora se enfoca en la visualización y selección de datos. La edición de celdas en línea dentro del Data Table no es una funcionalidad incluida con el soporte para colecciones Apex-Defined. Si necesitas edición, deberás implementar otra solución.

Juan Manuel Garrido

Escrito por

Juan Manuel Garrido

Co-founder, Vantegrate

Co-fundador de Vantegrate y fundador de EGA Futura (1994). Lleva más de 30 años creando software empresarial para América Latina y es partner de Salesforce desde 2009. Escribe sobre CRM, procesos de negocio y los ecosistemas Salesforce y Oracle.

Más de 35 integraciones directas

SalesforceMercado PagoOpenpayPaywayOracleServiceNowSlackSAPStripeFiservSalesforce Marketing CloudMicrosoft Dynamics 365HubSpotWhatsApp BusinessSalesforceMercado PagoOpenpayPaywayOracleServiceNowSlackSAPStripeFiservSalesforce Marketing CloudMicrosoft Dynamics 365HubSpotWhatsApp Business

¿Cuántas ventas se perdieron mientras leías esto?

Cada minuto sin responder un mensaje de WhatsApp es una oportunidad que se va a tu competencia. Agendá una demo y descubrí cuánto puede vender Sellium por tu empresa.

Agendar demo
Equipo en oficina al atardecer
Equipo en pasillo de oficina
Equipo trabajando con laptops
Equipo trabajando junto al puerto
Equipo en sala de reuniones
Equipo trabajando con vista al río
Salesforce
ISV Partner
AppExchange Partner
Salesforce · Desde 2009
Oracle
OCI Partner
Marketplace & OCI Partner
Oracle Cloud Infrastructure
Compartir