0
I developed a private app on Zapier.com. The framework is in Node js. And it is composed of triggers and actions.
In one of my actions, when it is desplotted several triggers simultaneously I get mixed data.
I would like to understand how to prevent this situation.
/***
Zapier Action
@autor Pedro Correia, from Portugal
@company NovosCanais
@date 27-11-2019
***/
// O zapier sempre que encontra uma ',' coloca a string em formato de array e faz split
function validacoes(){
if (bundle.inputData.nome) {
if (Array.isArray(bundle.inputData.nome) && bundle.inputData.nome.length){
bundle.inputData.nome.join(', ');
}
}
if (bundle.inputData.email) {
if (Array.isArray(bundle.inputData.email) && bundle.inputData.email.length){
bundle.inputData.email.join(', ');
z.console.log(bundle.inputData.email);
}
}
if (bundle.inputData.morada) {
if (Array.isArray(bundle.inputData.morada) && bundle.inputData.morada.length){
bundle.inputData.morada.join(' and ');
z.console.log(bundle.inputData.morada);
}
}
if (bundle.inputData.codpost) {
if (Array.isArray(bundle.inputData.codpost) && bundle.inputData.codpost.length){
bundle.inputData.codpost.join(', ');
}
}
if (bundle.inputData.local) {
if (Array.isArray(bundle.inputData.local) && bundle.inputData.local.length){
bundle.inputData.local.join(', ');
}
}
}
validacoes();
// 1º fazemos um search sobre os clientes
// uma vez que garantidamente temos um número de contribuinte que é identificador do cliente
let options = {
url: 'https://api.drivefx.net/v3/searchEntities',
method: 'POST',
headers: {
'Authorization': process.env.API_KEY
},
body: {
"queryObject": {
"distinct": false,
"entityName": "cl",
"filterCod": "",
"filterItems": [{
"filterItem": "ncont",
"comparison": 0,
"valueItem": bundle.inputData.ncont,
"groupItem": 0
}],
"SelectItems": ["*"]
}
}
}
// globals
let log;
// Procura cliente, caso não exista cria um com os dados que recebeu
return z.request(options)
.then((response) => {
response.throwForStatus();
// *** log
let clientes = z.JSON.parse(response.content);
let no;
if (Array.isArray(clientes.entities) && clientes.entities.length){
// Entrei aqui: então não preciso criar cliente
//*** Atualizamos o cliente antigo?????????????
no = clientes.entities[0].no;
// update cl
clientes.entities[0].email = (bundle.inputData.email) ? bundle.inputData.email : "";
clientes.entities[0].morada = (bundle.inputData.morada) ? bundle.inputData.morada : "";
clientes.entities[0].codpost = (bundle.inputData.codpost) ? bundle.inputData.codpost : "";
clientes.entities[0].local = (bundle.inputData.local) ? bundle.inputData.local : "";
return criarClienteAndFatura(true, clientes.entities[0], no);
} else {
// Entrei aqui: então vou criar o cliente no driveFX
// 1º buscamos uma instancia default do cliente
return criarClienteAndFatura(false, null);
}
});
function criarClienteAndFatura(updateCl, cliente_searched, no) {
if (updateCl && cliente_searched) {
let options = {
url: 'https://api.drivefx.net/v3/saveInstance',
method: 'POST',
headers: {
'Authorization': process.env.API_KEY
},
body: {
"entity" : "Cl",
"ndoc" : 1,
"itemVO" : cliente_searched
}
}
return z.request(options)
.then((response) => {
response.throwForStatus();
// *** log
log = response.content;
z.console.log(response.content);
let results = z.JSON.parse(response.content);
// callback
return criarFatura(no);
});
}
else {
let options = {
url: 'https://api.drivefx.net/v3/getNew',
method: 'POST',
headers: {
'Authorization': process.env.API_KEY
},
body: {
"entity" : "Cl",
"ndoc" : 1
}
}
return z.request(options)
.then((response) => {
response.throwForStatus();
// *** log
z.console.log(response.content);
// parse instance
let novoCliente = z.JSON.parse(response.content);
no = novoCliente.no;
// set instance
novoCliente.nome = (bundle.inputData.nome) ? bundle.inputData.nome : "";
novoCliente.email = (bundle.inputData.email) ? bundle.inputData.email : "";
novoCliente.morada = (bundle.inputData.morada) ? bundle.inputData.morada : "";
novoCliente.codpost = (bundle.inputData.codpost) ? bundle.inputData.codpost : "";
novoCliente.local = (bundle.inputData.local) ? bundle.inputData.local : "";
novoCliente.ncont = (bundle.inputData.ncont) ? bundle.inputData.ncont : "";
z.console.log(novoCliente.nome + " nome");
// save instance
let options = {
url: 'https://api.drivefx.net/v3/saveInstance',
method: 'POST',
headers: {
'Authorization': process.env.API_KEY
},
body: {
"entity" : "Cl",
"ndoc" : 1,
"itemVO" : novoCliente
}
}
return z.request(options)
.then((response) => {
response.throwForStatus();
// *** log
z.console.log(response.content);
let results = z.JSON.parse(response.content);
// callback
return criarFatura(no);
});
});
}
}
z.console.log('after create FT2');
function criarFatura(no){
/***
Cliente existe ou foi criado
Agora vamos faturar
***/
options = {
url: 'https://api.drivefx.net/v3/getNew',
method: 'POST',
headers: {
'Authorization': process.env.API_KEY
},
body: {
"entity" : "Ft",
"ndoc" : 1 // número da série de documentação ***poderemos ter de alterar
}
}
return z.request(options)
.then((response) => {
response.throwForStatus();
z.console.log("Entrei fatura");
let fatura = z.JSON.parse(response.content);
let ref;
let codigo_da_obra;
if (no) {
z.console.log(no);
fatura.no=no;
fatura.u6530_inscricao.inscricaoid = (bundle.inputData.ninscricao) ? bundle.inputData.ninscricao : "";
fatura.u6530_inscricao.id_egoi = (bundle.inputData.id) ? bundle.inputData.id : "";
fatura.u6530_inscricao.email_e = (bundle.inputData.email_e) ? bundle.inputData.email_e : "";
fatura.u6530_inscricao.vem_do_egoi = true;
fatura.u6530_inscricao.atualizou_egoi = false;
fatura.u6530_inscricao.nome_formando = (bundle.inputData.nome_formando) ? bundle.inputData.nome_formando : "";
// trabalhar o codInterno
z.console.log(fatura.u6530_inscricao.inscricaoid);
let split = bundle.inputData.codInterno.split('_');
codigo_da_obra = split[0];
ref = split[1];
z.console.log(ref);
fatura.fis.push({ref: ref, qtt: (bundle.inputData.qtt) ? bundle.inputData.qtt : "", epv: (bundle.inputData.epv) ? bundle.inputData.epv : 0, u6530_faturas_obras_adp: {codigo_da_obra: codigo_da_obra}});
}
// save instance
let options = {
url: 'https://api.drivefx.net/v3/saveInstance',
method: 'POST',
headers: {
'Authorization': process.env.API_KEY
},
body: {
"entity" : "Ft",
"ndoc" : 1,
"itemVO" : fatura
}
}
return z.request(options)
.then((response) => {
response.throwForStatus();
z.console.log(response.content);
const results = z.JSON.parse(response.content);
return results;
});
});
}
If I declare variables like var it will not mix the data?
It seems to me the case to check the promises of your code. Maybe this answer can help you understand the problem.
– Sorack
I would like to see if for different requests, the variables of the window object overwrite.
– Pedro
you have to listen to this, with note: obj.() or the latest proxy: var p = new Proxy(target, Handler);
– Ivan Ferrer
And this way you organize your events so they don’t run into each other.
– Ivan Ferrer