This topic contains 5 replies, has 0 voices, and was last updated by Olivier Gagnon NC 6 years, 6 months ago.
-
AuthorPosts
-
May 7, 2018 at 9:33 am #21274
BrandonSo I am trying to have the items of a purchase order populate the items field on a new transfer order via a button on the PO. From there the user can make any changes they want to the record before submitting it and creating the TO. The main issue is I don't know how to populate a blank TO from script. I have it redirect there via a url string, but I'm sure there is a better way to do it.
In summary.
-User clicks "create TO" button on a PO
-takes user to the "create TO" page where all the items (and some various info) is pre populated depending on the PO.
-User edits the record and then submits it.
———-
//create_to_button
var newId ;
var newType ;
function beforeload(type)
{
if(nlapiGetContext().getRole() == '3')
{
if(type =='view' || type == 'edit')
{
newId = nlapiGetRecordId();
newType = nlapiGetRecordType();
if(newType == 'purchaseorder')
{
var strURL = "https://system.na2.netsuite.com/app/accounting/transactions/trnfrord.nl"
var scriptbutton = 'window.open(' + String.fromCharCode(39) + strURL + String.fromCharCode(39) + ')' ;
//nlapiLogExecution('DEBUG','<Before Load Script> type: '+type, 'URL: '+strURL + '&id=' + newId);
form.addButton('custpage_createpo', 'Create TO', scriptbutton);
}
}
}
}
function loadTO() //(request, response)
{
nlapiLogExecution('DEBUG','<Before Load Script> type: '+type, 'hello');
nlapiLoadRecord(newType, newId);
}
——–
Any ideas or advice is appreciated.
-Brandon
This is a cached copy. Click here to see the original post. -
May 8, 2018 at 10:15 am #21275
Olivier Gagnon NCSo you can do this the easy way, or the hard way.
In the easy way, your button would create a new TO, add all the line items, SUBMIT IT, then redirect the user, in edit more (if desired), on that newly created record.
In the hard way, your button redirects the user to a blank TO, perhaps passing in the URL a custom param. Then, a second script – a client side script running on init – kicks in, detects your custom param (it's cue to execute), and populates the needed items at that point. In order to do so, the client-side script probably needs to load the PO (or call a search) to see its items, to know what to add.
So you see the difference between the two is that it is much, much easier to create the record then send a user to it, then to try to create it in an "unsaved" mode.
-
May 8, 2018 at 10:28 am #21276
BrandonThanks for the response. Creating a TO and saving it seems like the path i'd want to go. I seem to be running into two major issue.
1. The script that is executed with the button will trigger on page load instead of when the button is clicked.
—
form.addButton('custpage_purchaseorder', 'Create TO', createTO());
—
2. When having the script run the TO creation and submitting it I keep getting "you must enter at least one transaction" error. Even though it seems like i've entered the item correctly.
—
function createTO() //(request, response)
{
nlapiLogExecution('DEBUG','<Before Load Script> type: '+type, '22');
// cc transferorder id is 128
var record = nlapiCreateRecord ('transferorder');
var recordID = record.getId();
record.setFieldValue('customform',128);
//subsidiaries CC bedford id is 2
record.setFieldValue('subsidiary',2);
//testing for location and transfer location, 144 & 145
record.setFieldValue('location',144);
record.setFieldValue('transferlocation',145);
nlapiLogExecution('DEBUG','<Before Load Script> type: '+type, '23');
// add new lines to a sublist
nlapiSelectNewLineItem('item');
// set the item and location values on the currently selected line
nlapiSetCurrentLineItemValue('item', 'item', 10318);
nlapiSetCurrentLineItemValue('item', 'location', 6);
// commit the line to the database
nlapiCommitLineItem('item');
nlapiLogExecution('DEBUG','<Before Load Script> type: '+type, '24');
var TOResult = nlapiSubmitRecord(record, false, true);
var TOTranID= nlapiLookupField('transferorder', TOResult, 'tranid');
nlapiLogExecution('DEBUG','<Before Load Script> type: '+type, '25');
var TOResult = nlapiSubmitRecord(record, false, true);
var poURL = nlapiResolveURL('RECORD', 'transferorder', TOResult);
//window.location = poURL;
nlapiSetRedirectURL('RECORD','transferorder', TOResult);
nlapiLogExecution('DEBUG','<Before Load Script> type: '+type, 'URL: ' + '&id=');
//nlapiLoadRecord(newType, newId);
}
—
Any idea why i'm getting these issues?
Thanks.
-
May 8, 2018 at 12:06 pm #21277
Olivier Gagnon NCYou have "var TOResult = nlapiSubmitRecord(record, false, true); " twice in there – the second one is probably erroring out, since you're submitting an – at this point – invalid record object.
-
May 9, 2018 at 9:51 am #21278
BrandonIm not entirely sure why my script is erroring out, I add a new item, set it and commit it and im still getting the error of "You must enter at least one line item for this transaction."
`
function OLDcreateTO() //(request, response)
{
for ( var i = 1; i < lines + 1 ; i++ )
{
nlapiLogExecution('DEBUG','<Before Load Script> type: '+type,"line # " + i);
arrayName[i] = PORecord.getLineItemValue('item', 'item', i );
nlapiLogExecution('DEBUG','<Before Load Script> type: '+type, arrayName[i]);
}
nlapiLogExecution('DEBUG','<Before Load Script> type: '+type, lines + ' lines');
var TOrecord = nlapiCreateRecord ('transferorder');
var TOrecordID = TOrecord.getId();
TOrecord.setFieldValue('customform',128);
//subsidiaries CC bedford id is 2
TOrecord.setFieldValue('subsidiary',2);
//testing for location and transfer location, 144 & 145
TOrecord.setFieldValue('location',144);
TOrecord.setFieldValue('transferlocation',145);
nlapiLogExecution('DEBUG','<Before Load Script> type: '+type, 'break 4');
// add new lines to a sublist
nlapiSelectNewLineItem('item');
// set the item and location values on the currently selected line
nlapiSetCurrentLineItemValue('item', 'item', arrayName[1]);
nlapiSetCurrentLineItemValue('item', 'location', 6);
// commit the line to the database
nlapiCommitLineItem('item');
nlapiLogExecution('DEBUG','<Before Load Script> type: '+type, 'break 5');
var TOResult = nlapiSubmitRecord(TOrecord, true, true);
var TOTranID= nlapiLookupField('transferorder', TOResult, 'tranid');
nlapiLogExecution('DEBUG','<Before Load Script> type: '+type, 'break 6');
var poURL = nlapiResolveURL('RECORD', 'transferorder', TOResult);
nlapiSetRedirectURL('RECORD','transferorder', TOResult);
}
`
-
May 9, 2018 at 11:32 am #21279
Olivier Gagnon NCSorry, I hadn't noticed before: when you are adding the line (nlapiSetCurrentLineItemValue) you are using the wrong API. You reverted to local-record coding, as opposed to object coding. You need to switch to TOrecord.setLineItemValue() kind of APIs
-
AuthorPosts
You must be logged in to reply to this topic.