Power automate no puede leer una columna de persona: causa raíz y solución
🔍 WiseChecker

Power automate no puede leer una columna de persona: causa raíz y solución

Cuando creas un flujo de Power Automate para leer una columna de Persona de SharePoint, el flujo puede devolver un error o mostrar valores vacíos. Esto ocurre porque Power Automate maneja las columnas de Persona de manera diferente a otros tipos de columna. El flujo recibe un objeto complejo con metadatos en lugar de una cadena de texto simple. Este artículo explica por qué ocurre el error y te ofrece dos soluciones concretas: usar la acción Parse JSON o la acción Apply to Each para extraer el nombre para mostrar de la persona.

Conclusiones clave: Solucionar errores de lectura de columnas de Persona en Power Automate

  • Acción Parse JSON con esquema: Convierte el objeto de la columna de Persona en un formato legible para que puedas usar el nombre para mostrar directamente.
  • Bucle Apply to Each: Itera sobre el array de objetos de usuario de la columna de Persona para extraer el correo electrónico o el nombre para mostrar de cada persona.
  • Acción Compose con expresión: Usa first(outputs('Get_item')?['PersonColumnName'])['DisplayName'] para obtener el nombre de una sola persona sin un bucle.

ADVERTISEMENT

Por qué Power Automate devuelve un valor vacío o un error para una columna de Persona

SharePoint almacena las columnas de Persona como objetos, no como texto plano. Cuando usas la acción Get item o Get items en Power Automate, la columna de Persona aparece como un array de objetos. Cada objeto contiene propiedades como DisplayName, Email, Claims y Department. Power Automate no puede mostrar estas propiedades anidadas automáticamente en el contenido dinámico. Si intentas usar el nombre de la columna directamente en una acción Send an email, el flujo falla o genera [object Object].

La causa raíz es la estructura de datos. Power Automate espera un valor de cadena, pero la columna de Persona proporciona un array. El flujo no sabe qué propiedad extraer. Debes indicar explícitamente a Power Automate qué propiedad leer, como DisplayName o Email.

Ejemplo de estructura de datos de una columna de Persona

Cuando ejecutas una acción Get item en una lista con una columna de Persona llamada Approver, la salida para esa columna se ve así:

[
  {
    "@odata.type": "#Microsoft.Azure.Connectors.SharePoint.SPListExpandedUser",
    "Claims": "i:0#.f|membership|user@domain.com",
    "DisplayName": "Jane Smith",
    "Email": "jane.smith@domain.com",
    "Department": "Marketing"
  }
]

El flujo ve este array. No lo aplana automáticamente en una sola cadena. Debes usar uno de los métodos a continuación para extraer el valor que necesitas.

Método 1: Usar la acción Parse JSON para extraer una columna de Persona

La acción Parse JSON convierte el objeto de la columna de Persona en un objeto estructurado que Power Automate puede leer. Este método funciona mejor cuando la columna de Persona permite solo un valor.

  1. Agrega la acción Get item
    En tu flujo, agrega la acción Get item para la lista de SharePoint que contiene la columna de Persona. Selecciona la dirección del sitio y el nombre de la lista. Proporciona el ID del elemento.
  2. Agrega la acción Parse JSON
    Agrega una nueva acción y busca Parse JSON. Establece el campo Content en la salida de la columna de Persona de Get item. Por ejemplo, selecciona Approver de la lista de contenido dinámico.
  3. Genera el esquema JSON
    Haz clic en el botón Generate from sample. Pega un ejemplo de carga útil JSON que coincida con la estructura de la columna de Persona. Usa este ejemplo:
    [
      {
        "DisplayName": "Jane Smith",
        "Email": "jane.smith@domain.com",
        "Department": "Marketing"
      }
    ]
    

    Haz clic en Done. Power Automate crea el esquema automáticamente.

  4. Usa la salida analizada
    Después de Parse JSON, puedes usar las propiedades DisplayName o Email de la salida analizada. En una acción Send an email, selecciona DisplayName del contenido dinámico bajo Parse JSON. El flujo ahora envía el nombre para mostrar de la persona correctamente.

ADVERTISEMENT

Método 2: Usar una expresión en la acción Compose

Si prefieres no usar Parse JSON, puedes escribir una expresión en una acción Compose. Este método es más rápido para columnas de una sola persona.

  1. Agrega la acción Get item
    Igual que en el Método 1. Obtén el elemento que contiene la columna de Persona.
  2. Agrega la acción Compose
    Agrega una nueva acción y busca Compose.
  3. Ingresa la expresión
    Haz clic dentro del campo Inputs. Abre la pestaña Expression. Pega esta expresión, reemplazando PersonColumnName con el nombre interno de tu columna de Persona:
    first(outputs('Get_item')?['PersonColumnName'])?['DisplayName']
    

    Si tu columna de Persona se llama Approver, la expresión se convierte en:

    first(outputs('Get_item')?['Approver'])?['DisplayName']
    

    Haz clic en OK.

  4. Usa la salida de Compose
    En cualquier acción posterior, selecciona Outputs de la acción Compose. Esto devuelve el nombre para mostrar como una cadena simple.

Método 3: Usar Apply to Each para columnas de Persona de múltiples valores

Cuando la columna de Persona permite múltiples selecciones, la columna devuelve un array con múltiples objetos de usuario. Debes recorrer cada elemento.

  1. Agrega la acción Get item
    Obtén el elemento que contiene la columna de Persona de múltiples valores.
  2. Agrega una acción Apply to Each
    Busca Apply to Each. Haz clic dentro del campo Select an output from previous steps. Selecciona la columna de Persona de la lista de contenido dinámico.
  3. Agrega acciones dentro del bucle
    Dentro de Apply to Each, agrega una acción Compose. Establece Inputs en la propiedad DisplayName del contenido dinámico. Power Automate muestra la propiedad como PersonColumnName DisplayName.
  4. Recopila los nombres
    Si necesitas enviar todos los nombres en un solo correo, usa una acción Select antes del bucle o usa una variable de cadena para concatenar cada DisplayName con un punto y coma.

ADVERTISEMENT

Si Power Automate aún no puede leer la columna de Persona

El flujo devuelve una cadena vacía para la columna de Persona

Si el flujo se ejecuta pero el valor de la columna de Persona está en blanco, la columna puede estar vacía en SharePoint. Abre el elemento de la lista y confirma que la columna de Persona tenga un valor. Si la columna contiene una persona pero el flujo muestra vacío, verifica el nombre interno de la columna. Power Automate usa el nombre interno, no el nombre para mostrar. Para encontrar el nombre interno, ve a la configuración de la lista, haz clic en la columna de Persona y mira la URL. El nombre interno aparece después de Field=.

El flujo falla con InvalidTemplateException

Este error ocurre cuando usas la columna de Persona directamente en un campo de cadena. Por ejemplo, estableces el campo To en Send an email con la salida de la columna de Persona. La acción de correo espera una cadena, pero la columna de Persona proporciona un array. Usa la acción Compose con la expresión que se muestra en el Método 2 para convertir el array en una cadena.

El flujo funciona en la prueba pero falla en producción

Si el flujo funciona durante las pruebas pero falla en un elemento de producción, la columna de Persona puede estar vacía en algunos elementos. Usa una acción Condition para verificar si la columna de Persona es nula antes de analizarla. Agrega una acción Condition después de Get item. Establece la condición a PersonColumnName no es igual a null. Si la condición es verdadera, ejecuta la acción Parse JSON o Compose. Si es falsa, omite la acción.

Método Mejor para Complejidad
Acción Parse JSON Columnas de una sola persona cuando necesitas múltiples propiedades Media
Compose con expresión Columnas de una sola persona cuando necesitas solo una propiedad Baja
Bucle Apply to Each Columnas de múltiples personas Media

Ahora puedes leer una columna de Persona en Power Automate usando Parse JSON, una expresión o un bucle. Prueba cada método con un solo elemento primero. Para una solución más rápida, usa la acción Compose con la primera expresión. Si tu columna permite múltiples personas, usa el bucle Apply to Each y recopila los nombres para mostrar en una variable de cadena. Recuerda verificar el nombre interno de la columna si el flujo devuelve un valor vacío.

ADVERTISEMENT