Skip to main content
Solved

Problema com API de database

  • February 2, 2022
  • 4 replies
  • 318 views

joaogalhardo

Boa tarde,

estou buscando os registros de um database através da API.

Tenho o seguinte código:

function myFunction() {

  // CHAMADA API PIPEFY

  url = "https://api.pipefy.com/graphql"
  var codigo = "*****"
  var query = "query ($codigo: ID!) { table_records (table_id : $codigo){ edges { node { updated_at record_fields { name report_value } }  } } }"
  var options =
  {
    "method": "POST",
    "headers": {
      "Authorization": "Bearer ****",
      "Content-type":"application/json",
    },
    "payload": JSON.stringify({query, variables : {codigo}})
  }

  var response = UrlFetchApp.fetch(url,options);
  var CC = response.getContentText();
  var datos = JSON.parse(CC);
  var valores = datos.data.table_records.edges[0].node.record_fields;
  var atualizacao = datos.data.table_records.edges[1].node.updated_at;
  var cliente1 = datos.data.table_records.edges[0].node.record_fields;
  var cliente2 = datos.data.table_records.edges[1].node.record_fields;
  var cliente3 = datos.data.table_records.edges[2].node.record_fields;

console.log(cliente1)
console.log(cliente2)
console.log(cliente3)

e estou obtendo as seguintes informações:

cliente1

[ { name: 'Nome', report_value: 'Joice Lacerda' },
  { name: 'CPF', report_value: '' },
  { name: 'Financiamento', report_value: '110.800,00' },
  { name: 'FGTS', report_value: '2.329,91' },
  { name: 'Subsídio', report_value: '1.755,00' },
  { name: 'Bonificaçao', report_value: '4.000,00' },
  { name: 'Entrada', report_value: '19.621,93' },
  { name: 'Fase Atual', report_value: 'Caixa de entrada' } ]

cliente2

[ { name: 'Nome', report_value: 'Fabricio Soares De Souza' },
  { name: 'CPF', report_value: '318.058.498-08' },
  { name: 'Financiamento', report_value: '110.800,00' },
  { name: 'Subsídio', report_value: '1.755,00' },
  { name: 'Bonificaçao', report_value: '4.000,00' },
  { name: 'Entrada', report_value: '21.944,99' },
  { name: 'FGTS', report_value: '0,01' } ]

cliente3

[ { name: 'Nome', report_value: 'Beatriz Boreli Gomes' },
  { name: 'CPF', report_value: '463.531.798-63' },
  { name: 'Financiamento', report_value: '110.800,00' },
  { name: 'Bonificaçao', report_value: '4.000,00' },
  { name: 'Entrada', report_value: '23.700,00' },
  { name: 'FGTS', report_value: '0,01' },
  { name: 'Subsídio', report_value: '0,01' } ]

Os índices desses objetos que tenho como retorno variam, daí não consigo criar uma regra para colocá-los nas colunas certas da planilha
ex: o campo FGTS está no índice [3] do cliente1, índice [6] no cliente2 e índice [5] no cliente3, ou seja, não vem padronizado.

Como posso resolver isso? E por que os dados são enviados dessa forma?

Best answer by joaogalhardo

Juliana Spinardi wrote:

@joaogalhardo continua com o mesmo problema? 

 

Oi Juliana, entrei em contato com o chat e a equipe respondeu que é por  conta da ordem em que foi preenchido. Caso alguém tenha o mesmo problema, eis a solução que fiz:

 

for (var i = 0 ; i < tamanho; i++){
    var cliente = datos.data.table_records.edges[i].node.record_fields
    var nome = cliente.findIndex(x => x.name === "Nome");
    var cpf = cliente.findIndex(x => x.name === "CPF");
    var financiamento = cliente.findIndex(x => x.name === "Financiamento");
    var fgts = cliente.findIndex(x => x.name === "FGTS");
    var subsidio = cliente.findIndex(x => x.name === "Subsídio");
    var bonificacao = cliente.findIndex(x => x.name === "Bonificaçao");
    var entrada = cliente.findIndex(x => x.name === "Entrada");

 

Pego os campos do registro e armazeno na variável cliente. Depois procuro o índice associado ao nome do campo que preciso, e utilizo posteriormente para atribuir o valor na coluna certa da planilha
 

sheet.getRange(controle+2, 1).setValue(datos.data.table_records.edges[i].node.record_fields[nome].report_value);
    sheet.getRange(controle+2, 2).setValue(datos.data.table_records.edges[i].node.record_fields[cpf].report_value);
    sheet.getRange(controle+2, 3).setValue(datos.data.table_records.edges[i].node.record_fields[financiamento].report_value);
    sheet.getRange(controle+2, 4).setValue(datos.data.table_records.edges[i].node.record_fields[fgts].report_value);
    sheet.getRange(controle+2, 5).setValue(datos.data.table_records.edges[i].node.record_fields[subsidio].report_value);
    sheet.getRange(controle+2, 6).setValue(datos.data.table_records.edges[i].node.record_fields[bonificacao].report_value);
    sheet.getRange(controle+2, 7).setValue(datos.data.table_records.edges[i].node.record_fields[entrada].report_value);
    sheet.getRange(controle+2, 9).setValue(datos.data.table_records.edges[i].node.updated_at);

 

View original
Did this topic help you find an answer to your question?

4 replies

Lucas Democh
Forum|alt.badge.img+15

Olá @joaogalhardo,

 

Utilize o código abaixo para ignorar os índices e para baixar mais de 50 registros:

 

table_id = "XXXXXX"
pipefy_token = 'XXXXXX'
table_fields = [""]
nome_arquivo = 'X'


url = "https://api.pipefy.com/graphql"

headers = {
    "authorization": f"Bearer {pipefy_token}",
    "content-type": "application/json"
}

df = pd.DataFrame(columns=table_fields)

has_next_page = True
first_query = True

while(has_next_page):

    if first_query:
        payload = {"query": "{  table_records(table_id:\""+table_id+"\") {edges {node {id title record_fields {name value}}} pageInfo {endCursor hasNextPage}}}"}
        first_query = False
    else:
        payload = {"query": "{  table_records(table_id:\""+table_id+"\",after:\""+end_cursor+"\") {edges {node {id title record_fields {name value}}} pageInfo {endCursor hasNextPage}}}"}

    response = requests.request("POST", url, json=payload, headers=headers)

    json_data = json.loads(response.text)
    end_cursor = json_data["data"]["table_records"]["pageInfo"]["endCursor"]
    has_next_page = json_data["data"]["table_records"]["pageInfo"]["hasNextPage"]
    total_records_pg = len(json_data["data"]["table_records"]["edges"])

    for i in range(total_records_pg):
        card_title = json_data["data"]["table_records"]["edges"][i]["node"]["title"]
        card_data_d = json_data["data"]["table_records"]["edges"][i]["node"]["record_fields"]
        card_data = {x['name']:x['value'] for x in card_data_d}
        df = df.append(card_data, ignore_index=True)

Exemplo de df.info():

 

 

 

 


joaogalhardo
  • Author
  • Inspiring
  • 7 replies
  • February 2, 2022

É que estou fazendo no Apps Script do Google e a linguagem lá é em JavaScript


Juliana Spinardi
Pipefy Staff
Forum|alt.badge.img+8

@joaogalhardo continua com o mesmo problema? 


joaogalhardo
  • Author
  • Inspiring
  • 7 replies
  • Answer
  • February 4, 2022
Juliana Spinardi wrote:

@joaogalhardo continua com o mesmo problema? 

 

Oi Juliana, entrei em contato com o chat e a equipe respondeu que é por  conta da ordem em que foi preenchido. Caso alguém tenha o mesmo problema, eis a solução que fiz:

 

for (var i = 0 ; i < tamanho; i++){
    var cliente = datos.data.table_records.edges[i].node.record_fields
    var nome = cliente.findIndex(x => x.name === "Nome");
    var cpf = cliente.findIndex(x => x.name === "CPF");
    var financiamento = cliente.findIndex(x => x.name === "Financiamento");
    var fgts = cliente.findIndex(x => x.name === "FGTS");
    var subsidio = cliente.findIndex(x => x.name === "Subsídio");
    var bonificacao = cliente.findIndex(x => x.name === "Bonificaçao");
    var entrada = cliente.findIndex(x => x.name === "Entrada");

 

Pego os campos do registro e armazeno na variável cliente. Depois procuro o índice associado ao nome do campo que preciso, e utilizo posteriormente para atribuir o valor na coluna certa da planilha
 

sheet.getRange(controle+2, 1).setValue(datos.data.table_records.edges[i].node.record_fields[nome].report_value);
    sheet.getRange(controle+2, 2).setValue(datos.data.table_records.edges[i].node.record_fields[cpf].report_value);
    sheet.getRange(controle+2, 3).setValue(datos.data.table_records.edges[i].node.record_fields[financiamento].report_value);
    sheet.getRange(controle+2, 4).setValue(datos.data.table_records.edges[i].node.record_fields[fgts].report_value);
    sheet.getRange(controle+2, 5).setValue(datos.data.table_records.edges[i].node.record_fields[subsidio].report_value);
    sheet.getRange(controle+2, 6).setValue(datos.data.table_records.edges[i].node.record_fields[bonificacao].report_value);
    sheet.getRange(controle+2, 7).setValue(datos.data.table_records.edges[i].node.record_fields[entrada].report_value);
    sheet.getRange(controle+2, 9).setValue(datos.data.table_records.edges[i].node.updated_at);

 


Did this topic help you find an answer to your question?

Reply


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings