Published on April 16, 2025.
I'm currently working on a NetSuite project that requires programmatically attaching notes to Sales Orders. I thought I'd share some of the code that I wrote in support of the project.
To attach a note to a transaction using SuiteScript, you simply create a note record, and specify the internal ID of the transaction.
Here's a snippet of code that shows how to do this.
var note = record.create( { type: record.Type.NOTE } ); note.setValue( { fieldId: 'title', value: 'Test Note Title' } ); note.setValue( { fieldId: 'notetype', value: 7 } ); note.setValue( { fieldId: 'direction', value: 1 } ); note.setValue( { fieldId: 'note', value: 'Test Note Content' } ); note.setValue( { fieldId: 'transaction', value: 999999 } ); note.save();
The "notetype" field is used to specify the type of note to be created, and the field's supported values are based on the "Note Type" CRM List. You can find a list of the types that are supported in your NetSuite instance by navigating to: Setup > Sales > CRM Lists, and filter the list by selecting "Note Type" as the Type. In most of my clients' instances, "Note" is ID 7.
You can also get an instance's supported note types by querying the NoteType table.
SELECT ID, Name, Description FROM NoteType
The "direction" field is used to indicate if the note is "Incoming" or "Outgoing." For example, if the note originated from outside your organization, the direction would be "Incoming." If the note originated in your organization, and is being sent to someone outside of your organization, you'd set the direction to "Outgoing." When setting the field, use 1 for Incoming, and 2 for Outgoing.
Attaching notes to custom records can be a little tricky. For information on how you can do it, check out this blog post by Chidi Okwudire.
To get a list of the notes that are attached to a transaction, you can query the TransactionNote table. Here's a sample query.
SELECT TO_CHAR( TransactionNote.NoteDate, 'YYYY-MM-DD @ HH12:MI PM' ) AS NoteDate, ( Author.FirstName || ' ' || Author.LastName ) AS Author, BUILTIN.DF( TransactionNote.Direction ) AS Direction, TransactionNote.Title, TransactionNote.Note FROM TransactionNote INNER JOIN Employee AS Author ON ( Author.ID = TransactionNote.Author ) WHERE ( Transaction = 999999 ) AND ( NoteType = 7 ) ORDER BY TransactionNote.NoteDate DESC
In this example, I'm joining to the Employee table to get information about the author of the note. Note that I'm using the BUILTIN.DF function on the Direction column to get the text value of the note's direction.
Hello, I'm Tim Dietrich. I develop custom software for businesses that are running on NetSuite, including mobile apps, Web portals, Web APIs, and more.
I'm the developer of several popular NetSuite open source solutions, including the SuiteQL Query Tool, SuiteAPI, and more.
I founded SuiteStep, a NetSuite development studio, to provide custom software and AI solutions - and continue pushing the boundaries of what's possible on the NetSuite platform.
Copyright © 2025 Tim Dietrich.