Module 12: Suitelets (Custom Pages)

Week 12 • NetSuite SuiteScript 2.0 Training • ~75 minutes

🎯 Learning Objectives

1. What Are Suitelets?

Suitelets are custom pages you build from scratch. Unlike User Event scripts that modify existing records, Suitelets create entirely new user interfaces.

💡 Use Cases
  • Custom data entry forms
  • Dashboard pages combining multiple records
  • Configuration interfaces
  • Custom reports
  • Web services (return JSON/XML)

2. Request/Response Cycle

/**
 * @NApiVersion 2.1
 * @NScriptType Suitelet
 */
define(['N/ui/serverWidget'], function(serverWidget) {
    
    function onRequest(context) {
        // context.request.method = 'GET' or 'POST'
        // context.request.parameters = URL parameters
        // context.response = what to send back
        
        if (context.request.method === 'GET') {
            // Display a form
            var form = serverWidget.createForm({ title: 'My Custom Page' });
            context.response.writePage(form);
        } else {
            // Process form submission
            var name = context.request.parameters.custpage_name;
            context.response.write('You submitted: ' + name);
        }
    }
    
    return { onRequest: onRequest };
});

3. Building Forms

function onRequest(context) {
    if (context.request.method === 'GET') {
        var form = serverWidget.createForm({
            title: 'Customer Feedback Form'
        });
        
        // Add fields
        form.addField({
            id: 'custpage_name',
            type: serverWidget.FieldType.TEXT,
            label: 'Your Name'
        });
        
        form.addField({
            id: 'custpage_email',
            type: serverWidget.FieldType.EMAIL,
            label: 'Email Address'
        });
        
        form.addField({
            id: 'custpage_comments',
            type: serverWidget.FieldType.TEXTAREA,
            label: 'Comments'
        });
        
        // Add submit button
        form.addSubmitButton({ label: 'Submit Feedback' });
        
        context.response.writePage(form);
    }
}

Field Types

TypeUse For
TEXTShort text input
TEXTAREAMulti-line text
EMAILEmail addresses
DATEDate picker
SELECTDropdown list
CHECKBOXYes/No toggle
INTEGERWhole numbers
CURRENCYMoney amounts

4. Processing Submissions

function onRequest(context) {
    if (context.request.method === 'POST') {
        // Get submitted values
        var name = context.request.parameters.custpage_name;
        var email = context.request.parameters.custpage_email;
        var comments = context.request.parameters.custpage_comments;
        
        // Create a record
        var feedback = record.create({ type: 'customrecord_feedback' });
        feedback.setValue({ fieldId: 'name', value: name });
        feedback.setValue({ fieldId: 'custrecord_email', value: email });
        feedback.setValue({ fieldId: 'custrecord_comments', value: comments });
        var feedbackId = feedback.save();
        
        // Show confirmation
        var form = serverWidget.createForm({ title: 'Thank You!' });
        form.addField({
            id: 'custpage_message',
            type: serverWidget.FieldType.INLINEHTML,
            label: ' '
        }).defaultValue = '

Feedback submitted successfully!

ID: ' + feedbackId + '

'; context.response.writePage(form); } }
⚠️ Suitelet URLs

Access your Suitelet via: /app/site/hosting/scriptlet.nl?script=123&deploy=1
Or generate URLs with N/url.resolveScript()

🏋️ Practice Exercises

Exercise 1: Simple Form

Create a Suitelet with a form that collects customer name and phone, then displays the values on POST.

Exercise 2: Lookup Page

Create a Suitelet where users enter a Customer ID, and it displays that customer's details.

🎯 Key Takeaways

  • Suitelets create custom standalone pages
  • Handle GET (display form) and POST (process submission)
  • Use N/ui/serverWidget to build forms
  • Field IDs must start with custpage_
  • Access submitted values via context.request.parameters