21
Sat, Dec
3 New Articles

Practical RPG: Encapsulating Your Data with Extension Files, Part 2

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

Extension files future-proof your data, but you also have to future-proof your extension files!

In my previous article, I explained how to use extension files to encapsulate a legacy database. This allows you to add new data points to the database without the impact of changing an existing master file. This is important because changing a master file requires that you recompile every program with a file specification for that file, and that can be an expensive proposition. It may even be impossible if you're missing current source for any of those programs. But if you're not careful with your extension files, you'll wind up in a similar bind. I ran into exactly that situation with the customer extension file I talked about in the previous article. While it wasn't used as extensively as the customer master, it had begun to proliferate throughout the system to the point where adding or changing a field in that file had all the same difficulties as changing the original master file.

Future-Proofing Options

There are two basic ways to future-proof an extension file. The original method is to add a lot of unused fields that you can then use later. This works, sort of, but eventually it catches up to you. For example, you might decide to add a bunch of numeric values. How many do you add? Ten fields named ZZNUM1 through ZZNUM9? How big do you make them? You can make them all 31-digit fields with 15 decimal places, but then you can end up with a lot of extra code moving values between the database and your program variables. Alpha fields are even worse; do you add a bunch of single-character fields, a bunch of 10-character fields, and a bunch of 80-character fields? Inevitably, fields end up getting reused and overridden. Add the fact that these field names have no relation to their eventual use and it's just not a great solution.

The second method is better. Use SQL access! Make sure that every program that accesses the extension file uses SQL to do so. Once you've done that, changing the file becomes much easier. You can add new fields as needed with appropriate field names and attributes, and existing programs don't need to change. There are limitations to this approach, but nothing terribly difficult. The biggest issue is that you must explicitly define the columns you plan to use in your program. You can't just use the "SELECT *" syntax to read all the fields into a data structure. This in turn means that you must define individual work fields to receive the SQL variables.

exec sql select CXCNTY into :wCNTY from CUSEXT where CXCUST = :iCust;

This is roughly equivalent to:

chain (iCust) CUSMAS;

wCNTY = CMCNTY;  

And while the SELECT…INTO technique works well, you may prefer the newer SET syntax, which is much more like an EVAL:

exec sql set :wCNTY = (select CXCNTY from CUSEXT where CXCUST = :iCust);

This syntax isn't just more similar to high-level language; it also serves an important development purpose. Go into any SQL client (including STRSQL) and replace the "set :wCNTY =" with "VALUES" and replace the variable markers with specific literal values. Then you can test your statement directly:

values (select CXCNTY from CUSEXT where CXCUST = 9901128)

You will see the value of the CXCNTY field for the record whose customer number is 9901128. I find this makes it very easy to test my SQL before embedding it into the program. So, no matter how complex your SQL statement gets, you can test it directly in an interactive SQL client. That's really helpful during development or debugging.

Error Checking

One important issue when using SQL is error checking. A number of error-checking techniques exist, and the one you use depends on the situation. Here is a brief list of error techniques on SELECT (or SET) statements:

  1. Check the SQLCOD field (I wrote an article on SQLCOD and SQLSTT a long time ago).
  2. Add a null indicator; this will be set if the data is not found.
  3. Prefill a default value into the field and ignore any errors.

Testing the SQLCOD/SQLSTT fields is probably the most comprehensive technique, but it does require a bit of extra code and some knowledge of how the codes work. The null indicator is okay, but the syntax can get a little clunky, especially since the null indicator isn't actually an indicator, it's an integer field. Skipping the test entirely after prefilling the field is like executing a CHAIN without testing the indicator. Each has its place, and which you use depends on a combination of coding style and functional requirement.

Updating the Extension-File Data

So far, I've only talked about reading data from the file using SQL. I haven't discussed updating the file. That's because, in many cases, you may update the extension file using standard Record-Level Access (RLA) syntax. If you're unfamiliar with the term, RLA is simply the collective name that identifies the standard RPG I/O opcodes such as CHAIN and UPDATE.

Updates to an extension file are usually localized to a small number of programs. When you're first creating an extension file, it tends to consist of master file configuration such as processing flags or additional data points (like the county). Attributes like these are usually updated in the same program that maintains the primary master file record. In my case of the customer master extension file, the customer master maintenance program would update the extension file record. In most cases, I think it's acceptable to allow the maintenance program to access the extension file using traditional record-level access. The update is isolated to a single program, and when you're changing the layout of the customer master, even the extension file portion of it, you have to change that program anyway. So I don't worry about recompiling it; it will need to be recompiled anyway!

However, you may eventually have data in the extension file that must be updated by programs other than the maintenance program. These could be accumulators (total orders, for example) or process flags (customer currently locked for tax processing). Whatever the case may be, you need to update the file. That just means you'll need to use SQL syntax, such as this:

exec sql update CUSEXT set CXTXLK = 'Y' where CXCUST = :iCust;

That's the free-form syntax to set the tax lock field (CMTXLK) to Y for a specific customer. In my next installment, I'll go through a variety of syntactical examples. But as you can see, the code is minimal.

More to Come

We’ve covered the basics of how to future-proof your extension files. In a follow-up article, I'll go into more depth on not only the various syntaxes for these techniques, but also how this encapsulation then allows you to make changes any time you need to, without having to take your applications down. And that's the main purpose of the whole exercise!

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: