Felix Divall
09/13/2023, 1:22 PMCD
09/13/2023, 1:27 PMFelix Divall
09/13/2023, 1:32 PM/**
* @NApiVersion 2.1
* @NScriptType Restlet
* @NModuleScope SameAccount
*/
import * as log from 'N/log'
import * as record from 'N/record'
export const post = (requestBody): number => {
const data = requestBody.data
const rec = record.create({
type: record.Type.INVOICE,
isDynamic: true
})
for (const [key, value] of fieldMapping.entries()) {
try {
if (!key) { continue }
const extractedValue = getValueFromPath(data, value)
if (extractedValue) {
if (key === 'item' && Array.isArray(extractedValue)) {
log.debug('items.length', extractedValue.length)
for (const item of extractedValue) {
rec.selectNewLine({ sublistId: 'item' })
rec.setCurrentSublistValue({ sublistId: key, fieldId: 'item', value: item.numeric_id })
rec.setCurrentSublistValue({ sublistId: key, fieldId: 'amount', value: item.amount.amount })
rec.setCurrentSublistValue({ sublistId: key, fieldId: 'taxcode', value: 5 })
rec.commitLine({ sublistId: 'item' })
}
continue
}
rec.setValue({ fieldId: key, value: data[extractedValue] })
log.debug('Extracted Value', `fieldId: ${key}, value: ${extractedValue}`)
} else {
log.debug('No Extracted Value', `Value for fieldId ${key} is undefined.`)
}
} catch(e) {
log.error('Caught Error', e.message)
}
}
rec.setValue({ fieldId: 'subsidiary', value: 2 }) // this fails
rec.setValue({ fieldId: 'account', value: 119 }) // this fails
const recId = rec.save({
ignoreMandatoryFields: true
})
return recId
}
const fieldMapping = new Map([
['entity', 'customer.company_id'],
['currency', 'currency'],
['memo', 'description'],
['trandate', 'date'],
['duedate', 'latest_date'],
['item', 'items'],
['exchangerate', 'exchange_rate'],
])
function getValueFromPath(data, path) {
const steps = path.split('.')
let currentValue = data
for (const step of steps) {
if (currentValue[step]) {
currentValue = currentValue[step]
} else {
return undefined
}
}
return currentValue
}CD
09/13/2023, 1:36 PMCD
09/13/2023, 1:36 PMFelix Divall
09/13/2023, 1:37 PMFelix Divall
09/13/2023, 1:37 PM{
"error": {
"code": "USER_ERROR",
"message": "{\"type\":\"error.SuiteScriptError\",\"name\":\"USER_ERROR\",\"message\":\"Please select an A/R account for this invoice.\",\"id\":\"\",\"stack\":[\"Error\n at RecordInvoker.save (suitescript/resources/javascript/record/serverRecordService.js:371:13)\n at NetSuiteObject.thenableFunction() (suitescript/resources/javascript/record/proxy.js:115:24)\n at <http://Object.post|Object.post> (/SuiteScripts/sta_rl_jom_post.js:146:27)\"],\"cause\":{\"type\":\"internal error\",\"code\":\"USER_ERROR\",\"details\":\"Please select an A/R account for this invoice.\",\"userEvent\":null,\"stackTrace\":[\"Error\n at RecordInvoker.save (suitescript/resources/javascript/record/serverRecordService.js:371:13)\n at NetSuiteObject.thenableFunction() (suitescript/resources/javascript/record/proxy.js:115:24)\n at <http://Object.post|Object.post> (/SuiteScripts/sta_rl_jom_post.js:146:27)\"],\"notifyOff\":false},\"notifyOff\":false,\"userFacing\":true}"
}
}CD
09/13/2023, 1:38 PMFelix Divall
09/13/2023, 1:38 PMFelix Divall
09/13/2023, 1:43 PM