pbi_validate_desktop_render
Capture a Power BI Desktop report window to confirm it renders with actual data, revealing when a .pbip shows blank visuals from an unrefreshed model.
Instructions
Abre un .pbip/.pbix y captura su ventana real sin depender del foco.
Es la comprobacion visual automatizable que complementa al validador
PBIR: espera el modelo, identifica la ventana por PID y hora de inicio,
y la renderiza con PrintWindow directamente a outputs/desktop_captures.
La captura no activa ni trae Desktop al frente, por lo que no puede
fotografiar por accidente otra ventana que tape el informe.
path (o pbip_path, el mismo nombre que devuelve pbi_session_info)
se puede omitir: entonces se usa el proyecto .pbip activo.
refresh=true es lo que hace que la captura signifique algo en un
.pbip: ese formato guarda la definicion, no los datos, asi que recien
abierto el modelo viene VACIO y las tablas y matrices salen en blanco
aunque el informe este perfecto. Con refresh se abre, se refresca, se
espera a que la ventana deje de repintar y se captura. Ese es tambien
el camino para fotografiar OTRA pagina con datos: page exige abrir el
proyecto, y al abrirlo hay que volver a refrescar.
Como el refresh modifica de forma irreversible el modelo en memoria,
refresh=true exige ademas confirm=true. confirm_reuse autoriza
mover una ventana que ya era del usuario; son autorizaciones distintas.
Pase lo que pase, la respuesta lleva data_loaded: si es false, la
captura no es representativa del informe, es la foto de un modelo sin
datos. Si no se pudo comprobar, se dice; no se afirma ninguna de las dos.
page: captura ESA pagina (id o nombre visible), no la que quedo
activa. fit_to_page (activado por defecto): fuerza la vista
"Ajustar a la pagina" para que salga el lienzo COMPLETO y no el tercio
superior al zoom guardado. Con el proyecto CERRADO (.pbip) ambos se
aplican como una vista temporal en disco que se restaura byte a byte
al terminar. Con la ventana YA ABIERTA -que es del usuario- se hacen
en la propia interfaz, pero SOLO con confirm_reuse=true: elegir una
pestaña y cambiar el zoom mueven esa ventana, y una captura que solo
debia observar no lo hace por su cuenta. Sin confirm_reuse, page
sobre una sesion abierta es un error y fit_to_page degrada a un
aviso (se captura al zoom actual). Con el, se elige la pestaña y el
zoom por UI Automation y se demuestra el resultado hasta donde se
puede (navigation): la pagina por el IsSelected de su pestaña; el
zoom solo por el nivel que anuncia Power BI, lo que prueba que el zoom
CAMBIO y no que el modo resultante sea "Ajustar a la pagina"
-verified_means lo dice en la propia respuesta-. Si la pagina no se
pudo demostrar, la tool falla en vez de capturar otra; si el zoom no
se pudo demostrar, lo dice en warnings. Nunca
toca pages.json de un proyecto abierto.
La captura separa cuatro señales que no son la misma cosa:
capture.identity_settled (la ventana muestra ESTE documento),
capture.frame_settled (la imagen dejo de cambiar), data_loaded
(el modelo tiene filas) y capture.frame_uniform (la imagen es casi
de un solo color: pagina vacia o visuales sin pintar).
capture.capture_representative resume las tres primeras.
data_loaded habla de lo que muestra la VENTANA, no solo del motor:
canvas lee por UI Automation los avisos de Power BI ("es necesario
actualizar manualmente", "datos incompletos") y los valores
«(En blanco)». Si Power BI avisa de que faltan datos, data_loaded es
false aunque el motor tenga filas -van en model_data_loaded- y la
captura deja de ser representativa. Con refresh=true se espera a que
esos avisos desaparezcan antes de capturar (canvas.wait_after_refresh).
En un .pbip con la pagina conocida se espera ademas a que se vean los
titulos de sus visuales: si no aparecen todos, canvas.state es
visuals_not_painted y la captura tampoco es representativa.
canvas.state="no_blank_signals" no demuestra datos pintados: solo que
no se vio lo contrario; unknown es que no se pudo leer.
"Ajustar a la pagina" en una sesion YA ABIERTA no necesita
confirm_reuse si esa ventana la abrio este mismo servidor (p. ej.
con pbi_open_and_refresh) o si la llamada trae refresh=true y
confirm=true. navigation/authorized_by dice cual fue.
Si la tool tuvo que abrir Desktop, lo cierra al terminar (tambien si la captura falla) y devuelve la seleccion de modelo a como estaba. Si el informe ya estaba abierto, reutiliza esa sesion y nunca cierra la ventana del usuario.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| path | No | ||
| confirm | No | ||
| refresh | No | ||
| timeout | No | ||
| pbip_path | No | ||
| request_id | No | ||
| reuse_open | No | ||
| fit_to_page | No | ||
| project_path | No | ||
| confirm_reuse | No | ||
| capture_timeout | No | ||
| refresh_timeout_seconds | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |