26
Thu, Dec
0 New Articles

RPG Academy: Modules, Programs, and Service Programs

RPG
Typography
  • Smaller Small Medium Big Bigger
  • Default Helvetica Segoe Georgia Times

The first step of the journey from OPM to ILE is getting a grasp on the foundational concepts of ILE. This TechTip explains how the module, program, and service program concepts relate to OPM's program concept.

 

How do you create an OPM RPG program? You write your source, compile it with PDM's option 14, and (after you squashed all those annoying little bugs) you get a *PGM object. To create an ILE program, the steps are similar: you compile your source not into a program, but into a module, and then you create your program. But, if it's the same source, why the additional step of creating a module? Well, to explain that, we need to go back to the previous TechTip, to the part that mentions that two of the main advantages of ILE are modularity and reusability.

 

The typical OPM RPG program is an all-in-one block of code: it contains a group of subroutines to handle the screen (if the program has one), another group to handle the necessary validations, and, if things are really well organized, a subroutine or two to handle the database interactions. The problem is that some of that code probably exists in some other programeven if the program's purpose is different, the validations or the database interactions are probably the same or at least similar. Let me give you an example. Figure 1 shows a typical OPM scenario:

 

020714RafaelFigure1 

Figure 1: This OPM scenario shows two programs that have some duplicated code.

 

PGM A is used to enter items into the company's inventory automatically, using the cargo manifest of an inbound shipment. This is a fixed-format text file that contains all the relevant information for the inventory. PGM B is used to manage the inventory interactively; it allows the user to add, change, and remove items from the inventory. Both programs will have some code that is similar (sometimes, an exact copy of subroutines) to handle the business rules related with inventory management (group of subroutines depicted in green) and with the respective DB operations (group of subroutines depicted in yellow). If the programs' functionality is different, the two groups of subroutines won't be exactly the same, but they'll probably have a lot in common.

 

That's where ILE's modularity comes into play. By isolating those similar sets of code (hopefully, they're already self-contained in subroutines) into procedures (that's a concept that I'll detail in the third TechTip of this series; for the moment, think of them as subroutines with parameters) and grouping those procedures in modules, we can easily re-use the modules in different programs. The basic ILE approach to this inventory programs scenario is shown in Figure 2:

 

020714RafaelFigure2

Figure 2: This basic ILE scenario shows four modules, bound by copy to the two programs.

 

It would require creating four modules: one for each of the program flows (PGM A's loop through the cargo manifest file is Module M1, and PGM B's loop through user interaction is M2), one for all the business rules-related code (M3), and finally the last for the DB operations (M4). Note that the "Main Flow" modules (M1 and M2) only have the code that acts as the backbone of the programs, guiding their flow. Everything else, even if it was not duplicated, was isolated into procedures and placed in M3 or M4, depending on its nature. By doing this segregation, you assure that future programs related with inventory can re-use these blocks of code.

 

This re-usability likens RPG to more "modern" languages like Java or PHP. Then all you have to do is create the programs using the modules as building blocks, because *MODULE objects cannot be executed. Note that the modules can be built using one of the several ILE languages available: a *PGM object can be composed of RPG, C, C++, or COBOL modules, as long as the procedures contained in them are able to "talk" to one another.

 

What do we know so far? A *PGM object is composed of one or more *MODULE objects. Modules are not executable; programs are. How are programs and modules linked? Well, when you create a program, you need to indicate which modules are going to be part of that program and, of those modules, which will be the entry point, or the first to be executed, to get the program running. Going back to our inventory scenario, PGM A would have three modules (cargo manifest file flow, business validations, and DB operationsrespectively, M1, M3, and M4), and M1 would be the entry module. The same goes for PGM B, replacing M1 by M2. The problem here is that programs are created by copying the modules. This means that you'd be duplicating the business rules and DB operations modules. Note that you won't actually see this duplication; it happens on the *PGM object's creation, increasing each program's size. This approach also has another problem: any change to the business rules or DB operations modules would require all the programs that used them to be recreated! This doesn't seem very practical, right?

 

That's where the service program concept makes its appearance. A *SRVPGM object is another way to group *MODULE objects. It solves the two problems I mentioned before: by linking the modules to a service program instead of linking them directly to each of the programs and then linking the service program to PGM A and PGM B, you get the same functionality and code separation without the duplication of code and, up to a certain extent (I'll explain this "certain extent" on the next TechTip, I promise), you're also able to eliminate the need for program re-creation every time a line of code is changed on the modules, because the service program is not bound by copy, but by reference, to the programs. Figure 3 shows this scenario:

 

020714RafaelFigure3

Figure 3: Implement the same functionality with a service program.

 

Of course, changes to M1 or M2 will still require the programs to be recreated because those modules are still bound by copy to the respective programs. A service program is like a collection of runnable procedures, ready to be used in programs or other service programs. A service program, like the modules bound to it, cannot be executed. The great advantage here is, as long as you don't change certain characteristics of the service program, you are free to change the code of its modules without recreating all the programs that are bound to that service program. However, whenever you change a module that's bound to a service program, it's a good idea to recreate the service program, because even though it might not produce an error, it might lead to baffling decimal data errors and other strange errors that are difficult to trace on the programs that use that service program.

 

Let's finish with a quick summary of these concepts:

  • *MODULEContains one or more procedures; cannot be executed.
  • *PGMComposed of one or more modules; these modules can be built on different languages; *PGM objects can be executed; the simplest (and most similar to OPM) form of an ILE PGM is having just one module that contains all the necessary code for the program's functionality (possible, even though not advisable, because it doesn't take advantage of ILE's modularity and reusability).
  • *SRVPGMComposed of one or more modules; cannot be executed; allows modules to be reused without being duplicated in each program; a certain level of change to a module is possible without changing the programs that use the service program to which the module is bound; however, it's advisable to recreate the service program every time one of its modules is changed.

 

In the next RPG Academy TechTip, I'll explain how this "binding" between modules, service programs, and programs works and give you a quick tour of the commands to create each of these system objects.

BLOG COMMENTS POWERED BY DISQUS

LATEST COMMENTS

Support MC Press Online

$

Book Reviews

Resource Center

  • SB Profound WC 5536 Have you been wondering about Node.js? Our free Node.js Webinar Series takes you from total beginner to creating a fully-functional IBM i Node.js business application. You can find Part 1 here. In Part 2 of our free Node.js Webinar Series, Brian May teaches you the different tooling options available for writing code, debugging, and using Git for version control. Brian will briefly discuss the different tools available, and demonstrate his preferred setup for Node development on IBM i or any platform. Attend this webinar to learn:

  • SB Profound WP 5539More than ever, there is a demand for IT to deliver innovation. Your IBM i has been an essential part of your business operations for years. However, your organization may struggle to maintain the current system and implement new projects. The thousands of customers we've worked with and surveyed state that expectations regarding the digital footprint and vision of the company are not aligned with the current IT environment.

  • SB HelpSystems ROBOT Generic IBM announced the E1080 servers using the latest Power10 processor in September 2021. The most powerful processor from IBM to date, Power10 is designed to handle the demands of doing business in today’s high-tech atmosphere, including running cloud applications, supporting big data, and managing AI workloads. But what does Power10 mean for your data center? In this recorded webinar, IBMers Dan Sundt and Dylan Boday join IBM Power Champion Tom Huntington for a discussion on why Power10 technology is the right strategic investment if you run IBM i, AIX, or Linux. In this action-packed hour, Tom will share trends from the IBM i and AIX user communities while Dan and Dylan dive into the tech specs for key hardware, including:

  • Magic MarkTRY the one package that solves all your document design and printing challenges on all your platforms. Produce bar code labels, electronic forms, ad hoc reports, and RFID tags – without programming! MarkMagic is the only document design and print solution that combines report writing, WYSIWYG label and forms design, and conditional printing in one integrated product. Make sure your data survives when catastrophe hits. Request your trial now!  Request Now.

  • SB HelpSystems ROBOT GenericForms of ransomware has been around for over 30 years, and with more and more organizations suffering attacks each year, it continues to endure. What has made ransomware such a durable threat and what is the best way to combat it? In order to prevent ransomware, organizations must first understand how it works.

  • SB HelpSystems ROBOT GenericIT security is a top priority for businesses around the world, but most IBM i pros don’t know where to begin—and most cybersecurity experts don’t know IBM i. In this session, Robin Tatam explores the business impact of lax IBM i security, the top vulnerabilities putting IBM i at risk, and the steps you can take to protect your organization. If you’re looking to avoid unexpected downtime or corrupted data, you don’t want to miss this session.

  • SB HelpSystems ROBOT GenericCan you trust all of your users all of the time? A typical end user receives 16 malicious emails each month, but only 17 percent of these phishing campaigns are reported to IT. Once an attack is underway, most organizations won’t discover the breach until six months later. A staggering amount of damage can occur in that time. Despite these risks, 93 percent of organizations are leaving their IBM i systems vulnerable to cybercrime. In this on-demand webinar, IBM i security experts Robin Tatam and Sandi Moore will reveal:

  • FORTRA Disaster protection is vital to every business. Yet, it often consists of patched together procedures that are prone to error. From automatic backups to data encryption to media management, Robot automates the routine (yet often complex) tasks of iSeries backup and recovery, saving you time and money and making the process safer and more reliable. Automate your backups with the Robot Backup and Recovery Solution. Key features include:

  • FORTRAManaging messages on your IBM i can be more than a full-time job if you have to do it manually. Messages need a response and resources must be monitored—often over multiple systems and across platforms. How can you be sure you won’t miss important system events? Automate your message center with the Robot Message Management Solution. Key features include:

  • FORTRAThe thought of printing, distributing, and storing iSeries reports manually may reduce you to tears. Paper and labor costs associated with report generation can spiral out of control. Mountains of paper threaten to swamp your files. Robot automates report bursting, distribution, bundling, and archiving, and offers secure, selective online report viewing. Manage your reports with the Robot Report Management Solution. Key features include:

  • FORTRAFor over 30 years, Robot has been a leader in systems management for IBM i. With batch job creation and scheduling at its core, the Robot Job Scheduling Solution reduces the opportunity for human error and helps you maintain service levels, automating even the biggest, most complex runbooks. Manage your job schedule with the Robot Job Scheduling Solution. Key features include:

  • LANSA Business users want new applications now. Market and regulatory pressures require faster application updates and delivery into production. Your IBM i developers may be approaching retirement, and you see no sure way to fill their positions with experienced developers. In addition, you may be caught between maintaining your existing applications and the uncertainty of moving to something new.

  • LANSAWhen it comes to creating your business applications, there are hundreds of coding platforms and programming languages to choose from. These options range from very complex traditional programming languages to Low-Code platforms where sometimes no traditional coding experience is needed. Download our whitepaper, The Power of Writing Code in a Low-Code Solution, and:

  • LANSASupply Chain is becoming increasingly complex and unpredictable. From raw materials for manufacturing to food supply chains, the journey from source to production to delivery to consumers is marred with inefficiencies, manual processes, shortages, recalls, counterfeits, and scandals. In this webinar, we discuss how:

  • The MC Resource Centers bring you the widest selection of white papers, trial software, and on-demand webcasts for you to choose from. >> Review the list of White Papers, Trial Software or On-Demand Webcast at the MC Press Resource Center. >> Add the items to yru Cart and complet he checkout process and submit

  • Profound Logic Have you been wondering about Node.js? Our free Node.js Webinar Series takes you from total beginner to creating a fully-functional IBM i Node.js business application.

  • SB Profound WC 5536Join us for this hour-long webcast that will explore:

  • Fortra IT managers hoping to find new IBM i talent are discovering that the pool of experienced RPG programmers and operators or administrators with intimate knowledge of the operating system and the applications that run on it is small. This begs the question: How will you manage the platform that supports such a big part of your business? This guide offers strategies and software suggestions to help you plan IT staffing and resources and smooth the transition after your AS/400 talent retires. Read on to learn: