ibm-midrangerpgle

Impact analysis of changed service program RPGLE


I have a Nomain *MODULE object to which I added a new procedure.

The *MODULE object is used to create a service program using a binder language source file which already exports a couple of other symbols (procedure names).

So question is, if I add a new procedure name, will the dependant programs need to be re-compiled?

Below is the binder language:

  ...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9
 *************** Beginning of data ********************************************************
 STRPGMEXP PGMLVL(*CURRENT) SIGNATURE('MAISV320111003')                                    
 /********************************************************************/                    
 /*   *MODULE      IPLMAI_PR3   IPLPGMD      11/10/03  16:03:18      */                    
 /********************************************************************/                    
   EXPORT SYMBOL("GETMAXAMENDDATETIMEFORMBRSHIPAGR")                                       
   EXPORT     SYMBOL("GETALLMBRSHPAGRBYUSGDATEANDTERRITORY")                               
   EXPORT     SYMBOL("GETMBRSHIPAGREEMENTBYIPCCLSOCRIGHTDATE")  --> newly added                           
 ENDPGMEXP                                                                                 
 ****************** End of data ***********************************************************

Would dependant objects (ones using GETMAXAMENDDATETIMEFORMBRSHIPAGR and GETALLMBRSHPAGRBYUSGDATEANDTERRITORY) need re-compilation ?

Edit: When I do a DSPSRVPGM SRVPGM(IPLPGMA/IPLMAI_SV3) DETAIL(*SIGNATURE) on the dev system, the value I see is the same as the value I see in production.. so I guess no re-compilation needed.


Solution

  • Current best practices...

    • Use Binder source to export specific procedures during CRTSRVPGM
    • Use a hardcoded unchanging signature unless you want to force recompiles
    • Add new procedures at the end of the binder source

    In order to not need to force a recompile of all callers

    • don't modify order of procedures in the binder source
    • don't add new parms to existing procedures without option(*NOPASS)
    • don't change the size, types, order of any procedure parameters.

    It seems you've followed the above, so you should be good.

    You could use *PRV and *CURRENT blocks (usually with a SIGNATURE(*GEN)), but it's extraneous noise that doesn't provide any additional value over the above.

    If you're new to ILE I highly recommend taking a look at Scott Klement's ILE Concepts (For the Impatient RPG Programmer).