这是video,展示了我所挣扎的东西。
以下是该流程的高级描述,后面是我编写的实际JavaScript代码。
PROCESS 我建了2个Zaps,每个都运行如下:
第1步 - 触发(Cognito Form,具有重复部分)
第2步 - JavaScript代码(为一个重复部分创建表单字段的数组,并使用.split
将它们分成单独的字符串)
第3步 - 操作(为每个字符串创建ZOHO CRM任务)
第一个Zap在表单的一个部分上运行(Visits with Sales),第二个zap在表单的不同部分上运行(Visits without Sales)。这些Zaps中的每一个都可以自行运行,所以我知道代码很好,但我希望通过组合代码将两个Zaps合二为一。
我尝试通过五个步骤来结合:
触发器 - Code1 - Zoho1 - Code2 - Zoho2
但是每次重复Zoho2任务
然后我尝试重新排序这五个步骤:
触发器 - Code1 - Code2 - Zoho1 - Zoho2
但现在Zoho1任务和Zoho2任务重复了。
最后,我尝试将所有JavaScript代码合并为一个:
跳跳虎 - CombinedCode1 + 2 - Zoho 1 - Zoho2
但只有" Code2"中的数组中的字符串;当我在Zoho1中映射它们时,我可以使用它。
CODE:
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,感觉我错过了一些明显的东西,也许是一组括号。感谢您的帮助
答案 0 :(得分:0)
David来自Zapier平台团队。您正在遇到一个令人困惑且基本上未记录的功能,其中代码步骤之后的项目针对返回的每个项目运行。这通常是期望的行为 - 当您返回3个提交时,您想要创建3个记录。
在您的情况下,它还会多次运行后续不相关的操作,这听起来像是不受欢迎的。在这种情况下,有两个zaps可能更容易。或者,如果&#34; Zoho2&#34;只发生一次,把它放在第一位,让分支发生在下游。
另外,我有一些未经请求的javascript建议(因为你提到你是初学者)。查看Array.forEach
(docs),这将允许您遍历数组而无需管理任意数量的变量(每次都是您自己的i
)。此外,尽可能使用let
和const
而不是var
- 它会使您的变量尽可能地缩小范围,这样您就不会意外地将值泄漏到其他区域。
如果您有任何其他问题,请与我们联系!
答案 1 :(得分:0)
只需注意 - 您在代码块的两个段中声明了相同的数组变量output
- 第二个声明将被忽略。
使用componentless-routes方法迭代数组,它将显着清理代码。您也不需要精心构建要推入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]
});
});