Re: RPG Service Program vs Include Source for Shared Subprocedures and SQL Calls
Infodorado InfoDorado via RPG400-L <[email protected]> Tue, 24 Mar 2026 08:04:39 -0400 (EDT)
| Newsgroups | gmane.comp.lang.as400.rpg |
|---|---|
| Message-ID | <[email protected]> |
I have found myself spending a lot of time searching for variables that "sneak into" a program upon compilng. You can say "Big deal", and I have, but also, getting a lot more lines than you bargained for sometimes, like when you /COPY the SDS fields or other such. I prefer using subprocedures or other methods for using such entities. All your fields and variables "front and center". --Alan Cassidy > On 03/23/2026 5:29 PM EDT Marco Facchinetti <[email protected]> wrote: > > > Thanks Charles, I know many consider the use of global variables to be > wrong, and indeed, in a service program, this is absolutely true. But when > it comes to programs, especially those types of programs, I find that using > copy members makes general maintenance much easier. > > Thanks for your time. > > Best regards > -- > Marco Facchinetti > > Mr S.r.l. > > Tel. 035 962885 > Cel. 393 9620498 > > Skype: facchinettimarco > > > Il giorno lun 23 mar 2026 alle ore 15:27 Charles Wilt < > [email protected]> ha scritto: > > > I suspect procedure pointers could help with your use case, but would > > likely be a significant refactor. > > > > If nothing else, you'd need to remove the use of global variables from your > > procedures. IMPORT / EXPORT exists, but you generally want to stay away > > from them. > > > > Just to give you an idea..I've got a set of applications. Most of the work > > is done in a *SRVPGM. The individual program objects contain the > > procedures with unique functionality. So each *PGM object has a small > > mainline that sets up various variables and calls into the main *SRVPGM > > procedure passing along the needed PROCPTRs to provide the service program > > access to the needed unique functionality. > > > > HTH, > > Charles > > > > On Sat, Mar 21, 2026 at 8:20 AM Marco Facchinetti < > > [email protected]> wrote: > > > > > Most of the time the correct solution is *Srvpgm, but there are rare > > > exceptions where it may be preferable to use the copy version. > > > > > > An example in (our) real life is the invoice printing program: since we > > > serve multiple customers and each has a specific version that shares 90% > > of > > > the code with the others, the use of copies solved the problem of > > > maintaining a common structure and having specific functionality. > > > > > > Each shared routine or function contained in the copied members makes one > > > or more calls to custom routines/functions at fixed points (start, body, > > > and end). The return code of these calls determines whether or not to > > > execute the corresponding code in the standard function. This allows > > custom > > > code to replace or supplement the shared code. > > > > > > I haven't found a simple way to do this using service programs, > > especially > > > since functions and routines in copied members make perfectly legitimate > > > use of the main program's "global" variables. > > > > > > The problem with this kind of management where 90% of the code of a > > program > > > is not in the main source is that RDi cannot handle it, this is the > > reason > > > why I uploaded this idea: > > > > > > https://ideas.ibm.com/ideas/IBMI-I-4740 > > > > > > Best regards > > > -- > > > Marco Facchinetti > > > > > > Mr S.r.l. > > > > > > Tel. 035 962885 > > > Cel. 393 9620498 > > > > > > Skype: facchinettimarco > > > > > > > > > Il giorno ven 20 mar 2026 alle ore 22:13 Richard Schoen < > > > [email protected]> ha scritto: > > > > > > > Hi All, > > > > > > > > In the Python, Java and .Net world I usually create Python classes, jar > > > > files or DLLs to contain shared functionality. > > > > > > > > Because most IBMi shops have an interesting mix of RPG code bases I'm > > > > trying to determine whether I should create a service program or use > > > > includes for shared functionality at a customer site. > > > > > > > > With service programs, write once, bind and use everywhere. > > > > > > > > With copy books, just include on-the-fly. > > > > > > > > In the past I've leaned towards copybooks, but I'm curious what others > > > > think. I'm a little cautious of burying SQL functionality into one or > > > more > > > > service programs. > > > > > > > > Real-world thoughts appreciated. > > > > > > > > Thanks > > > > > > > > Regards, > > > > Richard Schoen > > > > Web: http://www.richardschoen.net > > > > Email: [email protected]<mailto:[email protected]> > > > > > > > > -- > > > > This is the RPG programming on IBM i (RPG400-L) mailing list > > > > To post a message email: [email protected] > > > > To subscribe, unsubscribe, or change list options, > > > > visit: https://lists.midrange.com/mailman/listinfo/rpg400-l > > > > or email: [email protected] > > > > Before posting, please take a moment to review the archives > > > > at https://archive.midrange.com/rpg400-l. > > > > > > > > Please contact [email protected] for any subscription > > related > > > > questions. > > > > > > > > > > > -- > > > This is the RPG programming on IBM i (RPG400-L) mailing list > > > To post a message email: [email protected] > > > To subscribe, unsubscribe, or change list options, > > > visit: https://lists.midrange.com/mailman/listinfo/rpg400-l > > > or email: [email protected] > > > Before posting, please take a moment to review the archives > > > at https://archive.midrange.com/rpg400-l. > > > > > > Please contact [email protected] for any subscription related > > > questions. > > > > > > > > -- > > This is the RPG programming on IBM i (RPG400-L) mailing list > > To post a message email: [email protected] > > To subscribe, unsubscribe, or change list options, > > visit: https://lists.midrange.com/mailman/listinfo/rpg400-l > > or email: [email protected] > > Before posting, please take a moment to review the archives > > at https://archive.midrange.com/rpg400-l. > > > > Please contact [email protected] for any subscription related > > questions. > > > > > -- > This is the RPG programming on IBM i (RPG400-L) mailing list > To post a message email: [email protected] > To subscribe, unsubscribe, or change list options, > visit: https://lists.midrange.com/mailman/listinfo/rpg400-l > or email: [email protected] > Before posting, please take a moment to review the archives > at https://archive.midrange.com/rpg400-l. > > Please contact [email protected] for any subscription related questions. -- This is the RPG programming on IBM i (RPG400-L) mailing list To post a message email: [email protected] To subscribe, unsubscribe, or change list options, visit: https://lists.midrange.com/mailman/listinfo/rpg400-l or email: [email protected] Before posting, please take a moment to review the archives at https://archive.midrange.com/rpg400-l. Please contact [email protected] for any subscription related questions.