javascriptnetsuitesuitescript2.0

Adding currency as default value on record initialization on vendor payment record using suitescript to get the correct apply sublist data


I am trying to create a vendorpayment record using script. This is my script.

var transactionId = '11111';
var vendorId = '222';
var subsidiaryId = '2';
var apAccountId = '333'
var inputAmount = 1000;
var currencyId = '4'; //USD

var make_billPayment_record = record.create({
    type: 'vendorpayment',
    defaultValues: { entity: vendorId, subsidiary: subsidiaryId, apacct: apAccountId }
});
if(!!currencyId){make_billPayment_record.setValue({ fieldId: 'currency', value: currencyId });}; //Currency
if(!!bankAccountId){make_billPayment_record.setValue({ fieldId: 'account', value: bankAccountId });}; //Account
if(!!departmentId){make_billPayment_record.setValue({ fieldId: 'department', value: departmentId });}; //Department
if(!!classId){make_billPayment_record.setValue({ fieldId: 'class', value: classId });}; //Cash Flow Segment
if(!!exchangeRate){make_billPayment_record.setValue({ fieldId: 'exchangerate', value: parseFloat(exchangeRate) });}; //Exchange Rate
make_billPayment_record.setValue({ fieldId: 'custbody_9997_is_for_ep_eft', value: true }); //For Electronic Bank Payment

var apply_numLines = make_billPayment_record.getLineCount({sublistId: 'apply'});

for(i = 0; i < apply_numLines; i++){
    var lineTxnId = make_billPayment_record.getSublistValue({
        sublistId: 'apply',
        fieldId: 'internalid',
        line: i
    });
    if(parseFloat(lineTxnId) == parseFloat(transactionId)){
        make_billPayment_record.setSublistValue({
            sublistId: 'apply',
            fieldId: 'apply',
            line: i,
            value: true
        });
        make_billPayment_record.setSublistValue({
            sublistId: 'apply',
            fieldId: 'amount',
            line: i,
            value: parseFloat(inputAmount)
        });
    }
};

var created_bp_id = make_billPayment_record.save({ enableSourcing: true, ignoreMandatoryFields: true });

I am aware that you cannot create a list on vendorpayment, it is preloaded based on the vendor, subsidiary and currency and you have to iterate each line and apply the transaction. The thing that I am having trouble with is initializing that list. When I do record.create with default values, the initialized sublist data does not contain the transaction that I am looking for because the default currency being set is different on the transaction. When I add currency as a default value on my record.create, Netsuite is giving me an error:

{
  "name":"INVALID_RCRD_INITIALIZE",
  "message":"You have entered an invalid default value for this record initialize operation."
}

I also tried creating a vendorpayment record without applying any transactions first but Netsuite is also giving me an error "You must enter at least one line item for this transaction."

If I can't initialize record.create with currencyId, I can't get the correct apply sublist data.

If initializing record with currencyId is not possible, is there a way for me to get the correct apply sublist? Or is there a different way to achieve what I am trying to do? Any help would be appreciated, thanks.


Solution

  • I forgot the isDynamic parameter. I just added the isDynamic parameter and set it to true and changed my looping from setSublistValue() to selectLine() and I was able to get the apply sublist data I was looking for.

    var transactionId = '11111';
    var vendorId = '222';
    var subsidiaryId = '2';
    var apAccountId = '333'
    var inputAmount = 1000;
    var currencyId = '4'; //USD
    
    var make_billPayment_record = record.create({
        type: 'vendorpayment',
        isDynamic: true,
        defaultValues: { entity: vendorId, subsidiary: subsidiaryId, apacct: apAccountId }
    });
    if(!!currencyId){make_billPayment_record.setValue({ fieldId: 'currency', value: currencyId });}; //Currency
    if(!!bankAccountId){make_billPayment_record.setValue({ fieldId: 'account', value: bankAccountId });}; //Account
    if(!!departmentId){make_billPayment_record.setValue({ fieldId: 'department', value: departmentId });}; //Department
    if(!!classId){make_billPayment_record.setValue({ fieldId: 'class', value: classId });}; //Cash Flow Segment
    if(!!exchangeRate){make_billPayment_record.setValue({ fieldId: 'exchangerate', value: parseFloat(exchangeRate) });}; //Exchange Rate
    make_billPayment_record.setValue({ fieldId: 'custbody_9997_is_for_ep_eft', value: true }); //For Electronic Bank Payment
    
    var apply_numLines = make_billPayment_record.getLineCount({sublistId: 'apply'});
    
    for(i = 0; i < apply_numLines; i++){
        make_billPayment_record.selectLine({
            sublistId: 'apply',
            line: i
        });
    
        var txnId = make_billPayment_record.getCurrentSublistValue({
            sublistId: 'apply',
            fieldId: 'internalid'
        });
    
        if (parseFloatOrZero(txnId) === parseFloatOrZero(txnRefId)) {
            make_billPayment_record.setCurrentSublistValue({
                sublistId: 'apply',
                fieldId: 'apply',
                value: true
            });
    
            make_billPayment_record.setCurrentSublistValue({
                sublistId: 'apply',
                fieldId: 'amount',
                value: parseFloatOrZero(paymentTxnCur)
            });
        }
    
        make_billPayment_record.commitLine({
            sublistId: 'apply'
        });
    };
    
    var created_bp_id = make_billPayment_record.save({ enableSourcing: true, ignoreMandatoryFields: true });