cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Choose Language Hide Translation Bar
Add-In Manager

Description

Add-In Manager enables you to easily build and re-build Add-In files, manage versions of an add-in over time, directly access source files, and have extra customizations for your add-in. Now with version 2.0 of Add-In Manager, you can control your entire JSL application development life-cycle now that you can deploy your add-ins out to your users directly from Add-In Manager!

Quickly Build Add-Ins

The fundamental feature of Add-In Manager is the ability to build a JMP add-in file directly from source files. This feature was initially included in my Custom Add-In Builder add-in and Add-In Manager has taken the basics of that add-in and improved upon it.

Add-In Manager.PNG

Deploy an Add-In to Users

With version 2.0 of Add-In Manager, you can now deploy (or push) add-ins out to your users directly from Add-In Manager. You can deploy to a TEST location for your users to test out your add-in and you can also deploy to a PROD location.

 

Deployment.png

 

When deploying to PROD, a JSL script with an Associative Array is automatically updated with the latest publish date/time. This Associative Array can be used by an auto-generated 'updateCheck.jsl' script that can compare the build date of the user's add-in to the build date according to the Associative Array. If a newer version of the add-in is available, the user will see the following window, where they can choose to update to the latest version. This concept using an Associative Array to check for updates was adapted from @brady_brady's method of using a table with publish dates. This method is described in @Jeff_Perkinson's post How to write self-updating JMP add-ins.

 

Update Available.PNG

Manage Versions of an Add-In

Add-In Manager has the ability to automatically keep a version history of an add-in file each time a new one is built. It allows you to install, restore, or delete a previous version of an add-in. You can optionally include a comment for each build so you can keep track of what changes went into each version.

Archive.png

Making Extra Add-In Customizations

Add-In Manager allows you to make a few customizations to your add-in that previously required manual changes to XML. Below are the extra customizations available in Add-In Manager.

  • Max JMP Version
  • Built-in JMP Icons for menu items
  • Insert before position for specifying a position for a menu item
  • Custom menu bar – create your own menu or use an existing menu other than “Add-Ins”
  • New in Add-In Manager 2.0:  Multiple main menu's within a single add-in

Menu Items.png

Accessing Source Files Directly from JMP

On the Files tab within Add-In Manager, you can open files in your source folder directly from JMP by double-clicking on the desired file in the table.

Files.png

Automatic Management of Custom Metadata

With Add-In Manager version 2.0, you can create your own custom metadata in addition to the metadata automatically included and managed by Add-In Manager.

Custom Metadata.png

Managing Previously Installed Add-Ins

From the Installed tab, you can enable, disable, or register installed add-ins as well register add-ins that are not installed.

Installed.PNG

System Requirements

This add-in is supported on Windows and Mac operating systems with JMP 13 or higher.

Blog Series

Add-In Manager, Part 1: Defining and building a JMP add-In

Add-In Manager, Part 2: Deploying auto-updating add-ins to users

Add-In Manager, Part 3: Advanced customization

Changelog

Version 1.1-1.3 (October 16, 2017)

  • Fixed a few cases that caused the add-in to throw an error
  • Added new preferences for controlling whether menus and toolbars are shown

Version 2.0 (November 22, 2017)

  • Added support for deploying add-ins to TEST and PROD locations.
  • Added support for custom metadata via an Associative Array that can be included in your scripts.
  • Added ability to have multiple main menus in a single add-in.
  • Added ability to copy and paste menu items in the Menu Item Tree.
  • Added support for establishing a source folder from an existing 'jmpaddin' file. 
  • Added ability to check for a new version, pulled directly from the JMP Community.
  • Added preference to automatically install add-ins after being built.
  • Removed support for building multiple add-ins at a time, for various reasons.
  • Squashed other various bugs.

Version 2.1 (February 26, 2018)

  • Added preference to exclude invisible files and folders (i.e. files/folders that start with a period). This is useful if you're using a version control system, like Git.
  • The customMetadata.jsl file is now ignored when determining if you have the latest version installed. 

Version 2.2 (March 8, 2018)

  • Fixed an issue when adding more than two top-level main menus.
  • Added new icons to selection screen. Removed icons only available on one OS.

Version 2.3 (April 6, 2018)

  • Fixed error on Mac caused when a source folder was renamed or deleted
  • Preferences window now works even if you don't have the Consolas font installed on your computer.

Version 2.4 (January 9, 2020)

  • Allow inserting menu items either before or after other items, instead of only allowing inserting after.
  • Add 15 and 16 as min/max JMP version numbers.

Version 2.5 (February 5, 2020)

  • Improve readability when using macOS Dark Mode and Windows High Contrast mode in JMP 15.
  • Fix alert shown when opening preferences on Mac.

Version 2.6 (June 4, 2020)

  • Fixed bug with parsing add-ins with custom menus. 
  • Added diagnostic info for parsing errors to help with future issues.

Version 2.7 (June 10, 2020)

  • Add workaround for temporary bug in JMP 16 EA

Version 2.8 (September 24, 2020)

  • Fixed issue unzipping add-ins with subfolders
  • Added option to automatically create a folder when using an add-in template (on by default).

Version 2.9 (February 4, 2021)

  • Changed some date formatting to Locale formats
  • Fixed the check for update feature

Version 3.0 (January 18, 2022)

  • XML special characters (such as '&') should no longer break addin.jmpcust files.

Version 3.1 (March 4, 2022)

  • Fixed date format warning for some locales when archiving add-ins.

Version 3.2 (September 25, 2023)

  • Fixed custom top-level menus in JMP 17+

Let me know if you find any issues!

 

Current Version=3.2

2.9

Comments

@nathan-clark 

 

I'd like to roll out bug fixes, updates, and new features to my addin.  I think I found one of the problems. When I look at the customMetadata.jsl, the "state" is "DEV", not "PROD" as required by updateCheck.jsl.  This may sound silly, but I don't know how to get it to PROD without manually updating the jsl, which I hope to avoid.  For my addin, I've built, then deployed (PROD) and finally installed (PROD). I don't know what more I can do to change it with the addin manager.

After reading through the help doc for the addin, it doesn't seem like the method you're using to update your addin is listed.  When you say version control, do you mean a folder that not only contains the updated code, but also the updated customMetadata.jsl and other files that are generated with the addin manager?

 

Even more curiously, when I look in my PROD folder, in my Source folder, the publishedAddins.jsl does contain the addins I've been attempting to update. The Archive folder I have also has addins archived, but when I go to the addin menu of JMP and click on my addin, no message pops up that a new version of the addin is available. It's stuck at the first version I published.   I'm obviously misunderstanding multiple things about this entire process.

@StarfruitBob 

Deploying PROD is as easy as the drop down when you deploy the addin. You can build the addin, which puts it as DEV .. then you can deploy the addin as TEST or PROD which updates the custommetadata file for you.

the PROD deployment also will update the publishedaddins file... set up in the table when you set up your DEV, TEST, and PROD folder locations.

THe updatecheck script should use the addin date of the PROD, loaded, custommetadata file (local addin) and compare it to the publishedaddins file which will have the most current build date of the addin. If the most current build date of the addin is newer than the date of the installed addin, the user should be prompted to update.

I know my infrastructure required some additional work to make sure all the points lined up (file location access, etc), but i think the PROD depolyment may solve most of the issues for you. 

I think deploying to PROD is one of the problems as we both suspect.  I just tried to build another version of my addin and after building it, I noted that the customMetadata.jsl did indeed have "state" = "DEV", I then exited that window.  When I selected this new version of the addin from the main development window of the addin manager, then deployed it to PROD, customMetadata.jsl still stated that the addin was in DEV.

 

To test this more, I manually changed the state from DEV to PROD for the new version of the addin, saved, and then clicked on my addin from JMP's addin menu.  The addin didn't prompt me to update. This indicates to me there's something else I'm missing.

I checked my addin code to make sure the update checking section of code to add was out of date and using an old addin ID. I updated it and then check on customMetadata.jsl to see if any changes were made. state = DEV again, even though I deployed to PROD.  Okay..

New version test: updated unique ID and minor text, but easy to see in the addin. Made sure update checking section of code was inserted and updated to match unique addin ID. Built addin. Deployed to PROD. Metadata file still says deployed to DEV….

 

Recap:

  • Found some of my addin versions didn't have updated update checking code --> updated all versions to match unique ID of each addin
  • Found customMetadata.jsl is not being updated "state" = DEV --> PROD
  • Rebuilt, redeployed & reinstalled (to PROD) v1 of my addin
  • Rebuilt & redployed (to PROD) other versions of my addin
    • Manually set all customMetadata.jsl "state" = PROD
  • JMP doesn't recognize there are updates to this addin
  • PROD folder: Source, publishedAddins.jsl does record all of the versions I've deployed
  • PROD folder: Archive, multiple backups of addin due to all of the tests I've done

Hmmm....
It might be worth a fresh start with addin manager and update to fresh folders with no deployment vestiges.

Typically I click the Build button which creates everything in DEV ... then i can click the deploy button and click PROD and it will create the addin in my Production folder and the the metadat within the .jmpaddin says PROD as well as the publishedaddin file is updated with the builddate of that deployment.

Here's what I've done @nathan-clark @Justin_Chilton 

  • I've unregistered and removed all addins from the addin manager (that I was testing on)
  • Unregistered addin manager to remove it as an addin from JMP
  • Deleted all of my DEV and PROD files containing the addin tests I've been doing
  • Redownload addin manager & installed
  • Created new add-in
  • Built --> Deployed PROD --> Installed PROD
    • Have to have a 1st version to update!
  • Checked customMetadata.jsl of this v1 --> "state" = DEV

Any tips? 

@StarfruitBob 

Hmmm... I'm out of ideas. I'll have to pass it off to @Justin_Chilton 

hogi

@Justin_Chilton How does the Addin Manager store the settings?

Can I export them and send them to a colleague?

Is it save to install an updated version of Addin manger - or will this reset the settings?

ajniskan

@Justin_Chilton I'm a fan of the Add-In Manager! I've been building add-ins and menu structures with it for the past three years already. Recently, I've run into issues with JMP 17+ - in short: if I create a new blank add-in and a custom top-level menu in the add-in manager, then one or more submenus and click save, upon saving all the submenus disappear except the top-level menu item. This used to work flawlessly in JMP 14, 15 and 16. Is there something I'm doing wrong or a compatibility issue with JMP 17 - the log shows no errors.

 

I'm on AIM v3.1, Windows 10 Enterprise and JMP Pro 17.1.0

pauldeen

Same problem here

@ajniskan @pauldeen, please try out the latest v3.2 and let me know if that fixes this issue.

 

@hogi, the preference file for Add-in Manager is at these locations.

On Windows: 

%APPDATA%\SAS\JMP Add-In Manager\AM.PFS

On Mac: 

~/Library/Application Support/JMP Add-In Manager/AM.PFS
hogi

Thanks @Justin_Chilton for the file pathes - and for fixing the issue with V3.2

 

Are there plans to support Toolbars in a future release?

ajniskan

@Justin_Chilton thank you for the v3.2 - it resolved the issues I had & works as it used to

pauldeen

Thanks!

Hello @Justin_Chilton ,

 

Thank you a lot for your add-in which is life-saving !!!  However, I just have a question:

 

I have an add-in that I deploy and maintain at a customer site with dozens of users. This customer has the google suite, so I drop the new version each time on a google Drive, and the users have to retrieve this new version each time to update. We all agree that this is very time-consuming, not optimized and a source of errors if the user forgets. I'd seen you "Add-in Manager" add-in and I wanted to use it, but I have to specify a PROD folder to which all users must have access. Usually it's a shared folder... But I've asked IT and it's not possible to create a shared folder for all these users. The PROD folder must correspond to the web address of the google drive directory where I traditionally store versions. Is it possible to adapt Add-in manager to have a web address at the base of a shared folder?