Почему этот JavaScript зацикливается дважды в Zapier? - PullRequest
0 голосов
/ 28 мая 2018

Вот видео , которое показывает, с чем я борюсь.

Вот высокоуровневое описание процесса, за которым следует написанный мною код JavaScript.

ПРОЦЕСС Я построил 2 Zaps, каждый из которых работает так:

ШАГ 1 - Триггер (форма Cognito, которая имеет повторяющиеся разделы)

ШАГ 2 - Код JavaScript (который создает массив полей формы для ОДНОГО из повторяющихся разделов и разделяет их на отдельные строки, используя .split)

ШАГ 3 - Действие (создает задачу ZOHO CRM для каждой строки)

Первый Zap запускается в одном из разделов формы (Посещения с продажами), а второй запускается Zapв другом разделе формы (посещения без продаж).Каждый из этих Zaps отлично работает сам по себе, поэтому я знаю, что код хорош, но я хочу объединить два Zaps в один, объединяя код.

Я пытался объединить, выполнив пять шагов:

Триггер - Код1 - Zoho1 - Код2 - Zoho2

, но задачи Zoho2 повторялись

Затем я попытался изменить порядок пяти шагов:

Триггер - Код1 - Код2 - Zoho1 - Zoho2

, но теперь задачи Zoho1 И задачи Zoho2были продублированы.

Наконец я попытался объединить ВСЕ код JavaScript в один:

Tigger - CombinedCode1 + 2 - Zoho 1 - Zoho2

, но только строкииз массивов в «Code2» доступны мне, когда я иду, чтобы отобразить их в Zoho1.

КОД:

if (inputData.stringVSAccount == null) {
  var listVSAccountArray = [];
  var listVSUnitsArray = [];
  var listVSPriceArray = [];
  var listVSNotesArray = [];
  var listVSVisitCallArray = [];
} else {
  var listVSAccountArray = inputData.stringVSAccount.split(",");
  var listVSUnitsArray = inputData.stringVSUnits.split(",");
  var listVSPriceArray = inputData.stringVSPrice.split(",");
  var listVSNotesArray = inputData.stringVSNotes.split(",");
  var listVSVisitCallArray = inputData.stringVSVisitCall.split(",");
}
var output = [];
var arrayNos = listVSAccountArray.length;
var i = 0;
do {
  var thisItemVSAccount = new String(listVSAccountArray[i]);
  var thisItemVSUnits = new String(listVSUnitsArray[i]);
  var thisItemVSPrice = new String(listVSPriceArray[i]);
  var thisItemVSNotes = new String(listVSNotesArray[i]);
  var thisItemVSVisitCall = new String(listVSVisitCallArray[i]);
  var thisItemObj = {};
  thisItemObj.itemVSAccount = thisItemVSAccount;
  thisItemObj.itemVSUnits = thisItemVSUnits;
  thisItemObj.itemVSPrice = thisItemVSPrice;
  thisItemObj.itemVSNotes = thisItemVSNotes;
  thisItemObj.itemVSVisitCall = thisItemVSVisitCall;
  output.push({ thisItemObj });
  i++;
} while (i < arrayNos);

//This is where the second zaps code is pasted in the combined version
if (inputData.stringOVAccount == null) {
  var listOVAccountArray = [];
  var listOVNotesArray = [];
  var listOVVisitCallArray = [];
} else {
  var listOVAccountArray = inputData.stringOVAccount.split(",");
  var listOVNotesArray = inputData.stringOVNotes.split(",");
  var listOVVisitCallArray = inputData.stringOVVisitCall.split(",");
}
var output = [];
var arrayNos = listOVAccountArray.length;
var i = 0;
do {
  var thisItemOVAccount = new String(listOVAccountArray[i]);
  var thisItemOVNotes = new String(listOVNotesArray[i]);
  var thisItemOVVisitCall = new String(listOVVisitCallArray[i]);
  var thisItemObj = {};
  thisItemObj.itemOVAccount = thisItemOVAccount;
  thisItemObj.itemOVNotes = thisItemOVNotes;
  thisItemObj.itemOVVisitCall = thisItemOVVisitCall;
  output.push({ thisItemObj });
  i++;
} while (i < arrayNos);

Я только начал изучать JavaScript на этой неделе и чувствую, что упускаю что-то очевидное, возможно, набор скобок.Спасибо за любую помощь

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Просто примечание - вы объявляете одну и ту же переменную массива output в обоих сегментах вашего блока кода - второе объявление будет проигнорировано.

Используйте .forEach () метод перебора ваших массивов, он значительно очистит ваш код.Вам также не нужно тщательно создавать объекты, которые нужно вставить в массивы output.

Возможно, это не решит вашу проблему, но код намного проще для глаз.

var listVSAccountArray = [],
    listVSUnitsArray = [],
    listVSPriceArray = [],
    listVSNotesArray = [],
    listVSVisitCallArray = [],
    output = [];

if (typeof inputData.stringVSAccount === 'string') {
  listVSAccountArray = inputData.stringVSAccount.split(',');
  listVSUnitsArray = inputData.stringVSUnits.split(',');
  listVSPriceArray = inputData.stringVSPrice.split(',');
  listVSNotesArray = inputData.stringVSNotes.split(',');
  listVSVisitCallArray = inputData.stringVSVisitCall.split(',');
}

// iterate over the array using forEach()
listVSAccountArray.forEach(function(elem, index){
  // elem is listVSAccountArray[index]
  output.push({
    itemVSAccount: elem,
    itemVSUnits: listVSUnitsArray[index],
    itemVSPrice: listVSPriceArray[index],
    itemVSNotes: listVSNotesArray[index],
    itemVSVisitCall: listVSVisitCallArray[index]
  })
})

//This is where the second zaps code is pasted in the combined version
var listOVAccountArray = [],
    listOVNotesArray = [],
    listOVVisitCallArray = [],
    output_two = []; // changed the name of the second output array

if (typeof inputData.stringOVAccount === 'string') {
  listOVAccountArray = inputData.stringOVAccount.split(',');
  listOVNotesArray = inputData.stringOVNotes.split(',');
  listOVVisitCallArray = inputData.stringOVVisitCall.split(',');
}

// iterate over the array using forEach()
listOVAccountArray.forEach(function(elem, index){
  // elem is listOVAccountArray[index]
  output_two.push({
    itemOVAccount: elem,
    itemOVNotes: listOVNotesArray[index],
    itemOVVisitCall: listOVVisitCallArray[index]
  });
});
0 голосов
/ 30 мая 2018

Дэвид здесь, из команды Zapier Platform.Вы сталкиваетесь с запутанной и в значительной степени недокументированной функцией, когда возвращаются элементы после выполнения кода для каждого элемента.Это обычно желаемое поведение - когда вы возвращаете 3 представления, вы хотите создать 3 записи.

В вашем случае он также многократно выполняет последующие несвязанные действия, что звучит так, как будто это нежелательно.В этом случае может быть проще иметь 2 zaps.Или, если «Zoho2» случается только один раз, поставьте его первым и дайте ветке произойти вниз по течению.


Отдельно у меня есть несколько незапрошенных советов по javascript (так как вы упомянули, что вы новичок).Проверьте Array.forEach ( docs ), который позволит вам перебирать массивы без необходимости управлять как можно большим количеством переменных (каждый раз ваш собственный i).Кроме того, попробуйте использовать let и const над var, когда это возможно - это позволяет максимально ограничить область видимости ваших переменных, чтобы вы случайно не пропустили значения в другие области.

Дайте мне знать, если у вас есть еще вопросы!

...