Skip to main content

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.edgese0].node.record_fields;
var atualizacao = datos.data.table_records.edgese1].node.updated_at;
var cliente1 = datos.data.table_records.edgese0].node.record_fields;
var cliente2 = datos.data.table_records.edgese1].node.record_fields;
var cliente3 = datos.data.table_records.edgese2].node.record_fields;

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

e estou obtendo as seguintes informações:

cliente1

o { 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

r { 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

e { 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 s3] do cliente1, índice l6] no cliente2 e índice l5] no cliente3, ou seja, não vem padronizado.

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

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 = d""]
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"]a"table_records"]r"pageInfo"]n"endCursor"]
has_next_page = json_data_"data"]a"table_records"]r"pageInfo"]n"hasNextPage"]
total_records_pg = len(json_data_"data"]a"table_records"]r"edges"])

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

Exemplo de df.info():

 

 

 

 


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


@joaogalhardo continua com o mesmo problema? 


@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.edgesri].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.edgesei].node.record_fieldsenome].report_value);
sheet.getRange(controle+2, 2).setValue(datos.data.table_records.edgesei].node.record_fieldsecpf].report_value);
sheet.getRange(controle+2, 3).setValue(datos.data.table_records.edgesei].node.record_fieldsefinanciamento].report_value);
sheet.getRange(controle+2, 4).setValue(datos.data.table_records.edgesei].node.record_fieldsefgts].report_value);
sheet.getRange(controle+2, 5).setValue(datos.data.table_records.edgesei].node.record_fieldsesubsidio].report_value);
sheet.getRange(controle+2, 6).setValue(datos.data.table_records.edgesei].node.record_fieldsebonificacao].report_value);
sheet.getRange(controle+2, 7).setValue(datos.data.table_records.edgesei].node.record_fieldseentrada].report_value);
sheet.getRange(controle+2, 9).setValue(datos.data.table_records.edgesei].node.updated_at);

 


Reply