Requirement:
When clicked on the Rejection button in PO , a pop-up window for entering the rejection reason should appear. once the user enter the reason, this reason should be saved in a custom field in PO
Solution
/**
* @NApiVersion 2.x
* @NScriptType Suitelet
*/
/**************************************************************************************************************************
* POW-221 Suitelet script for creating popup page
* *************************************************************************************************************************
*
* Date: 11-April-2022
* created on: 11-April-2022
* Author: Jobin & Jismi IT Services LLP
*
* Version History
*
*****************************************************************************************************************************/
define(['N/record', 'N/https', 'N/ui/serverWidget','N/redirect'],
//To check whether a value exists in parameter
function (record, https, serverWidget, redirect) {
/**
* @description Check whether the given parameter argument has value on it or is it empty.
* ie, To check whether a value exists in parameter
* @param {*} parameter parameter which contains/references some values
* @param {*} parameterName name of the parameter, not mandatory
* @returns {Boolean} true if there exist a value else false
*/
function checkForParameter(parameter, parameterName) {
if (parameter !== "" && parameter !== null && parameter !== undefined && parameter !== false && parameter !== "null" && parameter !== "undefined" && parameter !== " " && parameter !== 'false') {
return true;
} else {
if (parameterName)
log.debug('Empty Value found', 'Empty Value for parameter ' + parameterName);
return false;
}
}
/**
* FUNCTION TO GET RECORD ID FROM SCRIPT CONTEXT URL.
**/
function getParameterByName(name, url) {
if (!url)
return false;
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex
.exec(url);
if (!results)
return null;
if (!results[2])
return ' ';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
function onRequest(context) {
try {
//var id = context.request.parameters.poInternalId;
var tran_url = context.request.headers.referer
log.debug("url", context.request.headers.referer)
var po_id = getParameterByName('id', tran_url);
log.debug("po_id", po_id)
//create form
var form = serverWidget.createForm({title: 'Rejection Reason'});
form.addFieldGroup({ id: 'enterReason', label: 'ENTER THE REASON FOR REJECTION' });
var reason = form.addField({
id: 'custpage_rejectionreason_pow221',
label: 'Reason For Rejection',
container: 'enterReason',
type: serverWidget.FieldType.TEXT
}).isMandatory = true;
var poRecVal = form.addField({ id: 'custpage_po_id', type: serverWidget.FieldType.TEXT, label: 'TXT', container: 'enterReason' })
poRecVal.updateDisplayType({displayType: serverWidget.FieldDisplayType.HIDDEN});
poRecVal.defaultValue = po_id;
form.addSubmitButton({
label: 'Submit'
});
context.response.writePage(form);
if (context.request.method == 'POST') {
var poID = context.request.parameters.custpage_po_id;
var reason = context.request.parameters.custpage_rejectionreason_pow221;
log.debug('reason', reason)
//load the PO record and store the rejection reason in the custom field
var id = record.submitFields({
type: record.Type.PURCHASE_ORDER,
id: poID,
values: {
custbody_jj_rejectionreason_powe221: reason
},
options: {
enableSourcing: false,
ignoreMandatoryFields : true
}
});
redirect.toRecord({type: record.Type.PURCHASE_ORDER,id: poID});
}
} catch (e) {
log.debug("Error@onRequest", e)
}
}
return {
onRequest: onRequest
}
});