Ir al contenido

SAP — Read table

Tipo: sap-read-table  ·  Paquete: SAP Activities v1.0.5  ·  Salida: List<Dictionary<string,object>>

Lee una tabla de SAP y te la entrega como una lista de filas, lista para recorrer con un For Each, filtrar o pasar a otro sistema. Funciona con los dos tipos de tabla que usa SAP: las rejillas ALV y las tablas clásicas de las pantallas antiguas. Y se desplaza sola cuando hace falta, para no quedarse solo con lo que se ve en pantalla.

Espera a que SAP termine de procesar, busca el control por su selector (esperando hasta timeout) y lo lee según su tipo:

  • ALV (GuiGridView). Toma el total de filas del propio ALV y lee cada celda por fila y columna. Las columnas se identifican por su nombre técnico (por ejemplo MANDT, MTEXT). Si una fila todavía no está cargada, le pide al ALV que vaya a ella y reintenta; si aun así no puede leer la celda, la deja vacía (null).
  • Tabla clásica (GuiTableControl). SAP solo tiene en memoria las filas visibles, así que la actividad lee lo que se ve, desplaza la tabla una página y sigue, hasta llegar al final o a maxRows. Como SAP repinta la pantalla con cada desplazamiento, la actividad vuelve a buscar la tabla antes de leer cada página, así que siempre lee los datos de la página actual. Las columnas se identifican por el nombre del campo de cada celda (o col0, col1… si no tiene). Se detiene en la primera fila completamente vacía, que SAP pinta como relleno al final de la tabla.

Si el control no es ninguna de las dos (por ejemplo, una lista clásica de reporte), falla y te sugiere SAP — Read classic list o SAP — Export list.

Todos los valores se devuelven como texto, tal como los muestra SAP.

ParámetroTipoPor defectoDescripción
selectorselector—El ALV o la tabla clásica. Ej: "wnd[0]/usr/cntlGRID1/shellcont/shell" (ALV) o "wnd[0]/usr/tblSAPLXYZTC_ITEMS" (tabla clásica).
ParámetroTipoPor defectoDescripción
sessionZoanSapSession—Sesión de SAP. Omítela dentro del body de un SAP — Attach o SAP — Log on.
maxRowsint1000Máximo de filas a leer. Una tabla completa puede tener cientos de miles.
columnsstring—Columnas a leer, separadas por comas. Ej: "MANDT,MTEXT". Vacío las lee todas, que es más lento en un ALV ancho. En un ALV son nombres técnicos de campo; en una tabla clásica, el nombre del campo de cada celda.
timeoutnumber—Segundos que se espera a que aparezca el control. Manda sobre el elementTimeout del ámbito. Vacío usa el del ámbito (30 por defecto); 0 falla al primer intento. Admite decimales.

Devuelve una List<Dictionary<string,object>>: una lista de filas en el orden de la tabla, y cada fila es un diccionario columna → valor:

[
{ "MANDT": "001", "MTEXT": "Mandante de pruebas", "ORT01": "Ciudad Ejemplo" },
{ "MANDT": "002", "MTEXT": "Mandante de formación", "ORT01": "Ciudad Ejemplo" }
]
  • Valores: siempre texto, tal como los muestra SAP. En un ALV, una celda que no se pudo leer queda en null.
  • Claves en un ALV: sin columns, todas las columnas en el orden en que se muestran. Con columns, exactamente las pedidas: primero las que existen, en el orden en que las escribiste, y después las que no existen, con valor null (así una columna mal escrita se nota en vez de desaparecer).
  • Claves en una tabla clásica: el nombre del campo de cada celda (por ejemplo RSYST-BNAME), o col0, col1… si la celda no tiene nombre. Con columns, solo las celdas cuyo nombre está en la lista; las demás no aparecen.
  • Casos límite: una tabla vacía devuelve una lista vacía. En una tabla clásica, la lectura se detiene en la primera fila sin ningún valor.

En el log queda el número de filas leídas, nunca su contenido.

MensajeCausa y solución
El componente es …, no una cuadrícula. Si la pantalla muestra una lista clásica (etiquetas sobre una rejilla de caracteres), usa sap-read-list o expórtala con sap-export-list.El selector apunta a otro tipo de control. Usa SAP — Read classic list o SAP — Export list, o corrige el selector para que apunte al shell del ALV o al tbl… de la tabla.
La tabla '…' desapareció al desplazarse a la fila ….Tras desplazar la tabla clásica, SAP dejó de mostrarla (cambió de pantalla o salió un diálogo). Revisa qué mensaje dejó SAP.
El componente '…' no existe en la sesión de SAP. Se esperó … s a que apareciera. La pantalla actual es … dynpro … (transacción …). …El elemento no apareció en el plazo. El mensaje dice en qué pantalla está la sesión: casi siempre es otra distinta de la esperada (un diálogo delante, un paso que no se dio). Si la pantalla tarda, sube timeout.

Además, los errores comunes a todas las actividades.

SAP Read Table selector = "wnd[0]/usr/cntlGRID1/shellcont/shell"
columns = "MANDT,MTEXT" maxRows = 500 → output: filas
For Each items = filas itemVariable = fila
└─ activities:
Log message = str(fila["MANDT"]) + " — " + str(fila["MTEXT"])