1

私は現在、品目が変更された場合に送料フィールドをリセットする再計算機能を持っていますが、実際には品目に重量がある場合にのみそれを行う必要があります。変更された項目のウェイトを取得するにはどうすればよいですか?

これが私が現在持っているものです:

function recalc(){  
    nlapiSetFieldValue('shippingcost', '0.00');
}
4

2 に答える 2

5

recalcラインアイテムへの変更がトランザクションの合計に影響する場合にのみ発生するため、達成したいことに対して信頼できるイベントではない可能性があります。

validateLineフィールドの新しい値が有効かどうかを判断するためにそのイベントを使用する必要があるため、使用しないことをお勧めします。

fieldChanged変更されたフィールド値への応答に使用することをお勧めします。何かのようなもの:

function fieldChanged(type, name, linenum) {
    if (type == 'item') {
        if (name == 'item') {
            handleItemChange(linenum);
        }
    }
}

function handleItemChange(linenum) {
    var itemWeight = parseFloat(nlapiGetFieldValue('item', 'weight', linenum)) || 0;
    if (itemWeight > 0) {
        nlapiSetFieldValue('shippingcost', 0);
    }
}

実際にこのロジックをトリガーするフィールドによっては、のpostSourcing代わりにイベントを検討することもできます。fieldChanged

于 2016-02-17T01:16:12.270 に答える
2

小さなセグエ、再計算では、サブリストの現在の行を取得する方法がありません。単一の行が変更されるたびに、サブリスト全体をループする必要があります。

次のように、validateLine を試してください。

function validateLine(listType){

    //To get the item weight, you could create a 
    //custom transaction column field that sourced the item weight.

    if(nlapiGetCurrentLineItemValue(listType,'custcolitemWeight') > 0){
        nlapiSetFieldValue('shippingcost','0.00')
    }

    //or you could source directly from the item record using nlapiLookupField  
    // Depending on your use case either could be  appropriate

    if(nlapiLookupField('item',nlapiGetCurrentLineItemValue(listType,'item'),'weight')){
        nlapiSetFieldValue('shippingcost','0.00')
    }
    //you *need* to return true with the validate* event functions. 
    return true;
}

この (テストされていない) 例は、行の追加のみを処理します。ユーザーがアイテムを削除できる場合は、変更を元に戻す同様の validateDelete を実装する必要があります。

于 2016-02-17T00:38:08.450 に答える