SuiteScript 2.0:使用复选框参数重新安排预定脚本
SuiteScript 2.0: Rescheduling a Scheduled Script With Checkbox Parameter
我有一个预定的脚本可以做两件事。我有复选框参数来确定脚本的 运行 是否需要这些东西。第一次左右都默认为 true。
function execute(scriptContext) {
var script = runtime.getCurrentScript();
doTask1 = script.getParameter({name: "custscript_tmh_do_task1"});
doTask2 = script.getParameter({name: "custscript_tmh_do_task2"});
if(doTask1){
//Do something
}
if(doTask2){
//Do something
}
//Determine if task1 or task2 needs to happen and set them to true or false.
//Reschedule script if required
if(doTask1 || doTask2){
var scheduledScriptTask = task.create({
taskType: task.TaskType.SCHEDULED_SCRIPT
});
scheduledScriptTask.scriptId = runtime.getCurrentScript().id;
scheduledScriptTask.deploymentId = runtime.getCurrentScript().deploymentId;
scheduledScriptTask.params = {'custscript_tmh_do_task1': doTask1 ,
'custscript_tmh_do_task2': doTask2 };
return scheduledScriptTask.submit();
}
}
问题是第二次出现,当布尔值设置为 true 时它没有执行任务。它只是跳过它们。我已经使用调试器在重新安排脚本时确认布尔值是真的。
问题:如何通过设置布尔值来重新安排预定的脚本。
附带问题 我将参数创建为脚本参数。是否可以在不在 NetSuite 中设置脚本参数的情况下执行此操作?
这不是生成任务的正确构造函数。我总是使用:
var scheduledScriptTask = task.create({
taskType: task.TaskType.SCHEDULED_SCRIPT,
scriptId: runtime.getCurrentScript().id,
deploymentId: runtime.getCurrentScript().deploymentId,
params: {'custscript_tmh_do_task1': doTask1 ,
'custscript_tmh_do_task2': doTask2 }
});
此外,脚本参数以字符串形式传递,因此您需要进行转换。
任一:
doTask1 = 'T' == script.getParameter({name: "custscript_tmh_do_task1"});
或
doTask1 = script.getParameter({name: "custscript_tmh_do_task1"});
...
if('T' == doTask1){ ...
在使用它们时进行检查 ('T' == doTask1
) 让您可以将字符串值往返到下一次迭代中。如果您将它们用作布尔值,以便您可以决定下一次迭代是否需要执行这两个任务,那么当您将它们传递给下一次迭代时,您需要将它们转回字符串:custscript_tmh_do_task1 : doTask1 ? 'T' : 'F'
您无需为参数提供默认值即可将它们传递给下一次迭代。您在 task.create 方法中提供的任何值都将覆盖配置的值。
我有一个预定的脚本可以做两件事。我有复选框参数来确定脚本的 运行 是否需要这些东西。第一次左右都默认为 true。
function execute(scriptContext) {
var script = runtime.getCurrentScript();
doTask1 = script.getParameter({name: "custscript_tmh_do_task1"});
doTask2 = script.getParameter({name: "custscript_tmh_do_task2"});
if(doTask1){
//Do something
}
if(doTask2){
//Do something
}
//Determine if task1 or task2 needs to happen and set them to true or false.
//Reschedule script if required
if(doTask1 || doTask2){
var scheduledScriptTask = task.create({
taskType: task.TaskType.SCHEDULED_SCRIPT
});
scheduledScriptTask.scriptId = runtime.getCurrentScript().id;
scheduledScriptTask.deploymentId = runtime.getCurrentScript().deploymentId;
scheduledScriptTask.params = {'custscript_tmh_do_task1': doTask1 ,
'custscript_tmh_do_task2': doTask2 };
return scheduledScriptTask.submit();
}
}
问题是第二次出现,当布尔值设置为 true 时它没有执行任务。它只是跳过它们。我已经使用调试器在重新安排脚本时确认布尔值是真的。
问题:如何通过设置布尔值来重新安排预定的脚本。
附带问题 我将参数创建为脚本参数。是否可以在不在 NetSuite 中设置脚本参数的情况下执行此操作?
这不是生成任务的正确构造函数。我总是使用:
var scheduledScriptTask = task.create({
taskType: task.TaskType.SCHEDULED_SCRIPT,
scriptId: runtime.getCurrentScript().id,
deploymentId: runtime.getCurrentScript().deploymentId,
params: {'custscript_tmh_do_task1': doTask1 ,
'custscript_tmh_do_task2': doTask2 }
});
此外,脚本参数以字符串形式传递,因此您需要进行转换。
任一:
doTask1 = 'T' == script.getParameter({name: "custscript_tmh_do_task1"});
或
doTask1 = script.getParameter({name: "custscript_tmh_do_task1"});
...
if('T' == doTask1){ ...
在使用它们时进行检查 ('T' == doTask1
) 让您可以将字符串值往返到下一次迭代中。如果您将它们用作布尔值,以便您可以决定下一次迭代是否需要执行这两个任务,那么当您将它们传递给下一次迭代时,您需要将它们转回字符串:custscript_tmh_do_task1 : doTask1 ? 'T' : 'F'
您无需为参数提供默认值即可将它们传递给下一次迭代。您在 task.create 方法中提供的任何值都将覆盖配置的值。