|
>From: "Fisher, Don" <Dfisher@roomstoreeast.com> >Date: Thu, 21 Feb 2002 14:00:39 -0500 > >I think I know the answer to this but I'm hoping I'm wrong. > >There are programs here that update a field in a file to indicate the record >(and other associated records that do not have this field updated) is in use >by workstation. Trouble is, if the job is ended because of external factors >like the terminal being shut down or communications between the terminal and >the controller being terminated, we have to manually reset this field. > >I've experimented with the *PSSR subroutine but it apparently does not get >executed when a job ends abnormally. I also checked the RPG/400 reference >and users guide to no avail. > >Does anyone know how I can ensure the field in the file gets cleared when >the job is terminated or will I have to redesign the process? We are at >V4R1 and RPGIV is not an option here as the program must be compiled to >ignore decimal data errors (no, I had nothing to do with it but must now >maintain it). This could be done by a cancel handler. But you will have to add an RPG IV wrapper to your RPG III program. Just rename the RPG III program and call the RPG IV program what the RPG III program was called before. All the RPG IV program has to do is register the cancel handler and call through to the RPG III program passing on the *entry parms. The cancel handler can then call any program you like to actually do the clearing of the file. Here's an example. H dftactgrp(*no) D cancelHdlr pr D procptr s * procptr inz(%PADDR('CANCELHDLR')) * Entry parameters - the type doesn't matter, since this * program isn't going to use them C *entry plist C parm p1 1 C parm p2 1 C parm p3 1 * Register the cancel handler C callb 'CEERTX' C parm procptr C parm *OMIT C parm *OMIT * Call through to the RPG program C call 'YOURRPG2' C parm p1 C parm p2 C parm p3 * Make sure the cleanup is done C call 'CLEANUP' C parm 'NORMAL' type 10 C return * The cancel handler procedure P cancelHdlr b * Make sure the cleanup is done C call 'CLEANUP' C parm 'ABNORMAL' type 10 P cancelHdlr e To see this in action, create a program called 'YOURRPG2' like this: C *ENTRY PLIST C PARM P1 5 C PARM P2 10 C PARM P3 5 C 'RPG III' DSPLY P1 C RETRN and a program called 'CLEANUP' like this: C *ENTRY PLIST C PARM WHAT 10 C 'CLEANUP' DSPLY WHAT C RETRN Run the RPG IV program normally once, and then again, but this time, when the RPG III program is sitting at the 'RPG III' DSPLY, cancel the job from another session. You will see the 'ABNORMAL' DSPLY before the job actually ends. Barbara Morris
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.