Ir al contenido

SAP — Read tree

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

Lista los nodos de un árbol de SAP (como el menú de SAP Easy Access o los árboles de navegación de muchas transacciones) con su clave, su texto y su nivel. Es la forma de averiguar las claves que necesitan las demás actividades de árbol, y también sirve para leer el contenido de un árbol como datos.

Espera a que SAP termine lo que esté procesando, busca el árbol por su selector y recorre sus nodos. Por cada nodo devuelve un elemento con tres campos:

CampoContenido
keyClave del nodo. Es la que usan SAP — Expand tree node y SAP — Select tree node.
textTexto visible del nodo.
levelNivel de profundidad del nodo en el árbol, como texto.

En los árboles de SAP, los nodos se identifican por su clave, no por el texto ni por la posición. La clave la asigna el programa de SAP y es estable; el texto cambia con el idioma de la sesión y la posición cambia en cuanto se expande otra rama. Además, las claves suelen llevar espacios significativos (por ejemplo " 1"), así que lo más seguro es tomarlas de la salida de esta actividad en lugar de escribirlas a mano.

Si el control no es un árbol, la actividad falla indicándolo. Si el árbol todavía no está en pantalla, lo espera hasta el plazo configurado (timeout o el elementTimeout del ámbito, 30 segundos por defecto).

ParámetroTipoPor defectoDescripción
selectorselector—El árbol. Selector capturado o id de SAP, por ejemplo wnd[0]/usr/cntlTREE/shellcont/shell.
ParámetroTipoPor defectoDescripción
sessionZoanSapSession—Sesión de SAP. Omítela dentro del body de un SAP — Attach o SAP — Log on.
timeoutnumber—Segundos que se espera a que aparezca el árbol. 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 con un elemento por nodo cargado, en el orden en que SAP los entrega, cada uno con key (string), text (string) y level (el nivel, como string). Si SAP no puede dar el texto o el nivel de un nodo, ese campo viene como "". En el log queda cuántos nodos se leyeron.

MensajeCausa y solución
El control no respondió a GetAllNodeKeys; ¿de verdad es un GuiTree?El selector no apunta a un árbol. Captura el shell del árbol.
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.

Buscar un nodo por su texto y abrirlo:

SAP — Read tree selector = "wnd[0]/usr/cntlTREE/shellcont/shell" → output: nodos
For Each items = nodos itemVariable = nodo
└─ activities:
If condition = nodo["text"] == "Informes mensuales"
└─ then:
SAP — Select tree node selector = "wnd[0]/usr/cntlTREE/shellcont/shell" nodeKey = nodo["key"]