× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



On 10/5/2015 10:50 AM, Henrik Rützou wrote:
Buck

do you have an example

On Mon, Oct 5, 2015 at 4:01 PM, Buck Calabro <kc2hiz@xxxxxxxxx> wrote:

On 10/4/2015 5:13 AM, Henrik Rützou wrote:
To my best knowledge a trigger, even if it is executed before the I/O,
isn’t able to prevent the I/O being done so triggers are limited unless
you
at the same time as you build in a validation and a way to message back
to
the caller (that is not standard in a trigger) and combines it with
commit/rollback in the caller.

One can use a Before Trigger to prevent an I/O operation! To signal a
failure, have the trigger send an escape message to the caller, which
will be the database manager. The DB manager sees that and percolates
an I/O error back up to the HLL. In the case of an RPG program
performing an UPDATE, the UPDATE operation will receive the I/O error
and this is how the program knows the I/O did not happen.

I have an example, but it is not really a teaching tool.
http://code.midrange.com/555eb50d3b.html

It is more confusing than necessary because it tests my trigger
environment proof of concept. There is a trigger mediator between the
PF and the actual trigger logic, which can be ignored for this example.
Here is the environment:

PF DATESAMPLE has *BEFORE trigger program TRIGGER
RPGLE TRIGGER checks a data area; if OK, CALL TRIGGERRUN
RPGLE TRIGGERRUN is the actual logic. It tests a specific column of the
input buffer for DATESAMPLE, and if it matches out 'do not update' test,
the program issues an ESCAPE message back to *PRV. *PRV is the trigger
mediator, which in turn sends a message to its *PRV, which is the
database manager. I was testing ideas, so instead of the mediator doing
a RCVMSG to see what happened, it tests a parameter passed between the
mediator and the trigger logic. Anyway, the DB manager then sends
CPF502B - Error in trigger program to the RPG program which issued the
UPDATE operation. This UPDATE then fails with an I/O error, and sets
RPG file status 01023.

This is all invoked by RPGLE TRIGTEST, which tries to update with the
special 'disallow this update' value, and then pulls all the messages
that were generated as a result of this failure. The key thing to note
is that if the trigger logic

--buck


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.