0

希望您能提供帮助。我目前正在尝试通过用户事件脚本执行最简单的任务之一——即在销售订单的“折扣率”字段中设置一个新值。我的脚本在客户端测试时工作正常,但是当触发预定脚本时,该字段无法设置/更新。

以下代码位于“提交前”操作中。你能看出我做错了什么吗?

function beforeSubmit_discountVAT(type){

if(nlapiGetContext().getExecutionContext() !='scheduled')
    return;

  var getDiscountVal = nlapiGetFieldValue('discountrate');
  var correctDiscount = getDiscountVal / 1.2;
  nlapiSetFieldValue('discountrate', correctDiscount);
}

简而言之 - 我要做的就是将折扣值减去 20%。当从预定脚本触发用户事件脚本时,您可以使用“nlapiSetFieldValue”吗?

提前致谢。

运单

4

3 回答 3

2

编辑现有记录时,nlapiSetFieldValue不能在与记录一起存储的字段上的加载前事件中使用。从函数的 JSDocs 中:

设置给定正文字段的值。此 API 可在用户事件 beforeLoad 脚本中用于初始化新记录或非存储字段的字段。

nlapiSetFieldValue因此只能在新记录或非存储字段的加载前可靠地使用。

意识到这是一个月前的事情,所以您可能已经找到了解决方案,我会将您的代码移至“提交前”事件。我使用计划脚本对此进行了测试:

var customer = nlapiLoadRecord('customer', '31294');
nlapiSubmitRecord(customer);

和客户记录上的用户事件,提交前事件:

if (nlapiGetContext().getExecutionContext() === 'scheduled') {
    nlapiSetFieldValue('url', 'http://www.google.com/', false);
}

这在 2013.1 沙盒环境中按预期工作。

nlapiSubmitField在另一个答案中提到的在提交后使用是一个不必要的长时间操作,它将使用额外的治理单元。如果这是您的脚本唯一要做的事情,这没什么大不了的,但是如果您扩展脚本或添加循环,它可以在性能和治理使用方面迅速增加。

此外,这可能不是必需的,但您应该确保这样getDiscountValNumber

var getDiscountVal = parseInt(nlapiGetFieldValue('discountrate'), 10);

如果它以 a 的形式返回,String那么您的除法操作可能会产生奇怪的结果,这也可能导致nlapiSetFieldValue失败或将字段设置为奇数。

于 2013-05-16T01:01:00.803 回答
0

两个建议

  • 通过添加一些 nlapiLogExecution 语句确保您的脚本正在执行
  • 不要在 beforesubmit 中执行此操作,而是使用 nlapiSubmitField 在 aftersubmit 函数中更改此字段
于 2013-03-28T06:35:34.083 回答
0

当从计划脚本触发用户事件脚本时,您可以使用 'nlapiSetFieldValue' 吗?

是的,绝对是的。上下文也是正确的。

请确保您在最后提交记录 nlapiSubmitRecord(recordObj)。

如果您对 nlapiSubmitRecord() 不满意,您显然可以使用 nlapiSubmitField()

如果您仍然遇到困难,请粘贴完整的代码,以便我们为您提供帮助。

干杯!!!

于 2013-09-04T14:41:17.320 回答