Scott,
Hope you can still comment on this. I went with the approach that you
suggested below and everything worked fine until ...
We have another application however that updates / writes to the file
with the associated trigger program. This application is separate from
our main system but does reference some of the files. This application
is build over a service program / activation group. I seem to be getting
an issue with the override I am setting in the trigger, specifically the
level that it is being set at (OVRDBF not being set then the DLTOVR
fails). I need this override to work for standard OPM RPG programs and
ones that run within the specific activation group. I know I can change
the OVRSCOPE to *ACTGRPDFN but I am not sure if this will cause me
further issues or if there is a better way. Alternatively I can also use
the error extension of the callp on the ovrdbf and dltovr. Any pointers
for me.
Thanks Stevie
Example code from trigger
Eval wCmd = %Trim('OVRDBF File(HSCTLL) ' +
'SHARE(*NO) Secure(*Yes) ' +
'OVRSCOPE(*CALLLVL) ')
CallP qCmdExc(wCmd : %Len(wCmd))
If not %Open(HSCTLL)
Open HSCTLL
Endif
Eval wCmd = %Trim('DLTOVR File(HSCTLL)')
CallP qCmdExc(wCmd : %Len(wCmd))
-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx
[mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of Scott Klement
Sent: 16 December 2008 22:48
To: RPG programming on the IBM i / System i
Subject: Re: Trigger program - open / close file question
Stephen,
IMHO, the SHARE(*YES) is the part you're doing wrong. I would suggest
that you revisit SHARE(*YES) and really give some thought as to whether
it should or should not be enabled. Personally, I never use it, as I
don't *WANT* all of my programs to share the same ODP! It totally
destroys any hope of encapsulation. Now you can't make a change to any
program that uses your CTRFILE without re-testing it in conjunction with
every single program that uses CTRFILE -- otherwise you run the risk of
breaking stuff.
Sure, SHARE(*YES) offered a minor performance improvement. One that was
useful in the 1980's, and perhaps is useful once in a very great while
in today's applications -- but that's the exception, not the rule! In
most cases it does more harm than good. Furthermore, the majority of
folks I've found using SHARE(*YES) don't even really understand what it
does, and are using it do to some false assumption (like "if I don't use
share(*yes) other people can't use the file" -- bzzzt WRONG!)
In a trigger program, in particular, I'd say never, ever, ever, use
SHARE(*YES). Think about it... the program that updates/writes a file
has to KNOW that it's open data path on one file might be modified by
accessing a completely different file??? YUCK. That's just horrible
coding, fraught with unseen errors that are hard to test for.
So, my recommendation is that you take a hard look at whether you need
SHARE(*YES), and try to eliminate it EVERYWHERE.
If you really can't do that, then I suggest forcing it to be turned off
in the trigger, using OVRDBF SHARE(*NO) SECURE(*YES) OVRSCOPE(*CALLLVL),
then OPEN, then DLTOVR. Delete the override immediately after the
OPEN to guarantee it doesn't affect anyone else.
Brown, Stephen GRNRC wrote:
Yep SHARE(*YES) defined on logicals on CTRFiles.
As an Amazon Associate we earn from qualifying purchases.