Skip to content
H›skcah
WritingTopicsAbout
The archive

Writing

46 practical notes, written to be found again.

BrowseAll writingTopicsSearch
28 July 20265 minute read

SuiteQL Metadata vs SuiteCloud XML for Custom Records

Choose SuiteQL Records Catalog metadata for analytical discovery and SuiteCloud SDF XML for deployment: different systems, names and guarantees for custom records and fields.

SuiteQLSuiteCloudSDF
28 July 20265 minute read

Export a NetSuite Custom-Field Data Dictionary With SuiteScript

Build a SuiteScript export of custom-field definition metadata with SuiteQL: catalog-confirmed columns, pagination, CSV escaping and per-account query adaptation.

SuiteScriptSuiteQLCustom Fields
28 July 20265 minute read

Why CustomRecordCustomField Is Missing From SuiteQL

Diagnose a missing CustomRecordCustomField (or similar) SuiteQL record: role, channel, features, Show Unavailable Items and the difference between UI fields and analytics metadata.

SuiteQLCustom RecordsCustom Fields
28 July 20266 minute read

NetSuite Custom Field Metadata Tables Explained

Map NetSuite custom-field families to SuiteQL metadata records: custom-record fields versus transaction, entity, item and CRM definitions—always verified in the Records Catalog.

SuiteQLCustom FieldsCustom Records
28 July 20265 minute read

How to Find a Custom Field's List or Record Type With SuiteQL

Discover which list or record a NetSuite List/Record custom field points to by reading field-definition metadata from the Records Catalog—not by guessing from the UI.

SuiteQLCustom FieldsCustom Records
28 July 20265 minute read

How to Join CustomRecordCustomField to CustomRecordType

Join custom-record field definition metadata to custom-record type metadata in SuiteQL only after the Records Catalog documents the relationship—never from a guessed UI key.

SuiteQLCustom RecordsCustom Fields
27 July 20265 minute read

CustomRecordCustomField SuiteQL Column Reference

A practical column checklist for SuiteQL against CustomRecordCustomField: which analytical fields to confirm in the Records Catalog and how to select them safely.

SuiteQLCustomRecordCustomFieldCustom Fields
27 July 20267 minute read

SuiteScript: Preserve Applied Journal Credits When Updating an Invoice

Safely update a NetSuite invoice without losing its applied journal credits by snapshotting applications and restoring missing amounts through a zero-dollar customer payment.

SuiteScriptSuiteQLInvoices
27 July 20262 minute read

SuiteQL Customer Address Tables Explained

Understand Customer, CustomerAddressBook and CustomerAddressBookEntityAddress and join them correctly in SuiteQL.

SuiteQLCustomerAddresses
27 July 20262 minute read

Why SuiteQL Customer Address Joins Return Duplicate Rows

Diagnose duplicate customer rows in SuiteQL address queries and choose the correct result grain instead of relying on DISTINCT.

SuiteQLCustomerAddresses
27 July 20262 minute read

SuiteQL: Get the Default Billing and Shipping Address

Return a customer default billing address, default shipping address or both with SuiteQL while retaining customers without an address.

SuiteQLCustomerAddresses
27 July 20263 minute read

SuiteQL Time Zones: Why Dates Can Shift by One Day

Diagnose SuiteQL dates that appear one day early or late by separating date-only values, timestamps and JavaScript time-zone conversion.

SuiteQLSuiteScriptTime Zones
27 July 20262 minute read

SuiteQL Accounting Period Queries: Fiscal Years and Posting Periods

Query NetSuite accounting periods with SuiteQL and avoid confusing transaction dates, posting periods and fiscal calendars.

SuiteQLAccounting PeriodsReporting
27 July 20262 minute read

SuiteQL GROUP BY Month, Quarter and Year

Group SuiteQL results by calendar month, quarter or year while keeping the output correctly sorted across multiple years.

SuiteQLSQLReporting
26 July 20262 minute read

SuiteQL Date Bind Parameters: TO_DATE and TO_TIMESTAMP Examples

Pass dates and timestamps safely to N/query SuiteQL using bind parameters, TO_DATE and TO_TIMESTAMP with explicit formats.

SuiteQLSuiteScriptN/query
26 July 20262 minute read

SuiteQL Date Filtering: Current Month, Previous Month and Date Ranges

Filter SuiteQL records by the current month, previous month or a custom date range without losing rows at time boundaries.

SuiteQLSQLDate Functions
21 July 20268 minute read

How to Stop a NetSuite Map/Reduce Script Safely

Cancel a pending NetSuite Map/Reduce deployment, contain one that is already processing, assess partial work and add a cooperative stop switch.

SuiteScriptMap ReduceSuiteCloud Processors
20 July 202610 minute read

NetSuite API With Python: REST Web Services and RESTlet Examples

Connect Python to NetSuite using OAuth 2.0, REST Web Services, SuiteQL and RESTlets, with pagination, retries, error handling and secure configuration.

NetSuitePythonREST API
20 July 20268 minute read

NetSuite Rounding Formulas in Saved Searches

Round numbers, currency, percentages and dates in NetSuite saved searches using ROUND, TRUNC, FLOOR and CEIL, with practical examples and common mistakes.

Saved SearchFormulasNetSuite
20 July 20269 minute read

NetSuite Saved Search Formula Functions Reference

A practical reference for supported NetSuite saved-search functions, with copyable examples for text, numbers, dates, nulls, conditions and summary results.

Saved SearchFormulasNetSuite
20 July 20266 minute read

'An Unexpected SuiteScript Error Has Occurred': Diagnostic Guide

Diagnose NetSuite UNEXPECTED_ERROR failures by isolating deployment, imports, permissions, field IDs, N/search, N/query, serialization and governance problems.

SuiteScriptDebuggingRESTlet
20 July 20265 minute read

NetSuite CASE WHEN Formula: Multiple Conditions and Examples

Write NetSuite saved-search CASE formulas with multiple WHEN branches, AND, OR, ELSE, null handling, numeric flags, summaries and DECODE alternatives.

Saved SearchFormulasCASE
20 July 20266 minute read

NetSuite Saved Search Formulas: Complete Guide and Examples

Use NetSuite saved-search formulas in criteria, results and highlighting, with examples for text, numbers, dates, null values, summaries and common errors.

Saved SearchFormulasNetSuite
20 July 20264 minute read

How to Find SuiteQL Table and Field Names

Use the NetSuite Records Catalog to find SuiteQL record, field and join IDs, understand role-specific availability and diagnose unknown identifier errors.

SuiteQLRecords CatalogN/query
20 July 20264 minute read

SuiteQL Result Limits and Pagination Explained

Understand the 5,000-row runSuiteQL limit, runSuiteQLPaged page sizes, deterministic ordering, governance and the 100,000-row paged-result ceiling.

SuiteQLN/queryPagination
20 July 20265 minute read

CustomRecordCustomField in SuiteQL: Query NetSuite Custom Record Fields

Find CustomRecordCustomField metadata in the NetSuite Records Catalog and query custom-record field IDs, labels and relationships safely with SuiteQL.

SuiteQLCustom RecordsCustom Fields
20 July 20264 minute read

SuiteQL EXTRACT: Get the Year and Month From a Date

Use EXTRACT(YEAR FROM date) and EXTRACT(MONTH FROM date) in SuiteQL to filter, group and compare NetSuite date fields, with alternatives using TO_CHAR.

SuiteQLSQLDate Functions
20 July 20267 minute read

SuiteScript Standard vs Dynamic Mode: Which Sublist APIs to Use

Choose the correct SuiteScript sublist APIs for standard and dynamic record modes, with working examples, field-sourcing differences and a debugging checklist.

SuiteScriptN/recordSublists
20 July 20264 minute read

Build Dynamic SuiteQL WHERE Clauses Without Breaking Bind Parameters

Keep optional SuiteQL filters and positional parameters synchronized, handle dates safely, and avoid malformed WHERE clauses and invalid bind types.

SuiteQLSuiteScriptTypeScript
20 July 20264 minute read

Why Suitelet FILE Fields Cannot Be Added to Subtabs

NetSuite FILE fields must remain in a Suitelet’s main area. Here is why native subtabs and upload controls conflict, plus practical layout alternatives.

SuiteScriptSuiteletserverWidget
20 July 20264 minute read

How to Read Suitelet Sublist Values After a POST

Use ServerRequest.getLineCount and getSublistValue to process submitted Suitelet rows, with notes on validation, checkboxes and NetSuite’s raw sublist encoding.

SuiteScriptSuiteletserverWidget
20 July 20265 minute read

SuiteScript Search Filter Expressions: AND, OR, NOT, Joins and Empty Values

A practical guide to composing N/search filter expressions, including nested OR conditions, NOT, joined fields, formula filters and NetSuite special values.

SuiteScriptSaved SearchN/search
20 July 20266 minute read

How to Stack Multiple Sublists on One Suitelet Subtab

Sharing a NetSuite tab does not make Suitelet sublists appear one beneath another. The missing piece is a shared subtab. Here is the working serverWidget pattern and its layout caveats.

SuiteScriptSuiteletserverWidget
19 July 20265 minute read

SuiteQL Empty Strings Are NULL: Why Optional Filters Return No Rows

A blank SuiteQL parameter is not equal to an empty string. Learn why optional filters silently remove every row, how to reproduce the problem, and two reliable ways to fix it.

SuiteQLSuiteScriptSQL
31 July 20254 minute read

Navigating Panels in Neovim: A Beginner's Guide to Ctrl-w

As I continue my journey into Neovim, I've discovered that one of the most powerful features is the ability to work with multiple panels or windows, as Vim calls them. Coming from …

NeovimVimText Editing
30 July 20257 minute read

Understanding Delete Operations in Neovim

I've only started a venture into Neovim. With AI producing a lot of the code I need to get started, and my recent testing with Claude Code, I'm finding I'm back in the terminal a l…

NeovimVimText Editing
20 May 20253 minute read

Fix 'SuiteScript 2.1 Entry Point Scripts Must Implement One Script Type Function'

Diagnose the SCRIPT_OF_API_VERSION_2X_MUST_IMPLEMENT_A_SCRIPT_TYPE_INTERFACE error by checking script annotations, client-script paths and exported entry points.

SuiteScriptUserEventScriptClientScript
12 May 20252 minute read

SuiteQL Edit Column Name to Make It More Readable

If you're using Tim Diedrich's SuiteQL suitelet in your Netsuite instance to generate a table of results and want to present this result but don't like the column headers, or if yo…

SuiteQL
09 May 20254 minute read

SuiteCloud: Import a Custom Record and Its Custom Fields

Import a NetSuite custom record type into an SDF project with SuiteCloud CLI and understand how customrecordcustomfields appear in the generated XML definition.

SuiteScriptSuiteCloud
09 May 20259 minute read

SuiteQL Number and Date Series: Generate 1 to N With DUAL

Generate a number or date series in SuiteQL using DUAL, CONNECT BY or portable digit sets for working-day calculations and missing-period reports.

SuiteQL
03 May 20254 minute read

A Reusable SuiteQL Query Template With Bind Parameters

A practical SuiteQL starting template for named columns, bind parameters, optional filters, deterministic ordering and N/query execution.

SuiteQLN/queryQuery Templates
03 May 20252 minute read

SuiteQL Query to Get Customer Address Details

Join Customer, CustomerAddressBook and CustomerAddressBookEntityAddress to retrieve billing, shipping and street-address details with SuiteQL.

SuiteQL
03 May 20253 minute read

Fix SuiteQL LISTAGG 'Invalid or Unsupported Search'

LISTAGG is currently listed as unsupported in SuiteQL. Diagnose the generic error and replace string aggregation with grouped rows or JavaScript processing.

SuiteQLDebuggingAggregation
02 May 20251 minute read

Suitescript Reference File Without Domain

How do you reference images that are stored in your Filing Cabinet when trying to embed them into HTML. For example, when using logos in your emails how do you reference them? When…

Suitescript
02 May 20251 minute read

Suitescript Object Script Deployment Recurrence

When creating an XML object definition for your Suitescript deployment I noticed the schedule for the deployment was different to what I had coded. Here's a snippet of the XML obje…

SuitescriptXML Object Definition
02 May 20254 minute read

Optimise a Slow SuiteQL Query With a CTE

A SuiteQL budget query fell from almost nine minutes to five seconds by filtering the required category in a CTE before joining the larger result set.

SuiteQL
H› skcah

Think differently. Look back to see forward.

RSSXGitHub

© 2026 Ryan Sheehy