Skip to main content
Solved

Problema com API de database

  • February 2, 2022
  • 4 replies
  • 286 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
  • Pipefy Legend
  • 396 replies
  • February 2, 2022

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
  • New Participant
  • 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
  • New Participant
  • 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);

 


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