Avoid an Unnecessary CPYF Error
September 8, 2010 Ted Holt
Hey, IBM i Professional:
I’ve heard it said that it’s the little things that kill you. Maybe so. I am certain that little errors in computer programs can ruin a good night’s sleep. Today’s tip is an easy one that I’ve published before, but not in this newsletter. I’m running it today because an FHG reader recently told me that this simple, easily avoided error had occurred in the shop where she works. Everyone who writes CL programs needs to know this one.
The malfunctioning program had a Copy File (CPYF) command that looked like this:
CPYF FROMFILE(AAA) TOFILE(BBB) MBROPT(*REPLACE)
This command is an accident waiting to happen. A command like this might run perfectly for years, but one day something changes (maybe it’s a change to the way the organization does business), and the command fails. Everybody is shocked, amazed, and astounded that software that worked well for so long suddenly doesn’t work anymore.
The CPYF works fine as long as AAA is not empty. The contents of AAA replace BBB. But when the day finally comes that AAA contains no data, the CPYF command fails, sending two messages in the process:
Here are two simple ways to avoid this error:
1. Clear the receiving file and use MBROPT(*ADD).
CLRPFM FILE(BBB) CPYF FROMFILE(AAA) TOFILE(BBB) MBROPT(*ADD)
2. Monitor for the escape message and clear the receiving file.
CPYF FROMFILE(AAA) TOFILE(BBB) MBROPT(*REPLACE) MONMSG MSGID(CPF2817) EXEC(CLRPFM BBB) /* AAA IS EMPTY */
Both methods ensure that BBB looks just like AAA after the copy. Both methods ensure that this CPYF won’t get you out of bed at 3 a.m. if AAA turns up empty some day.
I should make one last comment. I assume that the programmer’s intention is to create a duplicate of a file. That is, if the From file is empty, then the To file should also end up empty.
But an empty From file may or may not be an error. For example, if the From file contains inventory adjustment transactions, and we didn’t have any inventory adjustments that day, then clearing the To file is appropriate.
But suppose the From file is the customer master file. If that file is empty, it may mean that someone accidentally cleared the file. The CL program needs to raise an alert. This tip is not applicable when the From file is not supposed to be empty.