如何确保在Netsuite Onfieldchange中我所在的行上设置该值

时间:2016-06-02 17:54:46

标签: netsuite suitescript

在netsuite中,我试图自动计算销售订单上项目子列表的保证金,并根据最近的保证金设置价格水平,然后向用户显示成本和价格水平。除非用户输入边距,然后单击另一行,然后将计算出的平均成本和价格水平添加到您单击的行而不是添加信息的行,否则我的一切都正常工作。我如何保证它将值添加到我输入边距的行?

if (name == 'custcol61') {
    var margincalcfield = nlapiGetCurrentLineItemValue('item', 'custcol61');

    if (margincalcfield > 0 && margincalcfield * 1 == margincalcfield) {
        var uid = nlapiGetCurrentLineItemValue('item', 'item');
        var lineitemid = nlapiGetCurrentLineItemValue('item', 'line');

        var itemRecord = nlapiLoadRecord('inventoryitem', uid);
        var preferedvendorrate = itemRecord.getFieldValue('cost');
        var itemaveragecost = itemRecord.getFieldValue('averagecost');
        var newPG = nlapiGetCurrentLineItemValue('item', 'custcol61') / 100;
        var itemBP = itemRecord.getLineItemMatrixValue('price', 'price', 1, 1);
        var itemPG = itemRecord.getFieldValue('pricinggroup');
        var newSP = (preferedvendorrate / (1 - newPG)).toFixed(2);
        var newPriceLevel = 1 - ((newSP / itemBP).toFixed(2));

        // alert(itemBP );
        // alert(newSP );
        // alert(newPriceLevel);

        var pricelineCount = parseInt(itemRecord.getLineItemCount('price'));
        for (x = 1; x <= pricelineCount; x++) {
            var pricelevelprice = itemRecord.getLineItemMatrixValue('price', 'price', x, 1);
            var priceleveldiscount = itemRecord.getLineItemValue('price', 'discount', x);
            var pricelevel = itemRecord.getLineItemValue('price', 'pricelevel', x);

            if (newSP >= pricelevelprice && priceleveldiscount != null) {
                if (newSP != pricelevelprice) {
                    var y = x - 1;
                    var pricelevel = itemRecord.getLineItemValue('price', 'pricelevel', y);
                    var pricelevelprice = itemRecord.getLineItemMatrixValue('price', 'price', y, 1);
                }

                // alert(pricelevelprice );
                // nlapiSelectLineItem(type, lineitemid );
                nlapiSetCurrentLineItemValue('item', 'price', pricelevel);

                // /////-----------------------------start set margin values-------------------------------------

                var ppMargin = ((1 - (preferedvendorrate / pricelevelprice)) * 100).toFixed(2);
                var avgcostMargin = ((1 - (itemaveragecost / pricelevelprice)) * 100).toFixed(2);

                if (itemaveragecost > 0) {
                    var avgmargintext = "\nAC:" + avgcostMargin + "%";
                }

                var purchasepricemargintext = "PP:" + ppMargin + "% ";
                var marginfieldvalue = purchasepricemargintext + avgmargintext;
                nlapiSetCurrentLineItemValue('item', 'custcol61', marginfieldvalue);

                // /////-----------------------------end set margin values-------------------------------------

                return true;
            }
        }
    }
}

我怀疑它与获取当前行项目并设置值而不是“nlapiSetCurrentLineItemValue”有关,但到目前为止我还没有能够使它工作。

1 个答案:

答案 0 :(得分:1)

你的怀疑是正确的;显然fieldChanged事件在选择新行之前没有完成。您的fieldChanged事件处理程序将按以下顺序传递三个参数:

  1. type - 更改的子列表的ID
  2. name - 更改字段的ID
  3. linenum - 更改行的索引
  4. 最后一个参数是您感兴趣的内容。确保您的fieldChanged处理函数接受三个参数,并将linenum参数与nlapiSetLineItemValue结合使用,而不是{{1 }}