It’s time to learn how to (and why) you can “flip” things around by putting RPG code inside SQL “things.” The how is easier than you might think, but the why will blow your mind!
The first question crossing your mind is probably “Why do this?” I’m sure that, after reading the last few TechTips of this series, you’ve realized how useful SQL in your RPG code can be, but it’s probably not so obvious why the opposite can be equally beneficial. There are a lot of reasons you’d want to do this, but arguably the most important has to do with the current IT landscape and that buzzword that’s constantly making the rounds in IBM i’s world: modernization.
When you started coding, your shop probably had one server, an AS/400 (or the same thing with some other name), that provided all the “IT” the business needed to run. Maybe I’m being overly dramatic here (after all, you’re not that old), but at some point in time, the AS/400 stopped being the only server in your datacenter. Today, this doesn’t even come close to the truth. The IBM i sits side-by-side with PCs and other servers running on a multitude of OSes, each tailored to a specific business need or specific task, ranging from web presence applications to environmental controls for the building or some other farfetched, futuristic task. Still, your core applications (I really hate the term legacy applications) probably remain the same: Your business rules, processes, and validations are built into your IBM i applications’ code. To use these rules and processes, do you want to have to “reinvent the wheel” by rewriting all the logic in a “modern” programming language, or do you prefer to make your existing RPG code available to the other systems?
A lot has been written about this topic—modernization—and I think I contributed to the discussion with a few ideas in the RPG Academy TechTip series (see here, here, and here, just to name a few examples). Keeping your business logic intact in RPG code (or simply modernizing that code to make it more maintainable by converting old RPG III to ILE RPG modular programs, for instance) should be an obvious choice, due to the learning curve of a new programming language and the cost of hiring new staff that knows the “modern” tools but doesn’t know your business. However, the problem is how to “open” RPG code to the outside world quickly and without too much of a fuss.
If you usually follow my RPG Academy TechTip series (which I hope you do), you already have half the answer: Break your OPM monoliths into smaller, modular pieces of code and use modern programming techniques (BIFs, functions, and embedded SQL, just to name a few) to make sure that a specific process can be isolated. For instance, an order entry can take multiple forms: screen input, batch loading via interface file, or even a business trigger that invokes a certain program. In the modern IT landscape, the screen input doesn’t necessarily mean an RPG program showing a display file; it can be a web page or a desktop application, for instance. Similarly, the batch loading via interface file can assume multiple formats, such as FTP transfers, web service calls, and so on. You’re taking steps toward the separation of the interface (screen, file, or trigger) from the actual process (business checks related to customer, item availability, billing, and so on) and the necessary I/O (writing and/or updating customer, order, inventory, and invoice records). The only thing missing is a simple vehicle to receive and send “messages” from your hard-earned RPG code and the origin of the requests.
The answer is sitting in front of you (or rather, sitting in your datacenter somewhere): the IBM i’s database. By packaging your RPG code in SQL Stored Procedures (SPs) and User-Defined Functions (UDFs), you can provide a very simple way for other systems to access your RPG code with only a few steps. The next few articles will help you understand SPs and UDFs and show you how to use them. As usual, I’ll provide the basics and try to keep things as simple as possible. It’s up to you to expand your knowledge and practice (and I really mean practice, practice a lot!) to get the most out of the possibilities made available by these techniques.