The client would like to create a custom record entry when we enter the data to a suitelet page.
This can be achieved by creating a suitelet script and on submitting the details in the suitelet the data will be saved in the custom record and the custom record link will be stored in the parent record.
/**
* @NApiVersion 2.1
* @NScriptType Suitelet
*/
/*******************************************************************
* Suitelet Script
****************************************************************
*
* Date: 28/12/2022
*
* Author: Jobin and Jismi IT Services LLP
*
* REVISION HISTORY
*
* Revision 1.0
*
* Description: Script to create a suitelet page for entering the reject reason
*
* Revision 2.0
*
***************************************************************/
define(['N/currentRecord', 'N/http', 'N/record', 'N/redirect', 'N/search', 'N/ui/serverWidget', 'N/email'],
/**
* @param{currentRecord} currentRecord
* @param{http} http
* @param{record} record
* @param{redirect} redirect
* @param{search} search
* @param{serverWidget} serverWidget
*/
(currentRecord, http, record, redirect, search, serverWidget, email) => {
/**
* Defines the Suitelet script trigger point.
* @param {Object} scriptContext
* @param {ServerRequest} scriptContext.request - Incoming request
* @param {ServerResponse} scriptContext.response - Suitelet response
* @since 2015.2
*/
const onRequest = (scriptContext) => {
try {
let form = serverWidget.createForm({title: 'Enter The Reject Reason'});
if (scriptContext.request.method === 'GET') {
// get the parameters
let recordId = scriptContext.request.parameters.custscript_poRecordId;
let poRecIntId = scriptContext.request.parameters.custscript_poRecIntId;
let currentUser = scriptContext.request.parameters.custscript_currentUser;
// let rejectId=scriptContext.request.parameters.custscript_newMaxEntry
// create fields in the form to store the value
let poIdField = form.addField({
id: 'custrecord_jj_poid',
type: serverWidget.FieldType.TEXT,
label: 'Purchase Order Id',
});
poIdField.setHelpText("This is a custom field created to store purchase order id.");
poIdField.isMandatory = true;
poIdField.defaultValue = recordId;
poIdField.updateDisplayType({displayType: serverWidget.FieldDisplayType.DISABLED})
let rejectReasonField = form.addField({
id: 'custrecord_jj_reject_resn',
type: serverWidget.FieldType.LONGTEXT,
label: 'Reject Reason',
});
rejectReasonField.setHelpText("This is a custom field contains the reject reason");
rejectReasonField.isMandatory = true;
let poInternalIdField = form.addField({
id: 'custrecord_jj_intpoid',
type: serverWidget.FieldType.TEXT,
label: 'Purchase Order internal Id',
});
poInternalIdField.defaultValue = poRecIntId;
poInternalIdField.updateDisplayType({displayType: serverWidget.FieldDisplayType.HIDDEN})
let userObj = form.addField({
id: 'custrecord_jj_userobj',
type: serverWidget.FieldType.TEXT,
//source:"purchaseorder",
label: 'User Obj',
});
userObj.defaultValue = currentUser;
userObj.updateDisplayType({displayType: serverWidget.FieldDisplayType.HIDDEN})
let nameField = form.addField({
id: 'custrecord_jj_name',
type: serverWidget.FieldType.TEXT,
//source:"purchaseorder",
label: 'Name',
});nameField.defaultValue='Reject Reason ';
nameField.updateDisplayType({displayType: serverWidget.FieldDisplayType.DISABLED})
nameField.setHelpText("This is a custom field that contains the name of record");
// add button to the page
form.addSubmitButton({
label: 'SUBMIT'
});
scriptContext.response.writePage(form);
} else if (scriptContext.request.method === 'POST') {
let currentUser = scriptContext.request.parameters.custscript_currentUser;
let reason = scriptContext.request.parameters.custrecord_jj_reject_resn;
let orderId = scriptContext.request.parameters.custrecord_jj_intpoid;
let userObject = scriptContext.request.parameters.custrecord_jj_userobj;
let nameField=scriptContext.request.parameters.custrecord_jj_name
// create entry to the custom record and save the entry
let objRecord = record.create({
type: 'customrecord_jj_reject_reason_record',
//isDynamic: true
});
objRecord.setValue({fieldId: 'custrecord_jj_reasonfor_reject', value: reason})
objRecord.setValue({fieldId: 'custrecord_jj_po_id', value: orderId})
objRecord.setValue({fieldId: 'name', value: nameField})
let custRecId = objRecord.save();
// submit the reject reason internal id to the custom field
let id = record.submitFields({
type: record.Type.PURCHASE_ORDER,
id: orderId,
values: {
// 'custbody_jj_rejectn_reason': custRecId,
'approvalstatus': '1',
'orderstatus':'A',
'custbody_jj_po_approval_status':'2'
},
options: {
enableSourcing: false,
ignoreMandatoryFields: true
}
});
// send email from the current user to the section head
var url = 'https://5856824-sb1.app.netsuite.com/app/accounting/transactions/purchord.nl?id=' + orderId + '&whence='
var reclink = "<a href='" + url + "'> View Record</a>"
var emailSubject = "The Item Receipt is Rejected";
var emailBody = "<BR />Hi, <BR/> <BR/>The Item Receipt is rejected.<BR/><BR/> " +
"Rejection Reason: " + reason + "<BR/><BR/> Please Resubmit the record if required. <BR/> <BR/> " +
"Click the below link to view the Purchase Order Record. <BR/><BR/> Thank You." + " <BR/><BR/>" +
"" + reclink + ""
email.send({
author: userObject,
recipients: 'litha.mukunthan@jobinandjismi.com',
subject: emailSubject,
body: emailBody,
});
// redirect to the purchase order record
redirect.redirect({
url: url,
});
}
} catch (e) {
log.error("error @ onRequest", e)
}
}
return {onRequest}
});