× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



>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 thread ...

Follow-Ups:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

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.