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:
@InvocableMethodidentifica los métodos que se pueden ejecutar como acciones invocables, por ejemplo desde una flow.@InvocableVariableidentifica 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:
En tu Screen Flow, agregás una acción de Apex que ejecute el método invocable y devuelva la colección Apex-Defined.
En la pantalla, insertás el componente Data Table.
En Source Collection, indicás esa colección Apex-Defined.
En la sección Configure Rows, elegís un campo como Unique Identifier, por ejemplo el código o un id.
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
Notas de la versión Winter '26, "Display Complex Data with Apex-Defined Collection Support in Data Tables": https://help.salesforce.com/s/articleView?id=release-notes.rn_automate_flow_builder_apex_support_screen_flow.htm&language=en_US&release=258&type=5
Apex Developer Guide, anotación @InvocableMethod: https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_annotation_InvocableMethod.htm
Apex Developer Guide, anotación @InvocableVariable: https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_annotation_InvocableVariable.htm
Actions Developer Guide, Apex Actions: https://developer.salesforce.com/docs/atlas.en-us.api_action.meta/api_action/actions_obj_apex.htm
Apex Developer Guide, Data Types: https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/langCon_apex_data_types.htm
Lightning Component Reference, componente base lightning-datatable: https://developer.salesforce.com/docs/component-library/bundle/lightning-datatable/documentation















