// Get a standard NetSuite record function getRecord(datain) { //If not id is given then it is a batch read. Fetch all data // for the given type,filters and columns if (datain.id == null) return nlapiSearchRecord(datain.recordtype, null, null, null); else return nlapiLoadRecord(datain.recordtype, datain.id); } function createRecord(datain) { var err = new Object(); // Validate if mandatory record type is set in the request if (!datain.recordtype) { err.status = "failed"; err.message = "missing recordtype"; return err; } var nlobjRecord = null; if (datain.id) { nlobjRecord = nlapiLoadRecord(datain.recordtype, datain.id); } else { nlobjRecord = nlapiCreateRecord(datain.recordtype); } for (var fieldname in datain) { if (datain.hasOwnProperty(fieldname)) { if (fieldname != 'recordtype' && fieldname != 'id') { var value = datain[fieldname]; if (value && typeof value != 'object') // ignore other type of parameters { nlobjRecord.setFieldValue(fieldname, value); } } } } if (datain.recordtype == "customer") { try { // remove already defined addressbookaddress var addressBookCounts = nlobjRecord.getLineItemCount('addressbook'); for (var i = 1; i <= addressBookCounts; i++) { nlobjRecord.selectLineItem('addressbook', 1); nlobjRecord.removeLineItem('addressbook', 1); } //Add all valud addresses to customer for (var index in datain.addresses) { // create a new address object nlobjRecord.selectNewLineItem('addressbook'); var subRecord = nlobjRecord.createCurrentLineItemSubrecord('addressbook', 'addressbookaddress'); var datainAddressSubList = datain.addresses[index]; for (var fieldname in datainAddressSubList) { var value = datainAddressSubList[fieldname]; if (value && typeof value != 'object') { nlobjRecord.setCurrentLineItemValue('addressbook', fieldname, value); } } // create a new detail of address subRecord.selectNewLineItem('addressbookaddress'); for (var fieldame in datainAddressSubList.addressBook) { subRecord.setFieldValue(fieldame, datainAddressSubList.addressBook[fieldame]); } subRecord.commitLineItem('addressbookaddress'); subRecord.commit(); nlobjRecord.commitLineItem('addressbook'); } } catch (e) { var err = {}; err.status = "failed"; err.message = e; return e; } } else if (datain.recordtype == "invoice") { try { var itemCounts = nlobjRecord.getLineItemCount('item'); for (var i = 1; i <= itemCounts; i++) { nlobjRecord.selectLineItem('item', 1); nlobjRecord.removeLineItem('item', 1); } //Calculate dicount for invoice var discountAmount = 0; if (datain.discountItems) { for (var index in datain.discountItems) { discountAmount = discountAmount + datain.discountItems[index].finalPrice; } } nlobjRecord.setFieldValue('discountrate', discountAmount); for (var index in datain.items) { nlobjRecord.selectNewLineItem('item'); for (var fieldame in datain.items[index]) { nlobjRecord.setCurrentLineItemValue('item', fieldame, datain.items[index][fieldame]); } nlobjRecord.commitLineItem('item'); } } catch (e) { var err = {}; err.status = "failed"; err.message = e; return e; } } var recordId = nlapiSubmitRecord(nlobjRecord); nlapiLogExecution('DEBUG', 'id=' + recordId); var nlobj = nlapiLoadRecord(datain.recordtype, recordId); //If datain is type of customer payment proceed and apply the payment //to all included invoices. if(datain.recordtype == 'customerpayment') { var applyCount = nlobj.getLineItemCount('apply'); for(var i=1;i<=applyCount;i++) { nlobj.selectLineItem('apply', i); nlobj.setCurrentLineItemValue('apply','apply','T'); nlobj.commitLineItem('apply'); } nlapiSubmitRecord(nlobj); } return nlobj; } // Delete a standard NetSuite record function deleteRecord(datain) { nlapiDeleteRecord(datain.recordtype, datain.id); }