If you’re unfamiliar with it, Micros RES uses its own scripting language, called ISL (Integrated Scripting Language), to create what are called SIMs (System Interface Modules). Essentially, these SIMs are used to modify or add functionality; we use them to implement Gift Cards, and for our KDS (Kitchen Display System) solution.
The issue we have had is one of organization, which I suppose is typically an issue with a team that has a lot of turn over. When I came to this team, the core programmers were gone, and much of the work that had been done in the year or so leading up to it was done by non-programmers, in a very “cut and paste” manner, making things far more difficult to maintain and update (as we first had to sort through it to even understand it). We were also required to encrypt any SIM that had usernames or passwords in it, which is every SIM that requires a database call. So, we had a few dozen scripts, half of them encrypted, and the majority of them including the same logic. I believe in empowering people, and doing things clean, so this, for me, was a bit irritating.
My suggestion in the past was to consolidate as much of the logic as possible; to essentially create a library of common functions. But, no one on my team knew how that worked. Over the last year, I did some research and testing on my own to make it happen. Most recently, I was given the opportunity to put this in place and leverage it to rewrite my first script.
My Methodology
My goal with this library is two fold: I want to make it easy for someone to read SIMs built from it (using function names that make things obvious), and I want to make it simple for someone to use. Ideally, this will enable new members to dive into SIM (which is an odd language, and poorly documented), without having to reverse engineer things like I did.
I started with database calls; as I mentioned previously, all of our encrypted SIMs are encrypted because they use the database, and have a username/password in them. Not having to maintain 2 copies (an encrypted and unencrypted version) of each file is a huge benefit in itself.
From there I simply began adding functions to the library as I needed them for the most recent script. The changes to it involved adding Manager Authorizations, checking employees by job code, and checking the currently selected item by item group. What would have previously been 700+ lines of code was instead done with around 170, and didn’t require encryption. I applied the same to another of our less complex SIMs, and actually reduced a 700 line script to about 70. And now, a user can simply call MGR_ManagerAuth and get the entire manager auth process (from card swipe, to verification, to even logging via an option bit).
5 thoughts to “Creating a Library for Common Micros ISL Functions”
stumbled across your site and some impressive accomplishments — enjoyed the read. The LIB function is an interesting idea, for sure … good thinking!
Thanks! This project has certainly made supporting our systems easier (not having to encrypt all our ISL files).
Good idea. 2 queries:
(1) How do you call an ISL Function from another ISL file ?
(2) How do you encrypt an ISL? The documentation for Simphony says see chapter X and chapter X does not exist!
How do you call an ISL function from another ISL file ?
Apologies! I forget to check for new comments sometimes. If you use an include statement at the beginning of an ISL script to add another file in (kind of like C/C++ #include statements), you can then call any function in the included file as normal. It’s a simple “include xxx.isl” statement.
To encrypt ISL files, there’s a utility provided by Micros (islcrypt.exe). I’m not sure where one normally gets this; I have a copy from my employer.