×

Good News Everybody!

The new search engine is LIVE!

Please report any problems to david (at) midrange.com.




Isa,

The binding directory is only used at compile time.  It doesn't really matter 
how many entries are in it.

Note that when deciding between service program/modules modules are bound in at 
compile time whereas service programs are activated and bound during run-time.  
The activation requirement for service programs means there is a performance 
impact.  Nothing you usually need be concerned about.  But if you've got a 
program that uses 100s of files and thus 100s of service programs, you might 
see a difference.

In addition, while I normally have one file == one service program as I begin 
moving slowly toward externalizing I/O, you may want to consider sets of files 
in a single service program.  For instance, if a most programs that need FileA 
also need FileB, FileC, FileD, and FileE, then it might make sense to bind all 
five file modules into a single service program.  Concrete example would be an 
ORDERS service program made up of the ORDHDR, ORDDTL, and ORDNOTE file I/O 
modules

Make sense?

One thing I think is important to keep in mind when trying to externalize file 
I/O is that if the procedures are simply GetRecord() or GetField(), you not 
doing much for yourself except creating extra work.  Instead, you want to 
incorporate the business logic into the file I/O procedures.

For example:

/free
  CUSTOMER_OpenRecord(myCustNbr);
  if (CUSTOMER_GetStatus() <> 'A');
    // customer not active error
  endif;
/end-free

vs.

/free
  if CUSTOMER_IsActive(myCustNbr);
    // customer not active error
  endif;
/end-free


My rule of thumb is that the only reason to call a "Getter" procedure is to 
display the value on screen or print it on a report.  Similarly, for "Setters" 
you don't want something like this:

/free
  CUSTOMER_OpenRecord(myCustNbr);
  CUSTOMER_SetStatus('X');
  CUSTOMER_UpdateRecord();
/end-free

instead, try this:
/free
  CUSTOMER_Inactivate(myCustNbr);
/end-free

Note that CUSTOMER_SetStatus() should be being called by CUSTOMER_Inactivate();


HTH,




Charles Wilt
--
iSeries Systems Administrator / Developer
Mitsubishi Electric Automotive America
ph: 513-573-4343
fax: 513-398-1121
 

> -----Original Message-----
> From: rpg400-l-bounces@xxxxxxxxxxxx
> [mailto:rpg400-l-bounces@xxxxxxxxxxxx]On Behalf Of Wall, Isa (ED)
> Sent: Thursday, September 01, 2005 10:55 AM
> To: RPG programming on the AS400 / iSeries
> Subject: RE: Subprocedure Question
> 
> 
> Paul,
> 
> Thank you for your prompt response.  I have a question on performance.
> If I have all my modules in one binding directory would that affect
> performance?  I am picturing a program that only needs one 
> file and yet
> I have attached a binding directory with thousands of modules to the
> program.  Is that a problem?
> 
> I thought of separating the subprocedures to one module for each file
> and logicals.  The only benefit I can see is that my modules would be
> smaller, which will be a cleaner way of doing it.  Why would you do it
> that way?  I am open for suggestions...
> 
> Thanks,
> 
> Isa
> 
> 
> 
> -----Original Message-----
> From: rpg400-l-bounces@xxxxxxxxxxxx
> [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of Paul Morgan
> Sent: Thursday, September 01, 2005 10:33 AM
> To: rpg400-l@xxxxxxxxxxxx
> Subject: Re: Subprocedure Question
> 
> Isa,
> 
> You could create a module for each file with every module 
> listed in the
> binding directory.  You could also create a service program 
> using those
> modules with every service program in the binding directory.  
> Either way
> something is going to have to be listed in the binding directory.  You
> will
> end up with a binding directory with thousands of modules just as you
> have
> thousands of files.
> 
> If you use service programs you will be sharing that file between
> programs.
> The file would be opened once in the service program.  If two programs
> use
> that file (service program) but one program calls the other program.
> The
> second program called from the first could do something with the file
> (SETLL, READ, CLOSE) that interferes with the first program.
> 
> With modules a copy of the module gets created in each program.  Two
> programs that use that file would each get a copy of the 
> module.  In the
> same example above the second program wouldn't intefer with the first
> program as the file would be opened twice.
> 
> Sometimes sharing a file between programs is desirable.  
> Maybe the file
> is a
> code file that only has random retrieval (chain) of records.  In that
> case
> use a service program otherwise stick with modules.
> 
> Have you considered making separate modules for the logical files
> instead of
> including them in the same module with the physical file?  
> You'd have a
> module for the physical file and one module for each logical file.
> 
> Paul
> 
> -- 
> Paul Morgan
> Senior Programmer Analyst - Retail
> J. Jill Group
> 100 Birch Pond Drive, PO Box 2009
> Tilton, NH 03276-2009
> Phone: (603) 266-2117
> Fax:   (603) 266-2333
> 
> Isa wrote
> 
> I would like to ask your option on the following subject.  I 
> am planning
> on implementing subprocedures for all file actions.  For 
> example, if you
> want to read, setll, open, update or write a record to a file 
> you would
> call a subprocedure.  I am planning on creating a module for 
> each file.
> Inside each module I would create all subprocedures related 
> to that file
> and logicals.  My question is the next step which I don't know what is
> my best action.  I now have a module for each file do I 
> create a binding
> directory for all the modules.  To me this does not make sense as we
> have thousands of file in our system.  So do I create a 
> service program
> for each module and at compile time bind them as I need them? 
>  Is there
> another way I can do this?  What is the best to handle this?
> 
> 
> 
> -- 
> This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing
> list
> To post a message email: RPG400-L@xxxxxxxxxxxx
> To subscribe, unsubscribe, or change list options,
> visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
> or email: RPG400-L-request@xxxxxxxxxxxx
> Before posting, please take a moment to review the archives
> at http://archive.midrange.com/rpg400-l.
> 
> 
> -- 
> This is the RPG programming on the AS400 / iSeries (RPG400-L) 
> mailing list
> To post a message email: RPG400-L@xxxxxxxxxxxx
> To subscribe, unsubscribe, or change list options,
> visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
> or email: RPG400-L-request@xxxxxxxxxxxx
> Before posting, please take a moment to review the archives
> at http://archive.midrange.com/rpg400-l.
> 
> 


This thread ...


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

This mailing list archive is Copyright 1997-2026 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.