5.3 KiB
5.3 KiB
Expresiones Power Automate — Fechas + Responsables
Guia copy-paste para el flujo Puente Planner. Usa los nombres de bucle de tu flujo:
| Bucle | Variable |
|---|---|
| Planes | Aplicar_a_cada_uno |
| Tareas (Parte 1) | Aplicar_a_cada_uno_1 |
| Enriquecer (Parte 2) | Aplicar_a_cada_uno_2 |
Accion de perfil: Obtener_el_perfil_de_usuario_(V2) (ajusta si tu flujo usa otro nombre).
Variables al inicio
| Nombre | Tipo | Valor inicial |
|---|---|---|
todasLasTareas |
Matriz | [] |
tareasFinales |
Matriz | [] |
Parte 1 — Anexar a todasLasTareas
Dentro de Aplicar_a_cada_uno_1, despues de Enumerar tareas.
No referencies Obtener perfil aqui.
Campo Valor (modo expresion):
json(concat(
'{"grupo":"Sapian","proyecto":"',
replace(coalesce(items('Aplicar_a_cada_uno')?['title'], ''), '"', '\"'),
'","plan_id":"', coalesce(items('Aplicar_a_cada_uno')?['id'], ''),
'","tarea":"', replace(coalesce(items('Aplicar_a_cada_uno_1')?['title'], ''), '"', '\"'),
'","tarea_id":"', coalesce(items('Aplicar_a_cada_uno_1')?['id'], ''),
'","estado":"',
if(equals(coalesce(items('Aplicar_a_cada_uno_1')?['percentComplete'], 0), 100), 'Completada',
if(greater(coalesce(items('Aplicar_a_cada_uno_1')?['percentComplete'], 0), 0), 'En progreso', 'Por hacer')),
'","porcentaje":', string(coalesce(items('Aplicar_a_cada_uno_1')?['percentComplete'], 0)),
',"fecha_vencimiento":"', coalesce(items('Aplicar_a_cada_uno_1')?['dueDateTime'], ''),
'","asignados":"Sin asignar","userIdAsignado":"',
if(or(empty(items('Aplicar_a_cada_uno_1')?['assignments']), equals(string(items('Aplicar_a_cada_uno_1')?['assignments']), '{}')),
'', first(keys(items('Aplicar_a_cada_uno_1')?['assignments']))),
'","vencida":false}'
))
Enumerar tareas — campo Plan:
items('Aplicar_a_cada_uno')?['id']
Parte 2 — Condicion
Expresion (lado izquierdo):
coalesce(items('Aplicar_a_cada_uno_2')?['userIdAsignado'], '')
Operador: no es igual a
Lado derecho: (vacio)
Parte 2 — Rama SI (despues de Obtener_el_perfil_de_usuario_(V2))
Anexar a tareasFinales, campo Valor:
json(concat(
'{"grupo":"', coalesce(items('Aplicar_a_cada_uno_2')?['grupo'], 'Sapian'),
'","proyecto":"', replace(coalesce(items('Aplicar_a_cada_uno_2')?['proyecto'], ''), '"', '\"'),
'","plan_id":"', coalesce(items('Aplicar_a_cada_uno_2')?['plan_id'], ''),
'","tarea":"', replace(coalesce(items('Aplicar_a_cada_uno_2')?['tarea'], ''), '"', '\"'),
'","tarea_id":"', coalesce(items('Aplicar_a_cada_uno_2')?['tarea_id'], ''),
'","estado":"', coalesce(items('Aplicar_a_cada_uno_2')?['estado'], 'Por hacer'),
'","porcentaje":', string(coalesce(items('Aplicar_a_cada_uno_2')?['porcentaje'], 0)),
',"fecha_vencimiento":"', coalesce(items('Aplicar_a_cada_uno_2')?['fecha_vencimiento'], ''),
'","asignados":"', replace(coalesce(
outputs('Obtener_el_perfil_de_usuario_(V2)')?['body/displayName'],
outputs('Obtener_el_perfil_de_usuario_(V2)')?['body/givenName'],
'Sin asignar'), '"', '\"'),
'","vencida":', if(coalesce(items('Aplicar_a_cada_uno_2')?['vencida'], false), 'true', 'false'),
'}'
))
Obtener perfil — Id. de usuario:
items('Aplicar_a_cada_uno_2')?['userIdAsignado']
Parte 2 — Rama NO
Anexar a tareasFinales, campo Valor:
json(concat(
'{"grupo":"', coalesce(items('Aplicar_a_cada_uno_2')?['grupo'], 'Sapian'),
'","proyecto":"', replace(coalesce(items('Aplicar_a_cada_uno_2')?['proyecto'], ''), '"', '\"'),
'","plan_id":"', coalesce(items('Aplicar_a_cada_uno_2')?['plan_id'], ''),
'","tarea":"', replace(coalesce(items('Aplicar_a_cada_uno_2')?['tarea'], ''), '"', '\"'),
'","tarea_id":"', coalesce(items('Aplicar_a_cada_uno_2')?['tarea_id'], ''),
'","estado":"', coalesce(items('Aplicar_a_cada_uno_2')?['estado'], 'Por hacer'),
'","porcentaje":', string(coalesce(items('Aplicar_a_cada_uno_2')?['porcentaje'], 0)),
',"fecha_vencimiento":"', coalesce(items('Aplicar_a_cada_uno_2')?['fecha_vencimiento'], ''),
'","asignados":"Sin asignar","vencida":', if(coalesce(items('Aplicar_a_cada_uno_2')?['vencida'], false), 'true', 'false'),
'}'
))
Respuesta HTTP (accion final)
Codigo: 200
Encabezado: Content-Type: application/json
Cuerpo (pega en el editor; inserta variables con contenido dinamico):
{
"ok": true,
"mensaje": "Datos extraidos correctamente",
"todasLasTareas": @{variables('todasLasTareas')},
"tareas": @{variables('tareasFinales')}
}
Python fusiona: fechas desde todasLasTareas + responsables desde tareas.
Probar
- En PA: Probar > Probar manualmente (debe quedar verde).
- En tu PC:
python scripts/diagnostico_pa.py
- Reinicia tablero:
python run_tablero.py
Errores frecuentes
| Error | Solucion |
|---|---|
TriggerRequestMethodNotValid GET |
No abras la URL en el navegador; usa POST o Probar en PA |
| 502 Bad Gateway | Historial PA > accion roja; revisa expresiones de arriba |
| Referencia invalida a Obtener perfil | Solo en rama SI, despues de Obtener perfil; nombre exacto |
| Fechas vacias | Parte 1 debe incluir fecha_vencimiento + Respuesta con todasLasTareas |
| Sin responsables | Parte 2 + Obtener perfil; condicion sobre userIdAsignado |