Usually there is a restriction on using GO_BLOCK or GO_ITEM on WHEN-VALIDATE-ITEM . However, there are several ways to overcome this. One way is to use the WHEN-TIMER-EXPIRED . Here's how -
WHEN-TIMER-EXPIRED
Begin if GET_APPLICATION_PROPERTY(TIMER_NAME) = 'NEW_TIMER' then CALL_PROG_UNIT();
WHEN-VALIDATE-ITEM
DECLARE timer_id TIMER; Begin timer_id := CREATE_TIMER('NEW_TIMER',1,NO_REPEAT);
What happens is that the timer will be created and expired as soon as the CREATE_TIMER function is CREATE_TIMER , and then the WHEN-TIMER-EXPIRED will check the name of the expired timer and call your program block with GO_BLOCK , I hope this helps.
UPDATE
Mr Jeffrey Kemp wanted to see evidence that this solution worked. So here it is -
Oracle form with two blocks BLOCK1 and BLOCK2 with text elements on it

Launch WVI

Run the WTE form. This first calls PROGRAM UNIT P_CALL_PROC with a call to the GO_BLOCK function, and then performs some checks in the Number 2 field.

Here is P_CALL_PROC

And here is the result -

and

There is a Youtube link here to see the form in action.
source share