Add a virtual field to populate the currency based on a vendor using a User event script
const currencyField = form.addField({
id: 'custpage_jj_currency_vf',
type : serverWidget.FieldType.SELECT,
label: 'Vendor Currencies'
});
currencyField.addSelectOption({
value: 'NONE',
text: '- None -'
});
Use a client script to populate the values
/**
* Funtion to search Vendor currency details
* @param getVendorCurrency
* @returns {boolean|*[]}
*/
function vendorCurrencyDetails(getVendorCurrency) {
try {
var vendorSearchObj = search.create({
type: "vendor",
filters:
[
["internalid", "anyof", getVendorCurrency]
],
columns:
[
search.createColumn({
name: "currency",
join: "VendorCurrencyBalance",
label: "Currency"
})
]
});
var searchResultCount = vendorSearchObj.runPaged().count;
if (searchResultCount > 0) {
var currencyArray = [];
vendorSearchObj.run().each(function (result) {
var curr = result.getValue({
name: "currency",
join: "VendorCurrencyBalance",
label: "Currency"
});
currencyArray.push(curr);
return true;
});
return currencyArray;
}
else {
// return false;
return [];
}
} catch (e) {
console.log("Error @vendorCurrencyDetails", e.message);
return [];
}
}
/**
* Function to search the currency
* @param currencyArray
* @returns {boolean|*[]}
*/
function allCurrencySearch(currencyArray) {
try {
var vendorCurrencyList = [];
var currencySearchObj = search.create({
type: "currency",
filters:
[],
columns:
[
search.createColumn({
name: "name",
sort: search.Sort.ASC,
label: "Name"
}),
search.createColumn({name: "internalid", label: "Internal ID"})
]
});
var searchResultCount = currencySearchObj.runPaged().count;
if (searchResultCount > 0) {
currencySearchObj.run().each(function (result) {
var internalId = result.getValue({
name: "internalid", label: "Internal ID"
});
var currency = result.getValue({
name: "name",
sort: search.Sort.ASC,
label: "Name"
})
if (currencyArray.includes(currency)) {
var temp = {}
temp.vendorCurrency = currency;
temp.currencyId = internalId;
vendorCurrencyList.push(temp);
}
return true;
});
return vendorCurrencyList;
}
else
{
return []
}
} catch (error) {
console.log("Error @vendorCurrencySearch", error.message);
return []
}
}
/**
* Function to remove options
* @param subsidiaryVirtualField
* @param isPageInit
* @param currencyVirtualField
*/
function removeOptions(isPageInit, currencyVirtualField) {
try {
// var options = subsidiaryVirtualField.getSelectOptions();
// console.log("remove subsidiary");
// for (var optionKey in options) {
// if (options[optionKey].value !== "NONE")
// subsidiaryVirtualField.removeSelectOption({
// value: options[optionKey].value,
// });
// if (!isPageInit) {
// currentRecord.setValue({
// fieldId: "custrecord_jj_subsidiary",
// value: " ",
// });
// currentRecord.setValue({
// fieldId: "custrecord_jj_vendor_currency",
// value: " ",
// });
// }
// }
var currencyOptions = currencyVirtualField.getSelectOptions();
console.log("remove currency");
for (var curOptionKey in currencyOptions) {
if (currencyOptions[curOptionKey].value !== "NONE")
currencyVirtualField.removeSelectOption({
value: currencyOptions[curOptionKey].value,
});
if (!isPageInit) {
// currentRecord.setValue({
// fieldId: "custrecord_jj_subsidiary",
// value: " ",
// });
currentRecord.setValue({
fieldId: "custrecord_jj_vendor_currency",
value: " ",
});
}
}
} catch (error) {
console.log("Error @removeOptions", error);
}
}
/**
* Add options to virtual fields
* @param subsidiaryVirtualField
* @param vendorSearchDetails
*/
function addOptions( currencyVirtualField,CurrencySearchResult) {
// subsidiaryVirtualField, vendorSearchDetails,
try {
// for (var key in vendorSearchDetails) {
// subsidiaryVirtualField.insertSelectOption({
// value: vendorSearchDetails[key]['subsidiaryId'],
// text: vendorSearchDetails[key]['vendorSubsidiary'],
// });
// }
for (var key in CurrencySearchResult) {
currencyVirtualField.insertSelectOption({
value: CurrencySearchResult[key]['currencyId'],
text: CurrencySearchResult[key]['vendorCurrency'],
});
}
} catch (error) {
console.log("Error @addOptions", error);
}
}
/**
* @description Function to set display type of the Store Number virtual field
*/
function setDisplay(isPageInit) {
try {
var vendorName = currentRecord.getValue({
fieldId: "custrecord_jj_vendor",
});
// var subsidiaryVirtualField = currentRecord.getField({
// fieldId: "custpage_jj_subsidiary_vf",
// });
var currencyVirtualField = currentRecord.getField({
fieldId: "custpage_jj_currency_vf",
});
if (vendorName) {
// subsidiaryVirtualField.isDisplay = true;
// subsidiaryVirtualField.isDisabled = false;
currencyVirtualField.isDisplay = true;
currencyVirtualField.isDisabled = false;
// var vendorSearchDetails = vendorSubsidiaryDetails(vendorName);
// console.log("vendorSearchDetails", vendorSearchDetails);
var CurrencyDetails = vendorCurrencyDetails(vendorName);
console.log("CurrencyDetails", CurrencyDetails);
if(CurrencyDetails.length > 0)
{
console.log("vendor currencies.")
var CurrencySearchResult = allCurrencySearch(CurrencyDetails);
console.log("CurrencySearchResult", CurrencySearchResult);
console.log("CurrencyID", CurrencySearchResult[0].currencyId);
console.log("object length",Object.keys(CurrencySearchResult).length)
console.log("array length",CurrencySearchResult.length)
//if (Object.keys(CurrencySearchResult).length > 0) {
if (CurrencySearchResult.length > 0) {
// (Object.keys(vendorSearchDetails).length > 0) ||
removeOptions(isPageInit, currencyVirtualField);
addOptions(currencyVirtualField,CurrencySearchResult);
} else {
removeOptions(isPageInit, currencyVirtualField);
}
}
}
else {
// subsidiaryVirtualField.isDisplay = false;
currencyVirtualField.isDisplay = false;
// currentRecord.setValue({
// fieldId: "custrecord_jj_subsidiary",
// value: " ",
// });
currentRecord.setValue({
fieldId: "custrecord_jj_vendor_currency",
value: " ",
});
}
}
catch (error) {
console.log("Error @setDisplay", error);
}
}
/**
* Function to search the prefferd vendor price from the custom record vendor price
* @param parentItem
* @param VPMarket
* @returns {boolean}
*/
function getPreferredVendorPriceChecked(parentItem,VPMarket) {
try {
var customrecord_jj_vendor_priceSearchObj = search.create({
type: "customrecord_jj_vendor_price",
filters:
[
["custrecord_jj_parent_item_vendorprice","anyof",parentItem],
"AND",
["custrecord_jj_preferred_price","is","T"],
"AND",
["custrecord_jj_market","anyof",VPMarket]
],
columns:
[
search.createColumn({name: "internalid", label: "Internal ID"}),
search.createColumn({name: "custrecord_jj_parent_item_vendorprice", label: "Parent Item"}),
search.createColumn({name: "custrecord_jj_preferred_price", label: "Preferred Price"}),
search.createColumn({name: "custrecord_jj_market", label: "Market"})
]
});
var searchResultCount = customrecord_jj_vendor_priceSearchObj.runPaged().count;
console.log("searchResultCOunt", searchResultCount);
if(searchResultCount > 0){
return true;
}else{
return false;
}
}
catch
(error)
{
console.log("Error @getPreferredVendorPriceChecked", error.message);
return false;
}
}
/**
* Function to be executed after page is initialized.
*
* @param {Object} scriptContext
* @param {Record} scriptContext.currentRecord - Current form record
* @param {string} scriptContext.mode - The mode in which the record is being accessed (create, copy, or edit)
*
* @since 2015.2
*/
function pageInit(scriptContext) {
try {
currentRecord = scriptContext.currentRecord;
mode = scriptContext.mode;
if (mode === "create") {
} else if (mode === "edit") {
console.log("edit context if")
var vendorName = currentRecord.getValue({
fieldId: "custrecord_jj_vendor",
});
console.log("vendorName",vendorName)
if (vendorName) {
var isPageInit = true
setDisplay(isPageInit)
}
}
} catch (error) {
console.log("Error @pageinit", error);
}
}
/**
* Function to be executed when field is changed.
*
* @param {Object} scriptContext
* @param {Record} scriptContext.currentRecord - Current form record
* @param {string} scriptContext.sublistId - Sublist name
* @param {string} scriptContext.fieldId - Field name
* @param {number} scriptContext.lineNum - Line number. Will be undefined if not a sublist or matrix field
* @param {number} scriptContext.columnNum - Line number. Will be undefined if not a matrix field
*
* @since 2015.2
*/
function fieldChanged(scriptContext) {
try {
var isPageInit = false;
var fieldChanged = scriptContext.fieldId;
if ((mode === "create") || (mode === "edit")) {
// if (fieldChanged === "custpage_jj_subsidiary_vf") {
//
// var subsidiaryVF = currentRecord.getValue({
// fieldId: "custpage_jj_subsidiary_vf",
// });
// var currencyVF = currentRecord.getValue({
// fieldId: "custpage_jj_currency_vf",
// });
//
// if (subsidiaryVF !== "- None -") {
// currentRecord.setValue({
// fieldId: "custrecord_jj_subsidiary",
// value: subsidiaryVF,
// });
// // currentRecord.setValue({
// // fieldId: "custrecord_jj_vendor_currency",
// // value: subsidiaryVF,
// // });
// } else {
// currentRecord.setValue({
// fieldId: "custrecord_jj_subsidiary",
// value: " ",
// });
// // currentRecord.setValue({
// // fieldId: "custrecord_jj_vendor_currency",
// // value: " ",
// // });
// }
// }
if (fieldChanged === "custpage_jj_currency_vf") {
console.log("field change currency")
var currencyVF = currentRecord.getValue({
fieldId: "custpage_jj_currency_vf",
});
console.log("currencyVF", currencyVF)
if (currencyVF !== "- None -") {
currentRecord.setValue({
fieldId: "custrecord_jj_vendor_currency",
value: currencyVF,
});
} else {
currentRecord.setValue({
fieldId: "custrecord_jj_vendor_currency",
value: " ",
});
}
} else if (fieldChanged === "custrecord_jj_vendor") {
console.log("field change of vendor")
setDisplay(isPageInit);
}
}
} catch (error) {
console.log("Error @fieldChanged", error);
}
}
return {
pageInit: pageInit,
fieldChanged: fieldChanged,
};
});