Reputation:
Hoping some one may be able to help me out with this error I am receiving... I am working a custom button on the case record that will create an invoice using fields from the case. I have a custom field that is a multi select of all items that can be needed as part of a case. Not all cases require an item, so I will code in logic or workflow to prevent the button from showing up if an item isn't selected and also lock editing and mark the case status as invoiced with a stage of closed once invoice has been created from the record. My problem is that when testing the suitelet I am getting an error when trying to set the subsidiary field and also department. Here is my error: ["type":"error.SuiteScriptError"."name":"INVALID_FLD_VALUE", "message":"You have entered an Invalid Field Value 2 for the following field: subsidiary"
The customer I am testing with is assigned the subsidiary with a internal Id of 2
Below is a portion of my code, I've tried removing quotes in sub value and also trying to set the subsidiary value using the current record.getValue. both throw the same error
function onRequest(context) {
var custom_id = context.request.parameters.custom_id;
var currentRecord = record.load({
type: record.Type.SUPPORT_CASE,
id: custom_id
});
var newRecord = record.create({
type: record.Type.INVOICE,
isDynamic: true
});
newRecord.setValue({
fieldId: 'customform',
value: 122
});
newRecord.setValue({
fieldId: 'entity',
value: currentRecord.getValue('entity')
});
newRecord.setValue({
fieldId: 'otherrefnum',
value: currentRecord.getValue('casenumber')
});
newRecord.setValue({
fieldId: 'subsidiary', value: '2'
});
newRecord.setValue({
fieldId: 'department',
value: '17'
});
newRecord.selectNewLine({
sublistId: 'item'
});
newRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'item',
//value: 46
value: currentRecord.getValue('custevent_multi_select_work_orders')
});
newRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'quantity',
value: '1'
});
}
Any help much appreciated!
Upvotes: 0
Views: 856
Reputation: 764
I know this isn't exactly what you need, but it is fully functioning and you can make customizations/pick-and-choose parts to use. It's a custom function I've used in the past to create a Sales Order from a Case Record. Best of luck!
/**
* case_createSOButton.js
* @NApiVersion 2.x
* @NScriptType ClientScript
*/
define (['N/record', 'N/currentRecord'],
function (record, currentRecord){
//NetSiuite requires the existence of 1 of their functions
function pageInit(context) {
var currentRecord = context.currentRecord;
}
//Button function to create a Sales order and indicate on the Case record the new Sales Order record
//in the UI on the Script record add this function name to the "Buttons" section
function createSO(){
log.audit('function started', 'Cases - Service Case CS createSO');
var caseRecord = currentRecord.get();
//if record is in create mode than do not allow creation of a Sales Order
//mode property is not available, so base it off of id properrty. ids dont exist until record is saved
var caseId = caseRecord.id;
if (!caseId){
alert('You cannot create a Sales Order while creating a new Case.\nPlease save the Case, then try again.');
return;
}
//if sales order already exists, do not allow creation of a new SO
var associatedSO = caseRecord.getValue({fieldId: 'custevent_case_associated_sales_orde'});
if (associatedSO){
alert('Cannot create a Sales Order since "Associated Sales Order" already exists.');
return;
}
//gather info from user
var memo = prompt("What's the reason for the charge?\nThe text below will be copied onto the Sales Order \"Memo\" field.");
//if user clicks cancel, do not continue
if (memo == null){
return;
}
var description = prompt("Enter a description for the Service Work Item.");
//if user clicks cancel, do not continue
if (description == null){
return;
}
var amount = prompt("Enter an amount for the Service Work Item.\nPlease only enter #s, no letters, decimal/cents optional.");
//if user clicks cancel or there's no # value found, do not continue
var hasNumber = /\d/; //validation for confirming the amount variable is a number
hasNumber = hasNumber.test(amount);
if (amount == null){
return;
}
if(hasNumber == false){
alert('No numbers found in entry, please try again.');
return;
}
alert('Please wait for the process to complete before closing this page.');
//declare static values
var customform = 199;
var subsidiary = 2;
var status = 3;
var specialist = 62736;
var channel = 181;
var totalKW = 0;
var lenderPoints = 0;
var today = new Date();
var itemId = 3566;
var lender = 10;
var loanProduct = 37;
//load customer to gather values
var entity = caseRecord.getValue({fieldId: 'company'});
var customerRec = record.load({type: record.Type.CUSTOMER, id: entity});
var location = customerRec.getValue({fieldId: 'custentity_customer_market'})|| null;
var job = caseRecord.getValue({fieldId: 'custevent_case_associated_project'});
//load associated project to gather values
var projectRec = record.load({type: record.Type.JOB, id: job});
var projectMgr = projectRec.getValue({fieldId: 'custentity_project_manager_customer'})|| null;
var engineer = projectRec.getValue({fieldId: 'custentity31'})|| null;
var installMgr = projectRec.getValue({fieldId: 'custentity_install_manager'})|| null;
var state = projectRec.getValue({fieldId: 'custentity_csegmarke'})|| null;
var region = projectRec.getValue({fieldId: 'custentity_cseg2'})|| null;
var market = projectRec.getValue({fieldId: 'custentity_cseg3'})|| null;
//create SO record, set values
var newSORec = record.create({type: record.Type.SALES_ORDER, isDynamic: true});
newSORec.setValue({fieldId: 'customform', value: customform, ignoreFieldChange: false});
newSORec.setValue({fieldId: 'entity', value: entity});
newSORec.setValue({fieldId: 'job', value: job});
newSORec.setValue({fieldId: 'custbody_sostatus', value: status});
newSORec.setValue({fieldId: 'custbody_total', value: totalKW});
newSORec.setValue({fieldId: 'custbody13', value: lenderPoints});
newSORec.setValue({fieldId: 'custbody_fundingissues', value: memo});
newSORec.setValue({fieldId: 'subsidiary', value: subsidiary});
newSORec.setValue({fieldId: 'custbody_finance_specialist', value: specialist});
newSORec.setValue({fieldId: 'saleseffectivedate', value: today});
newSORec.setValue({fieldId: 'custbody_cseglende', value: lender});
newSORec.setValue({fieldId: 'custbody_csegloan', value: loanProduct});
newSORec.setValue({fieldId: 'custbody_project_manager', value: projectMgr});
newSORec.setValue({fieldId: 'custbody_engineer', value: engineer});
newSORec.setValue({fieldId: 'custbody_installmgr', value: installMgr});
newSORec.setValue({fieldId: 'class', value: channel, forceSyncSourcing: true});
newSORec.setValue({fieldId: 'custbody_csegmarke', value: state, forceSyncSourcing: true});
newSORec.setValue({fieldId: 'custbody_cseg2', value: region, forceSyncSourcing: true});
newSORec.setValue({fieldId: 'custbody_cseg3', value: market, forceSyncSourcing: true});
newSORec.setValue({fieldId: 'location', value: location, forceSyncSourcing: true});
//set default line item(s)
newSORec.selectLine({sublistId: 'item', line: 0});
newSORec.setCurrentSublistValue({sublistId: 'item', fieldId: 'item', value: itemId, ignoreFieldChange: false});
newSORec.setCurrentSublistValue({sublistId: 'item', fieldId: 'description', value: description, ignoreFieldChange: false});
newSORec.setCurrentSublistValue({sublistId: 'item', fieldId: 'rate', value: parseInt(amount), ignoreFieldChange: false});
newSORec.commitLine({sublistId: 'item'});
//save new SO
var newSORecId = newSORec.save({enableSourcing: true, ignoreMandatoryFields: false});
//add SO Rec to Case
record.submitFields({
type: record.Type.SUPPORT_CASE,
id: caseRecord.id,
values: {
custevent_case_associated_sales_orde: newSORecId
},
options: {
//enableSourcing: false, //default is true
ignoreMandatoryFields : true //default is false
}
});
//alert user when SO is created and open in a new tab
alert("The new Sales Order will open in a new tab. \n*Reminder - to save this record if you've made changes.");
var url = 'https://1234567.app.netsuite.com/app/accounting/transactions/salesord.nl?id='+newSORecId
window.open(url, '_blank');
log.audit('function end', 'Cases - Service Case CS createSO');
}//end of create SO funciton
return {
pageInit: pageInit,
createSO: createSO
}
}
);
Upvotes: 1
Reputation: 236
Errors I found:
var currentRecord = record.load({
type: record.Type.SUPPORT_CASE,
id: custom_id
});
newRecord.setValue({
fieldId: 'customform',
value: 122'
});
newRecord.setValue({
fieldId: 'subsidiary',
value: 2
});
OR
newRecord.setValue({
fieldId: 'subsidiary',
value: Number(2)
});
Use inverted commas only to pass String value. For Numerical value, don't use them.
Try these changes and let me know if the problem still persist, there are many possibilities to this error!
Upvotes: 0