3.7 Validation Subroutines

Some programmers like to code validation logic into subroutines, and do not easily accept the LANSA approach of:

    request <<data>>

    begincheck

    <<validate>>

    endcheck

Unable to resist the urge to use a subroutine they soon change the program to be like this:

    dountil #errors = n

    request <<data>>

    execute validate

    enduntil

 

    subroutine validate

    begincheck

    <<validate>>

      if_error

      change #errors Y

      else

      change #errors N

      endif

    endcheck

    endroutine

 

and are surprised when the whole program aborts

The reason is that the ENDCHECK command, by default, returns control to the last display (if it can be found in same routine), otherwise it aborts the program.

In this subroutine the ENDCHECK command has no last display to return control to, so it aborts. If you must code validation routines, the best structure is probably something like the following:

 

    dountil #errors = 0

    request <<data>>

    execute validate

    enduntil

 

    subroutine validate

    change #errors 0

    begincheck keep_count(#errors)

    <<validate>>

    endcheck if_error(*next)

    endroutine