SAS® Management Console is by far my favourite SAS application. As a SAS platform administrator I like it because I can use it to administer much of the SAS 9 platform. I also like that I can use it to reach into, query and update SAS metadata in the SAS Metadata Server. My favourite interaction with SAS Management Console though is as a software developer and in this post I’ll explain why.
Way back in the mid 2000’s, when SAS 9.1.3 was the most recent version, I discovered SAS documentation for a SAS Management Console plug-in API and it spurred my imagination. Even with the best of applications there are always ways they can be improved, from one-off organization specific requirements to generic everyone-could-use-these features. The developers and designers of SAS Management Console, right from the early days with SAS 9.1, had planned for it to be extended with a documented API for adding custom functionality directly into the SAS application. I imagine this started from internal SAS requirements but I was very happy it made it into external documentation for us to use too. That was of course where Metacoda Plug-ins started. It’s amazing to think that I’ve been working with this application and it’s plug-in API for over 15 years.
What sort of things does the SAS Management Console plug-in API support?
The most obvious was you could add your custom components in the Plug-ins tab by creating a Navigation Plug-in.
This is where the bulk of our Metacoda Plug-ins work has been done. Some examples of things we have provided as Navigation add-ins to SAS Management Console include:
- An ACT Reviewer for investigating how Access Control Templates have been used to secure a SAS 9 platform
- An ACE Reviewer for quickly finding all of the Access Control Entries, or explicit permissions
- A User Reviewer for digging into SAS platform users
- Group and Role Reviewers to understand how SAS groups and roles have been setup, how members have been assigned, and what membership provides them
- A Capability Reviewer to readily find out who has been given access to SAS application features and by what means
- A Login Reviewer to see, at a glance, which users and groups have associated login ids in metadata and potentially stored passwords too
- An Internal Login Reviewer to quickly see who has special internal accounts
- An Auth Domain Reviewer to investigate how authentication domains have been used with servers, users/groups, and libraries
- A Library Reviewer for quickly assessing how SAS libraries have been setup in metadata
- Two Effective Permissions Explorers to quickly answer auditor-type questions “What does this person have access to?” and “Who has access to this thing?”
- A Permissions Tracer to review effective permissions for a user/object combination and understand what access controls are driving the outcome and why they have the access they do
- A Test Runner for running metadata security implementation tests and best practice tests
- Identity Sync for easy syncing of AD users and groups into SAS metadata
- An External Identity Manager to add, update, delete, and make bulk changes to external identity “links” between SAS users and groups and their corresponding Active Directory users and groups
- A Metadata Explorer to search for and view metadata objects (where you might have previously used metabrowse)
- A Public Types Explorer for looking at the various “public types” registered in metadata
- A Workspace Inspector where SAS administrators can launch SAS Workspace Server instances, run small SAS code snippets, and browse SAS libraries and tables to test that they are working as expected
The plug-ins API also supported the addition of menu items into the SAS Management Console Tools menu by creating a Tool Plug-in.
Some examples of things we have provided as Tools add-ins to SAS Management Console include:
- A tool for Comparing Metadata Objects like ACTS, users and groups to see what they have in common or how they differ
- A Password Encoder to provide a point and click interface to proc pwencode to encode/encrypt passwords using any of the available pwencode methods
The plug-ins API could also be used to create an Extension Plug-in to add custom menu items directly into the context menu when working on objects in some of the supplied standard SAS Management Console plug-ins. This had me very excited, as I could see so much potential for it, but I didn’t find it as useful as I hoped. I guess it was up to the individual SAS plug-in developers to add support for it and, unfortunately, the one plug-in I really hoped would support it, the SAS User Manager plug-in, did not. That would have been the icing-on-the-cake but I was still very happy with what I could do with what was available.
Another great benefit of having your custom code being hosted inside SAS Management Console was that you already had a working authenticated SAS metadata server connection available for use. There was no need to write any code to handle asking the user to pick an environment to connect to, make the connection to the associated SAS Metadata Server, and obtain and verify login credentials to get access. All of that work had already been done by SAS Management Console and you just had to use the ready-made connection.
There were other SAS applications that had plug-in or add-in APIs too, including SAS Data Integration Studio and SAS Enterprise Guide. I dabbled a bit with both of those but the SAS Management Console plug-in API was the one I found most useful. Maybe that’s my SAS administrator background.
Of course, another option would have been to build a standalone custom application, using the SAS Metadata APIs, instead of building plug-ins to drop into SAS Management Console. There would have been a few benefits to that but the contextual benefits of being inside the application that SAS administrators used all of the time far outweighed them. When you are already in SAS Management Console and you need access to custom functionality it is so much easier to just switch to another plug-in, select an item from a tools menu, or best-case right click over the target object and select a context menu option. Having the custom functionality right there is so much more productive and satisfying than having to launch another application, re-connect and re-authenticate to the same environment and then search for the thing you are already looking at in the original application. That is why, as a developer and a user, I admire applications like SAS Management Console where they planned for this type of integration from the beginning.
Now that the SAS 9 platform is slowly becoming a legacy platform in favor of the more modern SAS Viya, the use of SAS Management Console is likely to diminish over the next few years. The successor to SAS Management Console is SAS Environment Manager in SAS Viya. SAS Viya already has rich APIs for developing custom applications but I have not yet found the same level of plug-in type integration and customization in SAS Environment Manager as was available in SAS Management Console (if you know otherwise then please let me know). I do hope the SAS Viya APIs evolve to support developers creating plug-in type applications because the power and user friendliness of contextual custom functionality is amazingly useful. When looking at something in SAS Environment Manager, imagine being able to launch custom functionality to open another browser tab with your custom web application and, by virtue of passed contextual information, immediately getting your custom view of the same thing you were looking at in SAS Environment Manager. As a software developer, being able to continue to do similar things in SAS Environment Manager that we do with Metacoda Plug-ins in SAS Management Console would be wonderful.