SuiteCloud Development Fundamentals
This domain tests the platform's building blocks: customization layers, the SuiteScript runtime model, governance, and the tooling that moves code between accounts. Expect questions that ask you to choose the right mechanism and explain how a script file becomes a running, deployed customization.
Layers and packaging
NetSuite is multi-tenant, so every customization either lives privately in your account or arrives as a distributable package. Account-level customizations (records, fields, scripts) are private. SuiteApps are distributable applications built in a SuiteApp project and installed through the SuiteApp marketplace or a bundle. SuiteBundler bundles are the older distribution path: objects are packaged under a bundle ID and land as read-only components in the target account.
The SuiteScript model
SuiteScript 2.x files are AMD modules. Declare dependencies with define(['N/record','N/search'], (record, search) => { ... }) and return an object of entry points. The JSDoc annotations @NScriptType (UserEventScript, ClientScript, ScheduledScript, MapReduceScript, Restlet, Suitelet) and @NApiVersion 2.1 tell NetSuite how to register the file. A script record points at the file and sets the API version; a deployment record decides which record types, roles, and status (Testing, Released, Scheduled) apply.
SDF
SuiteCloud Development Framework represents objects as XML inside a project. Account Customization Projects deploy into one account and may reference its IDs; SuiteApp projects must stay account-agnostic. The CLI (suitecloud account:setup, project:validate, project:deploy) drives CI/CD pipelines.
Worked example. A developer uploads a 2.1 User Event script, creates the script record and a deployment, but nothing fires on save. Reasoning: confirm @NScriptType matches the exported entry points (beforeSubmit/afterSubmit); confirm the script record's API version; then confirm the deployment is Released with the correct record type and role selected. A Testing-status deployment runs only for the role that deployed it.
Traps
- Treating a bundle and a SuiteApp project as interchangeable.
- Referencing account-specific internal IDs inside a SuiteApp project.
- Tagging a server module with
@NScriptType ClientScript, so the script record offers the wrong type.