Re: [U2] Good Programming Practice Question.........

2005-10-02 Thread Timothy Snyder
Mark Johnson [EMAIL PROTECTED] wrote on 10/01/2005 01:00:33 
AM:

 Files that can't open are usually solved pretty quickly either after
 installing the software or making the changes. The downstream elaborate
 errmsgs for
 
 OPEN CUSTOMER TO F.CUSTOMER ELSE PRINT CANNOT OPEN THE CUSTOMER FILE.
 PLEASE CONTACT YOUR PROGRAMMER. PROGRAM TERMINATING ; STOP
 OPEN INVENTORY TO F.INVENTORY ELSE PRINT CANNOT OPEN THE INVENTORY 
FILE.
 PLEASE CONTACT YOUR PROGRAMMER. PROGRAM TERMINATING ; STOP
 
 or whatever the verbose message/mechanism is, is just an exercise in 
typing.
 99.44% of the time the ELSE clause is not realized.

So because it's not likely that an open will fail, it's not worth 
programming for?  Can you guarantee that the files will never be placed on 
a network or external device that could fail?  Or that the file could be 
deleted or otherwise rendered unusable?  I realize that 99.44% is a 
reference to an old Ivory Soap ad, but imagine 56 opens out of 10,000 
failing - that would certainly be worth coding for.  Even if there's one 
chance in a million that an open will fail, that's worth coding for.  I 
cringe when I see OPEN ... ELSE STOP 201, 'WIDGET'.  (I've also even seen 
it with just STOP, without even referencing the file name.)  That means 
the poor user will be placed at the command prompt with no idea of what to 
do.  (And, noting that you advocate doing OPENs in external subroutines, 
that could leave transactions partially committed.  Even if performance 
isn't a concern for you, this should be enough justification to avoid that 
practice.)

I worked with a customer once that had just installed UniData with RFS. 
Everything went well through months of development and testing.  Then, on 
the first day running live, OPEN statements started hitting their ELSE 
clauses.  It turned out that the N_AFT parameter hadn't been set high 
enough.  For those not familiar with RFS, suffice it to say that there 
wasn't enough space in a table that maintains open recoverable files, 
causing the opens to fail.  Fortunately, that customer had some 
intelligence built into their open routines, which logged the problems and 
got the users out fairly gently.

One strategy that I like is to have the ELSE clause add the file name to a 
list.  Then after all of the opens have been attempted, see if the list is 
empty - if not, report on the files that couldn't be opened, log them 
somewhere, and get the user back to a safe point such as a menu.  It may 
require a bit of typing, but those few keystrokes seem well worth the 
effort.


Tim Snyder
Consulting I/T Specialist , U2 Professional Services
North American Lab Services
DB2 Information Management, IBM Software Group
717-545-6403
[EMAIL PROTECTED]
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/


Re: [U2] Good Programming Practice Question.........

2005-10-02 Thread Mark Johnson
I use a subroutine called OPENER that spares me (any anyone else who uses
it) all of the verbose typing that is so cluttering in every program.

I'm not ignoring the ELSE clause. I'm just referencing the vast amount of
coding for such a small percentage of it being needed.

My OPENER is as follows:

SUBROUTINE OPENER(FILENAME, FILEHANDLE)
OPEN FILENAME TO FILEHANDLE ELSE
Do whatever you want in the world for an ELSE.
Notify the user.
Log the transgression.
Chain back to the menu.
STOP 201, FILENAME
Logoff
I don't really care.
END
RETURN

Just put all of the 'war  peace' stuff once, I repeat *ONCE* in the sub
instead of in the thousands of OPEN statements in the thousands of
application programs.

I'm was not suggesting OPEN FILE ELSE STOP blindly. Just spare yourself from
all the typing and me from all the reading 10 years from now when I get to
the program.

The only time I don't use OPENER is if I want to manage the ELSE condition
such as creating new files on the fly or processing something for the first
time the file is missing. That's the 56/100 % I was referring to. The 99 
44/100's of the time it's just a regular OPEN. I also did mention its value
when first installing on a new environment.

Yes, it also works as CALL OPENER(DICT CUSTOMER, D.CUSTOMER) and with all
the D3 comma'd files. I wouldn't have offered it (nor would have Spectrum
printed an article about it) if it wasn't universally helpful.

Thanks
Mark Johnson

- Original Message -
From: Timothy Snyder [EMAIL PROTECTED]
To: u2-users@listserver.u2ug.org
Sent: Sunday, October 02, 2005 4:59 AM
Subject: Re: [U2] Good Programming Practice Question.


 Mark Johnson [EMAIL PROTECTED] wrote on 10/01/2005 01:00:33
 AM:

  Files that can't open are usually solved pretty quickly either after
  installing the software or making the changes. The downstream elaborate
  errmsgs for
 
  OPEN CUSTOMER TO F.CUSTOMER ELSE PRINT CANNOT OPEN THE CUSTOMER FILE.
  PLEASE CONTACT YOUR PROGRAMMER. PROGRAM TERMINATING ; STOP
  OPEN INVENTORY TO F.INVENTORY ELSE PRINT CANNOT OPEN THE INVENTORY
 FILE.
  PLEASE CONTACT YOUR PROGRAMMER. PROGRAM TERMINATING ; STOP
 
  or whatever the verbose message/mechanism is, is just an exercise in
 typing.
  99.44% of the time the ELSE clause is not realized.

 So because it's not likely that an open will fail, it's not worth
 programming for?  Can you guarantee that the files will never be placed on
 a network or external device that could fail?  Or that the file could be
 deleted or otherwise rendered unusable?  I realize that 99.44% is a
 reference to an old Ivory Soap ad, but imagine 56 opens out of 10,000
 failing - that would certainly be worth coding for.  Even if there's one
 chance in a million that an open will fail, that's worth coding for.  I
 cringe when I see OPEN ... ELSE STOP 201, 'WIDGET'.  (I've also even seen
 it with just STOP, without even referencing the file name.)  That means
 the poor user will be placed at the command prompt with no idea of what to
 do.  (And, noting that you advocate doing OPENs in external subroutines,
 that could leave transactions partially committed.  Even if performance
 isn't a concern for you, this should be enough justification to avoid that
 practice.)

 I worked with a customer once that had just installed UniData with RFS.
 Everything went well through months of development and testing.  Then, on
 the first day running live, OPEN statements started hitting their ELSE
 clauses.  It turned out that the N_AFT parameter hadn't been set high
 enough.  For those not familiar with RFS, suffice it to say that there
 wasn't enough space in a table that maintains open recoverable files,
 causing the opens to fail.  Fortunately, that customer had some
 intelligence built into their open routines, which logged the problems and
 got the users out fairly gently.

 One strategy that I like is to have the ELSE clause add the file name to a
 list.  Then after all of the opens have been attempted, see if the list is
 empty - if not, report on the files that couldn't be opened, log them
 somewhere, and get the user back to a safe point such as a menu.  It may
 require a bit of typing, but those few keystrokes seem well worth the
 effort.


 Tim Snyder
 Consulting I/T Specialist , U2 Professional Services
 North American Lab Services
 DB2 Information Management, IBM Software Group
 717-545-6403
 [EMAIL PROTECTED]
 ---
 u2-users mailing list
 u2-users@listserver.u2ug.org
 To unsubscribe please visit http://listserver.u2ug.org/
---
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/