darrenhillconsulting
04/26/2022, 1:59 AMMatt Bernstein
04/26/2022, 3:00 AMdarrenhillconsulting
04/26/2022, 4:58 PMMatt Bernstein
04/27/2022, 1:27 PM//before load
commonController.mockSubsidiaryBeforeLoad(scriptContext, {
subsidiaryFieldId: "<<ORIGINAL SUBSIDIARY FIELD ID>>",
nextFieldId: "<<FIELD ID OF FIELD THAT WILL COME AFTER THE MOCKED FIELD>>",
});
//before submit
commonController.mockSubsidiaryBeforeSubmit(scriptContext, {
fieldId: "<<ORIGINAL SUBSIDIARY FIELD ID>>",
});
common controller file
md.mockSubsidiaryBeforeLoad = (scriptContext, options) => {
if (runtime.executionContext === "USERINTERFACE") {
let form = scriptContext.form;
const subsidiaryField = form.getField({
id: options.subsidiaryFieldId,
});
if (subsidiaryField) {
const mockField = form.addField(
{
id: "custpage_sub_mock"
type: subsidiaryField.type,
isMandatory: subsidiaryField.isMandatory,
label: subsidiaryField.label,
source: "subsidiary",
}
);
if (subsidiaryField.defaultValue) {
form.updateDefaultValues({
custpage_subsidiary: subsidiaryField.defaultValue,
});
}
mockField.setHelpText({
help: "<<INSERT ANY HELP TEXT>>",
});
form.insertField({
field: mockField,
nextfield: options.nextFieldId,
});
md.updateFieldDisplayTypeServer({form, fieldId: options.subsidiaryFieldId, displayType: "hidden"});
}
}
};
md.mockSubsidiaryBeforeSubmit = (scriptContext, options) => {
if (runtime.executionContext === "USERINTERFACE") {
let newRecord = scriptContext.newRecord;
const isChanged = md.didFieldChange(scriptContext, {
fieldId: options.fieldId,
mockFieldId: jsonController.MOCK_SUBSIDIARY.ID,
});
if (isChanged === true) {
newRecord.setValue({fieldId: options.fieldId, value: newRecord.getValue({fieldId: jsonController.MOCK_SUBSIDIARY.ID})});
}
}
};
/**
* @function didFieldChange
* @param {Object} scriptContext
* @param {Object} options
* @param {String} options.fieldId
* @param {String} options.mockFieldId
* @returns {boolean}
*/
md.didFieldChange = (scriptContext, options ) => {
const oldRecord = scriptContext.oldRecord;
const newRecord = scriptContext.newRecord;
if (!oldRecord || !newRecord) return true;
if (scriptContext.type === "xedit") {
const fields = JSON.parse(JSON.stringify(newRecord)).fields;
if (fields && Object.keys(fields).length > 0) {
if (!fields.hasOwnProperty(options.fieldId)) {
return false;
}
}
else {
return false;
}
}
let newValue = newRecord.getValue(options.fieldId);
let oldValue = oldRecord.getValue(options.mockFieldId || options.fieldId);
if (newValue && typeof newValue === "object") {
newValue = md.getDateTimeString(newValue);
}
if (oldValue && typeof oldValue === "object") {
oldValue = md.getDateTimeString(oldValue);
}
return oldValue !== newValue;
};
md.updateFieldDisplayTypeServer = (options) => {
const form = options.form;
if (!options.fieldId) return;
let field = form.getField(options.fieldId);
if (field) {
field.updateDisplayType({displayType: options.displayType});
}
};
md.getDateTimeString = (d) => {
if (d && typeof d === "object") {
return format.format({type: format.Type.DATETIME, value: d});
}
return d;
};
That should be all the code snippets. It's a before load and before submit function. the before load hides the original subsidiary field and then creates a new one being inserted before the passed in field id. before submit checks to see if the mock field changed and if so, set the original subsidiary field to the mocked field value