UNPKG

nsmockup

Version:

Test your Suitescripts before deploying to NetSuite

89 lines (83 loc) 2.92 kB
'use strict'; var ss = require('../db-utils/suite-script'), vmSim = require('../../src/vm-sim'); var $events = {}; /** * Find User Events attach on Record Type. * * @param recType {String} ID of Record Type. * @param step {'beforeLoad' | 'beforeSubmit' | 'afterSubmit'} * @returns {[{scriptName: String, step: String]} scripts names and step. */ exports.userEvent = (recType, step) => { let scripts = ss.find('user-event', {records: [recType]}) || []; return scripts.filter(script => { let event = script.name; // cache user events if (!$events[event]) $events[event] = script; // verify if user event has this step return script.events[step]; }).map(script => { return {scriptName: script.name, step: step}; }); }; /** * Execute User Event. * * @param event {{scriptName: String, step: String}} ID of User Event, example: "customscript_legal_event" * @param etype {'create' | 'update' | 'edit' | 'delete' | 'copy' | 'view'} * @param records {{old: nlobjRecord, new: nlobjRecord}} * * @exception {SSS_INVALID_USER_EVENT} */ exports.executeUserEvent = (event, etype, records) => { let $scripts = $db.$scripts, scriptName = event.scriptName, step = event.step, cfg = $scripts[scriptName] || {}, context = cfg.context, script = $events[scriptName]; if (script && script.functions && script.functions[step]) { let code = script.functions[step] + `("${etype}")`; if (!context) { context = vmSim.importSuiteScript(script, scriptName); } context.$$THIS_RECORD = { step: step, type: etype, recordOld: records.old, recordNew: records.new, recordId: (records.new || {}).getId() || -1, recordType: event.record }; // execute user event vmSim.evalContext(code, context); } else { throw nlapiCreateError('SSS_INVALID_USER_EVENT'); } }; /** * Verify if exists User Event trigger for this Record Type. * @param recType {String} ID of Record Type. * @returns {boolean} true if exists User Events triggers. */ exports.existsTriggerUserEvent = (recType) => { let events = ss.find('user-event', {records: [recType]}); return events && events.length > 0; }; /** * Execute all User Events triggers. * * @param recType {String} ID of Record Type. * @param step {'beforeLoad' | 'beforeSubmit' | 'afterSubmit'} * @param etype {'create' | 'update' | 'edit' | 'delete' | 'copy' | 'view'} * @param records {{old: nlobjRecord, new: nlobjRecord}} */ exports.runTriggerUserEvent = (recType, step, etype, records) => { let events = exports.userEvent(recType, step); for (let e = 0; e < events.length; e++) { let event = events[e]; event.record = recType; exports.executeUserEvent(event, etype, records); } };