Many of us would prefer to make rote tasks as efficient and speedy as possible, but sometimes you just can’t get around them. Manually entering new data to an existing data table is one of these tasks. If you find yourself entering new data by copy-pasting from previous cells and wishing there was just a drop-down for some of these values, look no further. In this session, discover a practical pattern for building your own click-to-log dialog in JSL that captures clean, consistent entries and appends them to your table.

Learn how to:

  • Identify the basic components of a dialog window in JMP.
  • Script date, numeric, text, and drop-down fields in JSL.
  • Validate inputs and append each submission as a new row in a data table.
  • Package the final script as an add-in and launch it from the menu.

This session is designed for beginner to intermediate JSL users who want to start building interactive dialogs in JMP. We show how to create a simple food log add-in as an example, but the approach generalizes to any quick data-entry task. Leave with a clear understanding of the parts of a JMP dialog and a template that you can adapt into your own click-to-log add-in.

 

 

Welcome to this talk on how to build your own data entry window for logging your data into JMP. In this presentation, you'll hear the JSL Dialog Windows Basics, the 101, and learn how to create your own add-in to log your data to your JMP data table. Before I was a systems engineer… You know what?

Sorry.

Redo. I just forgot a whole part to introduce myself.

No worries.

Welcome to this talk on how to build your own data entry window for logging data in JMP. In this presentation, you'll hear the JSL Dialog Windows Basics, the 101, and learn how to create your own add-in to log your data to your JMP data table. My name is Monique Roerdink Lander, and I'm a systems engineer at JMP.

Before I was a systems engineer, I worked for over a decade in research. I worked hands-on on product formulations, and that meant running lots and lots of tests and generating lots and lots of data. This picture, that was me at some time, for real. I was, at some point in my career, testing water samples left and right. It was for different sources, for two different measurement methods, both in duplicate, sometimes in triplicate, and twice a day.

I think I had decided we needed to do this for like four to 6 months or something like that. It was hard to keep up, both with the measuring and with entering all the data that that generated. My bench looked like this, for real, and I probably looked just as frazzled.

Of course, I did not have coffee cups in the lab. One thing I wish I would have had, aside from more time in a day, was an easier way to enter my data. I wrote down my sample data on just some paper because I didn't want my laptop on the lab bench, and then I had to enter all this data in manually.

That took additional time on top of all these measurements, and of course, sometimes would introduce typos that would have to be dealt with later. What if you could make that last part at least a little bit easier?

What if you could add data using drop-down menus so you don't have to manually type out sample names and dates, et cetera, making the process quicker and avoiding typos? Let's do a thought experiment here. I probably had 10 to 15 samples a day.

If you could save 30 seconds for entering each data point, and I would do this, let's say, just 10 times a day, that would add up in a week to not a whole lot, maybe half an hour. But what if I did this for half a year? I would get back 10 hours of that time, and that could be spent on other things.

What if instead of saving 30 seconds, I could shave off more time, and I could shave off a whole minute, or even 2 minutes? You can see that the more you do something, the more repetitive it is, the longer that goes on; maybe a project where you're collecting data for every workday for a long time, you can make significant savings.

In some cases, you can get potentially weeks back. Now, doesn't that sound like something that we would all want? At the time, I didn't know how to write a dialog window in JMP. It would have been very helpful for sure.

Now, as a systems engineer at JMP, I don't generate a whole lot of data anymore. Still, I like to log data where I can. Now that I learned how to write dialogue windows, I'm going to use an example today for my own data, my new hobby of racing mountain bike races that I picked up this summer.

I started logging this data after my first few races because I thought it would be helpful to train a bit, and then I wanted to keep track of that. I have a very simple measurement system, just a watch. It gives me some basic data, but that data was enough to realize very quickly that I dislike adding all that data manually. So that's why I created an add-in, and that's what we're going to look at today.

The good news is that it's not as hard as it looks. If you are an occasional scripter or a beginner scripter, and you haven't cracked how to do this yet, in this talk, I'm going to break this down: how to make this add-in, how to make it doable, and without you having to spend hours trying to figure out how to script this.

Also, I will share a template script, so you have a starting place for your own add-in. Let me take a look at the final result. My script is on the left, and on the right, you can see that I have a menu add-in that pops up this window where I can just make selections of drop-down lists and just put some basic information in.

You see how easy that add-in makes it to add my latest bike data. In the rest of the talk, I will break down what you need to know to build a dialog window.

We're going to talk about the components of a dialog window, so the tools in our toolbox. We're going to talk about how to get input out of that dialog window and into a data table. We're going to talk about the structure of the script, then how to put it all together, and then how to package that as a menu option. In other words, as an add-in.

Let's look at a specific entry here in this window, location, and focus on that. For location, I want to make a drop-down list because I will have a finite number of locations, mostly the close-by trails and specific race locations. Most of these names are pretty long, and I don't want to be typing those all the time.

Let's look at this and how to do that and see what needs to happen to go from to first create something like this drop-down list and how to get information from this drop-down list, the selection, to the data table.

These are some of the tools that I have in my toolbox. I think of these boxes that are listed here as functional dialog window boxes. I've used all of these here in my add-in window.

For this example, we want to use a combo box. That's the bottom option here because that is used to show drop-down lists. There are other options that we'll see a little bit more of later on. We have text box for displaying text. We have text edit box for adding text or displaying text that can be edited. We have a number edit box doing the same for numbers, and then of course, that combo box.

All right, so combo box. We want to have a drop-down list. The first thing I have to do is to create the list with the drop-down options. There are actually two ways to do that.

First option is to write it out. Under option one, you see I'm creating a list which I named L_Loc, which is my abbreviation for list location. I'm just writing out all of these names here, each item between double quotation marks and everything encapsulated in those curly brackets. That's one way to do it, and I use that quite often.

You could also do it a different way. Actually, in my script, I'm doing option two. In option two, instead of having that list written out like this, I have a separate data table with just one column that's called location. In my script, I open that data table in the background. Then I get the values of that column, location, and assign it to a list.

That's what's happening here, where I use Get Values and then assign these values from that column to that list, and then I close that data table with that location, with that column of locations.

The nice thing about that is I can maintain that table with location separately. If I want to add more names to it, more location names, I can do that in that list and don't have to write it out all the time.

Okay, so we have options to create a list. Once we have a list, we can simply create a combo box and call that list with locations. That's what's happening here. I'm calling the combo box, and then the first variable in there is that list name. In this case, I made this list editable as well, so I could start typing in here as well.

Note that I gave this combo box a name or handle, in this case, CB for combo box and LOC, again, for location. You will see this throughout my talk that I try to name everything where I can figure out what it is, actually.

If you're new to JSL and to scripting, you will see that in scripting, you basically give everything a name, things like tables, the windows, boxes, and values. You name them in order to be able to do things with them later on. That's what we're doing here.

Now that we have a combo box and we have a list that the combo box can display, let's talk about what happens when we make a selection. Suppose I made the selection for the Minnesota River Bottoms Trail. I need to get that selection out of my box.

Here's how to do that. My combo box has a name. I can send a message to that combo box to get that selection and then give that selection a name. My combo box is called CBLOC. I can send CBLOC a message, Get Selected, and that value, Minnesota River Bottoms Trail, I will store under this name location value, LOCVAL.

Now I have a variable with that name that I selected, and I can simply add that as a new row to the appropriate column in the data table. Here's my data table, Bike Rides. I can add a row. Then here I'm calling the column Location and saying for that new row, that value has to be that location value that I selected in my combo box.

Here is all that visualized. We have a combo box. We have a combo box that has a list here. To get the selection from my combo box, I send it a message to get the selection. That selection gets a value, location value, and then I can push that to my data table to be added as a new row to the appropriate column.

Here you see, again, the JSL for each step. One thing to note is that depending on your functional box, the message to get the value from the functional box is different. For example, we're looking at a combo box, and for a combo box, we use Get Selected. If I had a text edit box, I would use Get Text. If I had a number edit box, I would use Get.

Here is what I just said, shown. In this case, we see a combo box for location, a number edit box for the date, so NEB is my abbreviation for that number edit box, and then a text edit box here at the bottom for hour, the hour value of the duration. Here in the middle, we can see that those messages are different depending on the type of box.

Now you also see why it's helpful to name your boxes where you can recognize what it is, because that makes it really easy to see, "Oh, I have a number edit box. Use Get. I have a text edit box. Use Get Text."

And then here in this last step, you see how I'm assigning this to a certain column. Here, these two statements here are just the part that would go in the middle. You see there's a little extra thing here for the duration. I like to use combo boxes sometimes for numbers, but because they are lists, they are character. That doesn't matter really when I get them out.

I do want them to be a number in my data table. Here I use a little formula to change that to a number in this step where I'm assigning them to a column.

Okay, so we talked about functional boxes here. One other type of box that I didn't mention yet and that's the button box. That's here at the bottom. We have one for OK and one for Cancel. We'll see those later on.

There are also other types of boxes, and those are helpful for laying out all those functional boxes. Here you see things like a vertical list box, a horizontal list box, panel boxes, lineup boxes, and spacer boxes. I use all of these in my window. I tried to mark out a few. Here, this white space here is a white spacer box.

My blue panels here are really two, actually three components in a vertical list box where I'm lining up vertically all of these columns that are coming up from a lineup box where we have one column here and one column here. It's lining up in this V list box.

We have this part lined up with a spacer box and these button boxes in a vertical way. Then here in red, we see a horizontal list box where I have three fields next to each other. These are the layout boxes.

Okay, so now that we know about the boxes and how naming is important, we can think about what we need for our data table that we're working on and that add-in.

Let me call that the master plan. Here's my master plan for this Bike Rides data table. Here's my data table, and I grayed out the columns that have formulas that I do not need in my add-in. All the white columns are ones that I want to have in my add-in window. I thought about how my add-in should look like, so here you can see that I visualized already.

Then what I do next is I just make a table and call out all the columns that I want to have in that add-in. I give the name for all of these values, so I have that listed, so I don't make mistakes later. I think about what dialog box type I need: is it a number edit box or text edit, or do I want to have a drop-down?

I have a column here with that dialog box name, and then if it's a combo box, I'm also already calling out a name or coming up with a name for that list. This way, when I'm writing my script, I have everything in one place. I can easily reference what needs to be called what, and it helps me also to stay organized in my script.

We talked about the components of a dialog window. We talked about how to get that input out of the dialog window and into the data table. Now, let's talk about the structure of the script a little bit.

There are three important parts. The first part is the pre-work. This is where we put things down, like the list for the drop-down options. Then we're going to create a template where we're already saying what we want to do, and then we're going to add that dialog window. Let me look at all three items in more details.

The first part, we can create those lists. Here's an example where I'm just writing down the list. They were very short, and I don't think they will change. That's really simple.

Let's look at the second part in our script, that template. I wrote down here that template. What we do here is we create an expression. Expressions can be a little bit confusing. Let's demystify what an expression is. An expression is really a template. If you think about doing a mail merge, maybe on your addresses for your Christmas cards or for emails or something, think about writing a letter, writing something, and then plugging in a name after.

Here we have "Hello, Name. Welcome to JMP." We don't know what the name is yet, yet we created the template already. So the template exists; the name will be filled in later. An expression is the same thing.

Here in JSL, we see that expression function. It has a name because we name everything in JSL. Here is that script, "Hello," then a variable, my name, "welcome to JMP," and that's my expression. So that is my template.

Later on, I can define that my name variable as Monique, and then I can do two things. I can either rerun that expression, and now, because my name has a name, it will just plop that in, or I can use a function to evaluate my expression, which would result in, "Hello Monique, welcome to JMP."

Okay, so that's really what an expression is. How is that going to look for this add-in script? In this expression, so here I'm starting the expression, I'm looking ahead, and I'm already saying, okay, I need to get values out of certain functional boxes. I had my big master table. I know what boxes I'm planning on creating, and I have those names.

I'm just saying, okay, if I have a number edit box for the date, I need to use Get as a message to get that value, and I'm going to call that. That's my date value, so that's now my name for that actual value. I can do the same thing for all of my columns. Here I have just four. You see I'm doing this four times. These are combo boxes. I have four values now.

In the second part of my expression, I'm creating an additional row in my data table, and I'm assigning each of these values to the appropriate column. So those are the two parts. I don't have the values yet because I haven't created the window and made selections or added data. I can create the template.

Some column names are special cases. Sometimes you have column names that have special characters, so then you have to name your column a little bit different. This is a column called Climb (ft).

To call those out here for that last step, you would use the colon, double quotation marks, followed by to enclose that name. Another thing you can do here is if you have a drop-down with numbers, and you want to create that numeric value, this is where you would put that in here under assign this value to a column.

This is where you can say, "First make this numeric before you assign this value to the single track percentage column." All right, let's look at a third special case here. Or no, I should say second.

In my expression, I can also do some other things. In my case, I actually have three fields for my duration. I have a text field for hour, one for minutes, and one for seconds. In my expression, I'm already concatenating these three values into one, calling it duration values. I just had to grab these three pieces. They don't exist yet, they will later. But I'm doing this in my expression as well, just to preempt what needs to happen later.

Okay, let's look at the third part now. Now that we have all of this in place, we can build the dialog window. You see, I'm using lots of these boxes that help me with the layout. Those V list boxes, panel boxes, spacer boxes, lineup boxes, and then I'm creating an actual number edit box here for a date and a combo box for our location. This is a very short version of my add-in, and it looks like this.

I have these two fields that I added, a text box to say what that field is, and then those actual functional boxes here, and then my button box just here at the bottom. We haven't talked about these yet, but this is where the magic happens.

My button box for OK is going to call that expression that I created in the second step. The button box Cancel will just close the window. So this is how I link my actual dialog window to that expression. The expression is going to run. Now that I popped up this window, I made all these choices. Once I'm ready, I click OK. Now that expression is going to run. It was already stored.

It's just going to replace all those variables with the selections and the values that I added. Here we're putting it all together. I added an additional step, and that is usually your script starts with opening a data table where you want to add the data to. We open a data table, we have our preamble with lists. Then we define our expression where we're saying get the user inputs, and then add these to these columns.

Then we build that dialog window here where we're calling on both the lists that are in the preamble here in step one and calling out that expression from step two.

In this process of creating this, as I mentioned, I just refer to my data table. That saves a lot of time and headache because that helps prevent you from making mistakes and calling the wrong thing.

Okay, so now that we have all of this together, let's look at how that comes together. Here is that script. How do we package this as an add-in? Under New, we can go to Add-in. We can add a name for that add-in. Here I'm saying I would call this Add Bike Rides.

There's a unique ID that the window wants, and there's a little prompt on what that should look like. Then under menu items, under Add Command, I can again give that a name that will appear in my menu. Then what I do is I just copy that entire script that I created and put it in that white space over there. Then you save it, and once you save it, it will appear in the menu under your Add-ins menu option.

That's all. Here is also a link to the JMP online help, which describes that in more detail and very clearly on how to do that. That is how to create your own add-in, what the components are, and how that structure of your script could look like.

I'm sure there are many other options, but this is one that I use all the time to create different add-ins to add data to different data tables. I will leave a template script for you as a starting place. Let me know if you have any comments. You can leave those here as well. Thanks for watching.

0 Comments
Presented At Discovery Summit 2026

Presenter

Skill level

Intermediate
  • Beginner
  • Intermediate
  • Advanced
Published on ‎07-16-2026 11:13 AM by Community Manager Community Manager | Updated on ‎10-30-2026 03:34 PM

Many of us would prefer to make rote tasks as efficient and speedy as possible, but sometimes you just can’t get around them. Manually entering new data to an existing data table is one of these tasks. If you find yourself entering new data by copy-pasting from previous cells and wishing there was just a drop-down for some of these values, look no further. In this session, discover a practical pattern for building your own click-to-log dialog in JSL that captures clean, consistent entries and appends them to your table.

Learn how to:

  • Identify the basic components of a dialog window in JMP.
  • Script date, numeric, text, and drop-down fields in JSL.
  • Validate inputs and append each submission as a new row in a data table.
  • Package the final script as an add-in and launch it from the menu.

This session is designed for beginner to intermediate JSL users who want to start building interactive dialogs in JMP. We show how to create a simple food log add-in as an example, but the approach generalizes to any quick data-entry task. Leave with a clear understanding of the parts of a JMP dialog and a template that you can adapt into your own click-to-log add-in.

 

 

Welcome to this talk on how to build your own data entry window for logging your data into JMP. In this presentation, you'll hear the JSL Dialog Windows Basics, the 101, and learn how to create your own add-in to log your data to your JMP data table. Before I was a systems engineer… You know what?

Sorry.

Redo. I just forgot a whole part to introduce myself.

No worries.

Welcome to this talk on how to build your own data entry window for logging data in JMP. In this presentation, you'll hear the JSL Dialog Windows Basics, the 101, and learn how to create your own add-in to log your data to your JMP data table. My name is Monique Roerdink Lander, and I'm a systems engineer at JMP.

Before I was a systems engineer, I worked for over a decade in research. I worked hands-on on product formulations, and that meant running lots and lots of tests and generating lots and lots of data. This picture, that was me at some time, for real. I was, at some point in my career, testing water samples left and right. It was for different sources, for two different measurement methods, both in duplicate, sometimes in triplicate, and twice a day.

I think I had decided we needed to do this for like four to 6 months or something like that. It was hard to keep up, both with the measuring and with entering all the data that that generated. My bench looked like this, for real, and I probably looked just as frazzled.

Of course, I did not have coffee cups in the lab. One thing I wish I would have had, aside from more time in a day, was an easier way to enter my data. I wrote down my sample data on just some paper because I didn't want my laptop on the lab bench, and then I had to enter all this data in manually.

That took additional time on top of all these measurements, and of course, sometimes would introduce typos that would have to be dealt with later. What if you could make that last part at least a little bit easier?

What if you could add data using drop-down menus so you don't have to manually type out sample names and dates, et cetera, making the process quicker and avoiding typos? Let's do a thought experiment here. I probably had 10 to 15 samples a day.

If you could save 30 seconds for entering each data point, and I would do this, let's say, just 10 times a day, that would add up in a week to not a whole lot, maybe half an hour. But what if I did this for half a year? I would get back 10 hours of that time, and that could be spent on other things.

What if instead of saving 30 seconds, I could shave off more time, and I could shave off a whole minute, or even 2 minutes? You can see that the more you do something, the more repetitive it is, the longer that goes on; maybe a project where you're collecting data for every workday for a long time, you can make significant savings.

In some cases, you can get potentially weeks back. Now, doesn't that sound like something that we would all want? At the time, I didn't know how to write a dialog window in JMP. It would have been very helpful for sure.

Now, as a systems engineer at JMP, I don't generate a whole lot of data anymore. Still, I like to log data where I can. Now that I learned how to write dialogue windows, I'm going to use an example today for my own data, my new hobby of racing mountain bike races that I picked up this summer.

I started logging this data after my first few races because I thought it would be helpful to train a bit, and then I wanted to keep track of that. I have a very simple measurement system, just a watch. It gives me some basic data, but that data was enough to realize very quickly that I dislike adding all that data manually. So that's why I created an add-in, and that's what we're going to look at today.

The good news is that it's not as hard as it looks. If you are an occasional scripter or a beginner scripter, and you haven't cracked how to do this yet, in this talk, I'm going to break this down: how to make this add-in, how to make it doable, and without you having to spend hours trying to figure out how to script this.

Also, I will share a template script, so you have a starting place for your own add-in. Let me take a look at the final result. My script is on the left, and on the right, you can see that I have a menu add-in that pops up this window where I can just make selections of drop-down lists and just put some basic information in.

You see how easy that add-in makes it to add my latest bike data. In the rest of the talk, I will break down what you need to know to build a dialog window.

We're going to talk about the components of a dialog window, so the tools in our toolbox. We're going to talk about how to get input out of that dialog window and into a data table. We're going to talk about the structure of the script, then how to put it all together, and then how to package that as a menu option. In other words, as an add-in.

Let's look at a specific entry here in this window, location, and focus on that. For location, I want to make a drop-down list because I will have a finite number of locations, mostly the close-by trails and specific race locations. Most of these names are pretty long, and I don't want to be typing those all the time.

Let's look at this and how to do that and see what needs to happen to go from to first create something like this drop-down list and how to get information from this drop-down list, the selection, to the data table.

These are some of the tools that I have in my toolbox. I think of these boxes that are listed here as functional dialog window boxes. I've used all of these here in my add-in window.

For this example, we want to use a combo box. That's the bottom option here because that is used to show drop-down lists. There are other options that we'll see a little bit more of later on. We have text box for displaying text. We have text edit box for adding text or displaying text that can be edited. We have a number edit box doing the same for numbers, and then of course, that combo box.

All right, so combo box. We want to have a drop-down list. The first thing I have to do is to create the list with the drop-down options. There are actually two ways to do that.

First option is to write it out. Under option one, you see I'm creating a list which I named L_Loc, which is my abbreviation for list location. I'm just writing out all of these names here, each item between double quotation marks and everything encapsulated in those curly brackets. That's one way to do it, and I use that quite often.

You could also do it a different way. Actually, in my script, I'm doing option two. In option two, instead of having that list written out like this, I have a separate data table with just one column that's called location. In my script, I open that data table in the background. Then I get the values of that column, location, and assign it to a list.

That's what's happening here, where I use Get Values and then assign these values from that column to that list, and then I close that data table with that location, with that column of locations.

The nice thing about that is I can maintain that table with location separately. If I want to add more names to it, more location names, I can do that in that list and don't have to write it out all the time.

Okay, so we have options to create a list. Once we have a list, we can simply create a combo box and call that list with locations. That's what's happening here. I'm calling the combo box, and then the first variable in there is that list name. In this case, I made this list editable as well, so I could start typing in here as well.

Note that I gave this combo box a name or handle, in this case, CB for combo box and LOC, again, for location. You will see this throughout my talk that I try to name everything where I can figure out what it is, actually.

If you're new to JSL and to scripting, you will see that in scripting, you basically give everything a name, things like tables, the windows, boxes, and values. You name them in order to be able to do things with them later on. That's what we're doing here.

Now that we have a combo box and we have a list that the combo box can display, let's talk about what happens when we make a selection. Suppose I made the selection for the Minnesota River Bottoms Trail. I need to get that selection out of my box.

Here's how to do that. My combo box has a name. I can send a message to that combo box to get that selection and then give that selection a name. My combo box is called CBLOC. I can send CBLOC a message, Get Selected, and that value, Minnesota River Bottoms Trail, I will store under this name location value, LOCVAL.

Now I have a variable with that name that I selected, and I can simply add that as a new row to the appropriate column in the data table. Here's my data table, Bike Rides. I can add a row. Then here I'm calling the column Location and saying for that new row, that value has to be that location value that I selected in my combo box.

Here is all that visualized. We have a combo box. We have a combo box that has a list here. To get the selection from my combo box, I send it a message to get the selection. That selection gets a value, location value, and then I can push that to my data table to be added as a new row to the appropriate column.

Here you see, again, the JSL for each step. One thing to note is that depending on your functional box, the message to get the value from the functional box is different. For example, we're looking at a combo box, and for a combo box, we use Get Selected. If I had a text edit box, I would use Get Text. If I had a number edit box, I would use Get.

Here is what I just said, shown. In this case, we see a combo box for location, a number edit box for the date, so NEB is my abbreviation for that number edit box, and then a text edit box here at the bottom for hour, the hour value of the duration. Here in the middle, we can see that those messages are different depending on the type of box.

Now you also see why it's helpful to name your boxes where you can recognize what it is, because that makes it really easy to see, "Oh, I have a number edit box. Use Get. I have a text edit box. Use Get Text."

And then here in this last step, you see how I'm assigning this to a certain column. Here, these two statements here are just the part that would go in the middle. You see there's a little extra thing here for the duration. I like to use combo boxes sometimes for numbers, but because they are lists, they are character. That doesn't matter really when I get them out.

I do want them to be a number in my data table. Here I use a little formula to change that to a number in this step where I'm assigning them to a column.

Okay, so we talked about functional boxes here. One other type of box that I didn't mention yet and that's the button box. That's here at the bottom. We have one for OK and one for Cancel. We'll see those later on.

There are also other types of boxes, and those are helpful for laying out all those functional boxes. Here you see things like a vertical list box, a horizontal list box, panel boxes, lineup boxes, and spacer boxes. I use all of these in my window. I tried to mark out a few. Here, this white space here is a white spacer box.

My blue panels here are really two, actually three components in a vertical list box where I'm lining up vertically all of these columns that are coming up from a lineup box where we have one column here and one column here. It's lining up in this V list box.

We have this part lined up with a spacer box and these button boxes in a vertical way. Then here in red, we see a horizontal list box where I have three fields next to each other. These are the layout boxes.

Okay, so now that we know about the boxes and how naming is important, we can think about what we need for our data table that we're working on and that add-in.

Let me call that the master plan. Here's my master plan for this Bike Rides data table. Here's my data table, and I grayed out the columns that have formulas that I do not need in my add-in. All the white columns are ones that I want to have in my add-in window. I thought about how my add-in should look like, so here you can see that I visualized already.

Then what I do next is I just make a table and call out all the columns that I want to have in that add-in. I give the name for all of these values, so I have that listed, so I don't make mistakes later. I think about what dialog box type I need: is it a number edit box or text edit, or do I want to have a drop-down?

I have a column here with that dialog box name, and then if it's a combo box, I'm also already calling out a name or coming up with a name for that list. This way, when I'm writing my script, I have everything in one place. I can easily reference what needs to be called what, and it helps me also to stay organized in my script.

We talked about the components of a dialog window. We talked about how to get that input out of the dialog window and into the data table. Now, let's talk about the structure of the script a little bit.

There are three important parts. The first part is the pre-work. This is where we put things down, like the list for the drop-down options. Then we're going to create a template where we're already saying what we want to do, and then we're going to add that dialog window. Let me look at all three items in more details.

The first part, we can create those lists. Here's an example where I'm just writing down the list. They were very short, and I don't think they will change. That's really simple.

Let's look at the second part in our script, that template. I wrote down here that template. What we do here is we create an expression. Expressions can be a little bit confusing. Let's demystify what an expression is. An expression is really a template. If you think about doing a mail merge, maybe on your addresses for your Christmas cards or for emails or something, think about writing a letter, writing something, and then plugging in a name after.

Here we have "Hello, Name. Welcome to JMP." We don't know what the name is yet, yet we created the template already. So the template exists; the name will be filled in later. An expression is the same thing.

Here in JSL, we see that expression function. It has a name because we name everything in JSL. Here is that script, "Hello," then a variable, my name, "welcome to JMP," and that's my expression. So that is my template.

Later on, I can define that my name variable as Monique, and then I can do two things. I can either rerun that expression, and now, because my name has a name, it will just plop that in, or I can use a function to evaluate my expression, which would result in, "Hello Monique, welcome to JMP."

Okay, so that's really what an expression is. How is that going to look for this add-in script? In this expression, so here I'm starting the expression, I'm looking ahead, and I'm already saying, okay, I need to get values out of certain functional boxes. I had my big master table. I know what boxes I'm planning on creating, and I have those names.

I'm just saying, okay, if I have a number edit box for the date, I need to use Get as a message to get that value, and I'm going to call that. That's my date value, so that's now my name for that actual value. I can do the same thing for all of my columns. Here I have just four. You see I'm doing this four times. These are combo boxes. I have four values now.

In the second part of my expression, I'm creating an additional row in my data table, and I'm assigning each of these values to the appropriate column. So those are the two parts. I don't have the values yet because I haven't created the window and made selections or added data. I can create the template.

Some column names are special cases. Sometimes you have column names that have special characters, so then you have to name your column a little bit different. This is a column called Climb (ft).

To call those out here for that last step, you would use the colon, double quotation marks, followed by to enclose that name. Another thing you can do here is if you have a drop-down with numbers, and you want to create that numeric value, this is where you would put that in here under assign this value to a column.

This is where you can say, "First make this numeric before you assign this value to the single track percentage column." All right, let's look at a third special case here. Or no, I should say second.

In my expression, I can also do some other things. In my case, I actually have three fields for my duration. I have a text field for hour, one for minutes, and one for seconds. In my expression, I'm already concatenating these three values into one, calling it duration values. I just had to grab these three pieces. They don't exist yet, they will later. But I'm doing this in my expression as well, just to preempt what needs to happen later.

Okay, let's look at the third part now. Now that we have all of this in place, we can build the dialog window. You see, I'm using lots of these boxes that help me with the layout. Those V list boxes, panel boxes, spacer boxes, lineup boxes, and then I'm creating an actual number edit box here for a date and a combo box for our location. This is a very short version of my add-in, and it looks like this.

I have these two fields that I added, a text box to say what that field is, and then those actual functional boxes here, and then my button box just here at the bottom. We haven't talked about these yet, but this is where the magic happens.

My button box for OK is going to call that expression that I created in the second step. The button box Cancel will just close the window. So this is how I link my actual dialog window to that expression. The expression is going to run. Now that I popped up this window, I made all these choices. Once I'm ready, I click OK. Now that expression is going to run. It was already stored.

It's just going to replace all those variables with the selections and the values that I added. Here we're putting it all together. I added an additional step, and that is usually your script starts with opening a data table where you want to add the data to. We open a data table, we have our preamble with lists. Then we define our expression where we're saying get the user inputs, and then add these to these columns.

Then we build that dialog window here where we're calling on both the lists that are in the preamble here in step one and calling out that expression from step two.

In this process of creating this, as I mentioned, I just refer to my data table. That saves a lot of time and headache because that helps prevent you from making mistakes and calling the wrong thing.

Okay, so now that we have all of this together, let's look at how that comes together. Here is that script. How do we package this as an add-in? Under New, we can go to Add-in. We can add a name for that add-in. Here I'm saying I would call this Add Bike Rides.

There's a unique ID that the window wants, and there's a little prompt on what that should look like. Then under menu items, under Add Command, I can again give that a name that will appear in my menu. Then what I do is I just copy that entire script that I created and put it in that white space over there. Then you save it, and once you save it, it will appear in the menu under your Add-ins menu option.

That's all. Here is also a link to the JMP online help, which describes that in more detail and very clearly on how to do that. That is how to create your own add-in, what the components are, and how that structure of your script could look like.

I'm sure there are many other options, but this is one that I use all the time to create different add-ins to add data to different data tables. I will leave a template script for you as a starting place. Let me know if you have any comments. You can leave those here as well. Thanks for watching.



Start:
Mon, Jun 1, 2026 09:00 AM EDT
End:
Mon, Jun 1, 2026 10:00 AM EDT
N/A
0 Kudos