NetSuite: A Retro Terminal Application

Published on July 5, 2023.

One of the things that I like most about the work that I do is that I'm often presented with projects that give me opportunities to experiment and build creative solutions. I experienced that back in Q1 of this year, when one of my NetSuite clients asked for ideas about a problem that they were running into.

My client is a very security conscious organization, and that's in large part due to the types of customers that they sell to. They were in the process of outsourcing their "after-hours" customer service and support to a third party, and they were concerned about providing that firm with access to sensitive data stored in NetSuite.

The Goal

One option that they had already explored was to export the data from NetSuite to a relational database - and the customer service firm already had experience with that. However, due to the contractual obligations that my client has with some of their customers, no data can be provided to and/or stored by third parties. So providing access to a database was not an option.

We discussed developing a custom Web portal, which I've done for many clients over the past few years. However, my client was concerned about the potential exposure of the Web app, especially considering that the operators working for the customer service firm are distributed and somewhat transient.

So the goal was to find a way to provide limited and secure access to very specific NetSuite data, without providing access to NetSuite itself, and without using a Web app.

An Unusual Solution

Late last summer, I had been experimenting with Xojo, the low-code development tool that I use and that I've written about in the past. I had developed a desktop application with a sort of "retro" user interface. It resembled the monochrome monitors that were used in the 70s and early to mid-80s. The app had an entirely textual interface, and consisted of a single field that the user could enter a command into, and a scrolling text area where the results of the commands were displayed. It was, needless to say, a throwback to the days when developers (myself included) were more concerned about the speed and accuracy of what was being presented, and less concerned about how things looked. Function over form, so to speak.

I mentioned the experiment and demoed it to my client, and she was intrigued. We agreed that I'd spend some time building a prototype based on the original experiment. Included below is a short animation showing an early prototype.

Click the image to view a larger version.

After seeing the prototype and playing with it a bit, my client approved the project.

How It Works

Here's how the app works - and it's really quite simple.

A Xojo-based desktop application presents the user interface. It consists of a single window with two controls. I'm using a thread to refresh the UI while waiting for responses from a server. Here's a screen shot of the app as it appears in the Xojo IDE.

Click the image to view a larger version.

A user enters a command, which the app attempts to interpret and process. There are standard commands such as "help" and "clear" and so on.

There's also a "connect" command that can be used to log into a remote server. That server is essentially a Web API that authenticates users and processes a set of commands that it has been specially designed to support. In the example above, you can see where I've authenticated with a server, and then used a "lookup so" command to get information about a sales order.

There are similar commands that can be used to lookup customers, items (to get the latest inventory and pricing), packages (to track delivery status), and more.

On the backend, the Web API can be developed using just about any technology that you'd like. For this project, the Web API is Xojo-based (for you Xojo developers out there, it's a simple Web 2.0 project), and it processes NetSuite-related requests using SuiteAPI.

Not For Everyone

This type of application isn't for everyone, and to say that it is "retro" is a massive understatement. It's essentially a terminal application with NetSuite on the backend.

But my client - and the end users - seem to love it.

My client loves it because it's very easy to extend and maintain. In fact, we've added support for additional commands, which required no changes at all to the runtime app. And while it's already very secure , we're in the process of enhancing security by implementing machine identification and two-factor authentication. They also appreciate that it's rock solid. We currently have it running on Macs, Windows-based PCs, and Raspberry Pis, and we've had no reports of crashes, slowness, etc.

I was nervous about how the end users would react to the interface. I think they were initially surprised by it, but then began to realize how easy it is to use. One of the users commented that they like that they "don't have to take their hands off of the keyboard" - which I found to be quite amusing.

If there's enough interest, I'll write more about this project in the weeks ahead.

About Me

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.