Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
5 years ago
Solved

GraphQL Publicar consulta en formato de Power Query

Hola a todos

Estoy intentando convertir la siguiente consulta de publicación de GraphQL a un formato compatible con Power Query:

{
  people(first: 100, view: all, filter: {id: {values:"123456789ABC"}}) {
    nodes {
      id
      name
      primaryEmail
      contacts(first: 100) {
        nodes {
          label
          uri
        }
      }
    }
  }
}

Sin el filtro de identificación, puedo hacer que esto funcione. Sin embargo, quiero poder filtrar directamente en un ID (esto será reemplazado por una variable más adelante, llamada PersonID). Por el momento, tengo:

//(PersonID as text) as table =>
let
    vUrl = "https://graphql.###.com/",
    vHeaders =[
			#"Method"="POST",
			#"Content-Type"="application/json",
			#"Authorization"="Bearer 12345ABC"
		],
    // Notice the quote escaping here
    vContent=Text.ToBinary("{""query"": ""{people(first: 100, view: all) {nodes {id name primaryEmail contacts(first:100){nodes {label uri}}}}}""}"),
    Source = Web.Contents(vUrl,	[Headers=vHeaders, Content=vContent]),

Mi idea era conseguir que funcionara de la siguiente manera:

(PersonID as text) as table =>
let
    vUrl = "https://graphql.###.com/",
    vHeaders =[
			#"Method"="POST",
			#"Content-Type"="application/json",
			#"Authorization"="Bearer 1234ABC"
		],
    // Notice the quote escaping here
    vContent=Text.ToBinary("{""query"": ""{people(first: 100, view: all, filter: {id: {values:123456789ABC}}) {nodes {id name primaryEmail contacts(first:100){nodes {label uri}}}}}""}"),
    Source = Web.Contents(vUrl,	[Headers=vHeaders, Content=vContent]),
    #"JSON" = Json.Document(Source)
in
    #"JSON"

Sin embargo, esto devuelve un error: el argumento 'values' de InputObject 'IDFilter' tiene un valor no válido (123456789ABC). Tipo esperado '[ID!]!'.

Otras variaciones en el filtrado del ID solo me han dado errores HTTP 400.

¡Espero que alguien pueda ayudarme! 🙂

  • He encontrado la solución. La corrección fue agregar dos barra diagonales inversas alrededor del identificador, como sigue:

    //(PersonID as text) as table =>
    let
        vUrl = "https://graphql.###.com/",
        vHeaders =[
    			#"Method"="POST",
    			#"Content-Type"="application/json",
    			#"Authorization"="Bearer 1234ABC"
    		],
        // Notice the quote escaping here
        vContent=Text.ToBinary("{""query"": ""{people(first: 100, view: all, filter: {id: {values:\""123456789ABC\""}}) {nodes {id name primaryEmail contacts(first:100){nodes {label uri}}}}}""}"),
        Source = Web.Contents(vUrl,	[Headers=vHeaders, Content=vContent]),
        #"JSON" = Json.Document(Source)
    in
        #"JSON"

    En función de:

    (PersonID as text) as table =>
    let
        vUrl = "https://graphql.###.com/",
        vHeaders =[
    			#"Method"="POST",
    			#"Content-Type"="application/json",
    			#"Authorization"="Bearer 1234ABC"
    		],
        // Notice the quote escaping here
        vContent=Text.ToBinary("{""query"": ""{people(first: 100, view: all, filter: {id: {values:\""" & PersonID & "\""}}) {nodes {id name primaryEmail contacts(first:100){nodes {label uri}}}}}""}"),
        Source = Web.Contents(vUrl,	[Headers=vHeaders, Content=vContent]),
        #"JSON" = Json.Document(Source)
    in
        #"JSON"

4 Replies

  • No @prostagma ,

    Sé poco sobre la consulta graphQL post. Sólo una especulación:

    ¿El problema causado por la ausencia de comillas dobles de id value?

    (PersonID como texto) como tabla =>
    dejar
    vUrl = "https://graphql.###.com/",
    vHeaders =[
    #"Método"="POST",
    #"Content-Type"="application/json",
    #"Autorización"="Portador 1234ABC"
    ],
    Observe la cita que se escapa aquí
    vContent=Text.ToBinary("{""query"": ""{people(first: 100, view: all, filter: {id: {values:"123456789ABC"}}) {nodes {id name primaryEmail contacts(first:100){nodes {label uri}}}}}""}"),
    Origen = Web.Contents(vUrl, [Headers=vHeaders, Content=vContent]),
    #"JSON" = Json.Document(Origen)
    en
    #"JSON"

    Además, aquí hay un documento sobre GraphQL API + PowerBI Integration. Espero que ayude.

    Saludos

    Icey

    Si este post ayuda,entonces por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      Hola Icey,

      Da las gracias por vuestra entrada. Tengo un par de variaciones con comillas, lo que resulta en lo siguiente:

      id: {values:""123456789ABC""} > error HTTP 400

      id: {values:"123456789ABC"} > Se espera una coma de token

      id: {values:'123456789ABC'} > error parse en "'" (error) en [1, 53]

      id: {values:123456789ABC} > argumento 'values' en InputObject 'IDFilter' tiene un valor no válido (123456789ABC). Tipo esperado '[ID!]!'.query.png

      Como puede ver, nada funcionará 😞

  • He encontrado la solución. La corrección fue agregar dos barra diagonales inversas alrededor del identificador, como sigue:

    //(PersonID as text) as table =>
    let
        vUrl = "https://graphql.###.com/",
        vHeaders =[
    			#"Method"="POST",
    			#"Content-Type"="application/json",
    			#"Authorization"="Bearer 1234ABC"
    		],
        // Notice the quote escaping here
        vContent=Text.ToBinary("{""query"": ""{people(first: 100, view: all, filter: {id: {values:\""123456789ABC\""}}) {nodes {id name primaryEmail contacts(first:100){nodes {label uri}}}}}""}"),
        Source = Web.Contents(vUrl,	[Headers=vHeaders, Content=vContent]),
        #"JSON" = Json.Document(Source)
    in
        #"JSON"

    En función de:

    (PersonID as text) as table =>
    let
        vUrl = "https://graphql.###.com/",
        vHeaders =[
    			#"Method"="POST",
    			#"Content-Type"="application/json",
    			#"Authorization"="Bearer 1234ABC"
    		],
        // Notice the quote escaping here
        vContent=Text.ToBinary("{""query"": ""{people(first: 100, view: all, filter: {id: {values:\""" & PersonID & "\""}}) {nodes {id name primaryEmail contacts(first:100){nodes {label uri}}}}}""}"),
        Source = Web.Contents(vUrl,	[Headers=vHeaders, Content=vContent]),
        #"JSON" = Json.Document(Source)
    in
        #"JSON"

  • Hola, intenté usar el formato pero no logré convertirlo a Power Query. ¿Alguien puede ayudar a traducir la siguiente consulta de GraphQL?

    consulta {
    courseProgress {
    Nodos {
    usuario{Correo electrónico}
    courseId
    courseIdNum
    porcentajeCompleto
    isCourseCompleted
    completedOn
    courseSeconds
    totalWatchedSeconds
    totalClipsWatched
    firstViewedClipOn
    lastViewedClipOn
    planId
    actualizadoEn
    }
    }
    }