首页 > 解决方案 > SuiteScript 2.0:使用复选框参数重新安排预定脚本

问题描述

我有一个预定的脚本,它做两件事。我有复选框参数来确定脚本运行是否需要这些东西。第一次两者都默认为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 中的脚本参数的情况下执行此操作?

标签: netsuitesuitescript2.0

解决方案


这不是生成任务的正确构造函数。我总是使用:

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 方法中提供的任何值都将覆盖配置的值。


推荐阅读