在添加订单项之前验证脚本中的状态 (NetSuite)

Verify State in Script before Adding Line item (NetSuite)

我正在尝试在添加特定项目后向销售订单添加一行,但在此之前,我需要先验证状态。

这就是我挣扎的地方。我有正确添加项目的代码,但我的状态检查出错了。

function validateField(type, name, linenumber) {
  var shipstate = nlapiGetFieldText()
  if (shipstate == 'PA') {
    function recalc(type) {
      if (type == 'item') {
        var itemId = nlapiGetCurrentLineItemValue('item', 'item');
        if (itemId == 1658) {
          //Insert item
          nlapiSelectNewLineItem('item');
          nlapiSetCurrentLineItemValue('item', 'item', 1516);
          nlapiSetCurrentLineItemValue('item', 'quantity', 1);
          nlapiSetCurrentLineItemValue('item', 'amount', '0.24');
          nlapiCommitLineItem('item');
        }
      }
      return true;
    }
  }
  return true;
}

是否了解我的问题所在?
我认为我的问题是我存储状态值的位置,以便它可以检查变量。

我建议您添加带有 recalc 函数而不是 validateField 函数的行。这是因为如果您在编辑现有行时尝试添加新行,它将取消当前行。使用 recalc 函数,它将等到您点击现有行上的 'Add' 按钮,然后再检查状态并添加新行。

您的状态验证是正确的,您需要的功能是 nlapiGetFieldValue('shipstate');。我相信下面的代码应该可以解决您的问题。

function recalc(type) {
    var shipstate = nlapiGetFieldValue('shipstate');
    if (shipstate === 'PA') {
        addNewLine(type);
    }
    return true;
}

function addNewLine(type) {
    if (type === 'item') {
        var itemId = nlapiGetCurrentLineItemValue('item', 'item');
        if (itemId === '1658') {
            //Insert item
            nlapiSelectNewLineItem('item');
            nlapiSetCurrentLineItemValue('item', 'item', '1516');
            nlapiSetCurrentLineItemValue('item', 'quantity', '1');
            nlapiSetCurrentLineItemValue('item', 'amount', '0.24');
            nlapiCommitLineItem('item');
        }
    }
    return true;
}