On the last part of that code, I just included the top of the program that handles the trigger related stuff, and cut off all the business logic and the *INZSR. Off list it was correctly pointed out that it looked incomplete and that a complete example would have been clearer. https://code.midrange.com/11577eaffa.html is a complete skeleton of a handler. If you replace MPAT with a file on your system, this example will compile, and when you get to the "Do all your work right here." portion of the code, then you will have a before and after image of the file in the two data structures. This is from an after update trigger FYI. All of this code predates me at this shop, and was first put in place back in the 90's. I remember reading about using this method back then, and most of this was based right of a magazine article (remember when we used to actually get those in the mail?)

https://www.mcpressonline.com/programming/rpg/techtip-changing-triggers-on-a-busy-system


And make sure you look at Alan's program. It is a full system based on this concept. http://www.think400.dk/downloads.htm




Kevin Bucknum
Senior Programmer Analyst
MEDDATA/MEDTRON
Tel: 985-893-2550

-----Original Message-----
From: RPG400-L [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of
Kevin Bucknum
Sent: Tuesday, February 27, 2018 8:01 AM
To: RPG programming on the IBM i (AS/400 and iSeries)
Subject: RE: Trigger-happy

No problem. https://code.midrange.com/56a6d66a6d.html is extracted
code. Very OLD code! I know it's ugly and needs a rewrite, but getting
something that ain't broke changed is hell.

Top is what is assigned as the trigger. It reads the routing file just by library
and file name. If it finds a match for the event and timing that fired the
trigger, with a blank delete code, it calls the program. The next part is the
trigger buffer that gets copied into all trigger handlers, as well as this routing
program.

Lastly is an old retired after update program. It gets the trigger buffer passed
in. It overlays the before and after buffers with a data structure that looks
like the file, and then we can start with our logic.

UISOURCE is a field in all of our files. It tracks if the update came via the green
screen, web front end, or an interface. No journaling here yet, so that was
put in to help run down source of data issues.




Kevin Bucknum
Senior Programmer Analyst
MEDDATA/MEDTRON
Tel: 985-893-2550

-----Original Message-----
From: RPG400-L [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of
Craig Richards
Sent: Tuesday, February 27, 2018 7:47 AM
To: RPG programming on the IBM i (AS/400 and iSeries)
Subject: Re: Trigger-happy

I'll try it and find out.

So to be clear -

When your GENERIC program gets called does it try to find a match on
the file for

File / Library / TriggerTime / TriggerEvent

That looks to me like how it would work?

Sorry for the 20 questions :-)
Craig

On 27 February 2018 at 13:44, Craig Richards <craig@xxxxxxxxxxxxxxxx>
wrote:

This simple solution looks very promising.

I'm wondering a couple of things though:

- Is the Delete Code used by your program to identify triggers no
longer used or active?
- If the generic trigger program is going to call different programs
for different events/times should they be included in the index on the
file
( are they on another index or do I misunderstand? )
- Is the UISOURCE something specific to your system?

thanks,
Craig

On 27 February 2018 at 13:40, Vernon Hamberg
<vhamberg@xxxxxxxxxxxxxxx>
wrote:

Is this a place for a procedure pointer? And would the pointer be
different if the program is changed, or would it always point to
what was found the first time?


On 2/27/2018 7:31 AM, Craig Richards wrote:

Thanks all for replying - that was very instructive.

I've only had a chance for a quick look for now but I appreciate
your links and sharing and I'll make time to investigate further.

Kevin, I like the simplicity of this approach and I can see the
ease with which things can be switched on and off.

I'm assuming that because you have both the program name and
program
library in your file, that the program is called through a variable.

And if you are calling a program via a variable, if I remember
correctly it will resolve it every time?

If my memory and assumptions are correct that tells me that you
could actually change the called program ( the one in the file )
and get currently active jobs to recognise it immediately rather
than them working with a QRPLOBJ version until they sign off.
Can you confirm this?

thanks kindly,
Craig

On 27 February 2018 at 13:07, Kevin Bucknum
<Kevin@xxxxxxxxxxxxxxxxxxx>
wrote:

All of our files that have triggers get the same program as the trigger.
When the trigger fires, we take the file, library, event type,
and time, and go out to a file. If there is an active entry, we
call the program and pass along the buffer that is needed. You
can have multiple entries and call multiple trigger handlers as
needed. Not as sophisticated as Alan Campin's program, but it
has worked well for us over the years. The file looks like this:
Key Field Length Dec Type From To Text
TGDLCD 1 A 1 1 DELETE CODE
K2 TGFNM 10 A 2 11 FILE NAME
K1 TGFLIB 10 A 12 21 FILE LIBRARY
K3 TGSQ 5 0 P 22 24 TRIGGER SEQUENCE
TGDESC 50 A 25 74 DESCRIPTION
TGPNM 10 A 75 84 PROGRAM NAME
TGPLIB 10 A 85 94 PROGRAM LIBRARY
TGTIME 1 A 95 95 TRIGGER TIME
TGEVNT 1 A 96 96 TRIGGER EVENT
UISOURCE 1 A 97 97 ENTRY SOURCE


Kevin Bucknum
Senior Programmer Analyst
MEDDATA/MEDTRON
Tel: 985-893-2550

-----Original Message-----

From: RPG400-L [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On
Behalf
Of
Craig Richards
Sent: Monday, February 26, 2018 4:38 PM
To: RPG programming on the IBM i (AS/400 and iSeries)
Subject: Trigger-happy

One technique I’ve seen for triggers is to have the actual
trigger

program do

nothing more than forward the trigger buffer data on to another
program.

That way the logic can be changed without having to remove the
trigger
program from the file which requires exclusive access.

( I know this doesn’t solve the issue of currently running jobs

continuing to

access the old object )

One part of my application won’t like this but I could resolve
my

particular

problem by putting the program in the same library as the file (
which

IBM

recommend anyway ) but I’d be interested to find out if anyone
else uses this as a general approach?

Thanks,
Craig
--
This is the RPG programming on the IBM i (AS/400 and iSeries)
(RPG400-L)
mailing list To post a message email: RPG400-L@xxxxxxxxxxxx To

subscribe,

unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx Before posting, please
take a moment to review the archives at
https://archive.midrange.com/rpg400-l.

Please contact support@xxxxxxxxxxxx for any subscription related
questions.

Help support midrange.com by shopping at amazon.com with our
affiliate
link: http://amzn.to/2dEadiD

--
This is the RPG programming on the IBM i (AS/400 and iSeries)
(RPG400-L)
mailing list
To post a message email: RPG400-L@xxxxxxxxxxxx To subscribe,
unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx Before posting, please
take a moment to review the archives at
https://archive.midrange.com/rpg400-l.

Please contact support@xxxxxxxxxxxx for any subscription related
questions.

Help support midrange.com by shopping at amazon.com with our
affiliate
link: http://amzn.to/2dEadiD


--
This is the RPG programming on the IBM i (AS/400 and iSeries)
(RPG400-L) mailing list To post a message email:
RPG400-L@xxxxxxxxxxxx To subscribe, unsubscribe, or change list
options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx Before posting, please take
a moment to review the archives at
https://archive.midrange.com/rpg400-l.

Please contact support@xxxxxxxxxxxx for any subscription related
questions.

Help support midrange.com by shopping at amazon.com with our
affiliate
link: http://amzn.to/2dEadiD



--
This is the RPG programming on the IBM i (AS/400 and iSeries)
(RPG400-L) mailing list To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx Before posting, please take a
moment to review the archives at
https://archive.midrange.com/rpg400-l.

Please contact support@xxxxxxxxxxxx for any subscription related
questions.

Help support midrange.com by shopping at amazon.com with our affiliate
link: http://amzn.to/2dEadiD
--
This is the RPG programming on the IBM i (AS/400 and iSeries) (RPG400-L)
mailing list To post a message email: RPG400-L@xxxxxxxxxxxx To subscribe,
unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives at
https://archive.midrange.com/rpg400-l.

Please contact support@xxxxxxxxxxxx for any subscription related
questions.

Help support midrange.com by shopping at amazon.com with our affiliate
link: http://amzn.to/2dEadiD

As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
Replies:

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

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