Continuing from my first post on the wish for a Try and Catch control structure within the U2 products, I had decided to see if I could create one within SB+ using a new input screen which eventually automatically creates a SB+ Paragraph process.

The Try part of the structure will consist of a list of SB+ processes which will be executed top down until one returns an error code via RTN.FLAG. RTN.FLAG is a common variable which is used to pass back errors from all SB+ processes. If this flag is zero, then no errors has occurred. The possible values are documented within the SB+ manuals and in the online help. They can also be user created, but normally for error tracking, 0 is OK, 1 is an error.

So, to convert each process in the list to a SB+ Paragraph line would look like:


LOCAL CATCH.ERROR, CATCH.PROCESS
*
EXEC "processname"
*
IF @RTN.FLAG # 0 then
*
  CATCH.ERROR = @RTN.FLAG
  CATCH.PROCESS = processname
  GOTO 9999
END

The Catch part of the structure would consist of a CASE statement:


9999:
BEGIN CASE
CASE CATCH.ERROR = "1" AND CATCH.PROCESS = "processname"
*
  EXEC "processname"
CASE CATCH.ERROR = "1"
*
  EXEC "processname"
CASE CATCH.ERROR = "X"
*
  EXEC "processname"
CASE 1
*
EXEC "processname"
END CASE

So, if the following try and catch statement was:


TRY
*
  GET.USER.PARAMS
  GET.WEB.INFO
  PROCESS.TRANS
  CATCH "X" REVERSE.TRANS
*
END

then the resultant SB+ paragraph process would be:


EXEC "GET.USER.PARAMS"
IF @RTN.FLAG # 0 THEN
*
CATCH.ERROR = @RTN.FLAG
CATCH.PROCESS = "GET.USER.PARAMS"
GOTO 9999
END
*
EXEC "GET.WEB.INFO"
IF @RTN.FLAG # 0 THEN
*
  CATCH.ERROR = @RTN.FLAG
  CATCH.PROCESS = "GET.WEB.INFO"
  GOTO 9999
END
*
EXEC "PROCESS.TRANS"
IF @RTN.FLAG # 0 THEN
*
  CATCH.ERROR = @RTN.FLAG
  CATCH.PROCESS = "PROCESS.TRANS"
  GOTO 9999
END
*
GOTO 99991
*
9999:
BEGIN CASE
  CASE CATCH.ERROR = "X"
  CASE 1
  END CASE
99991:

Now it is just a matter of creating a SB+ paragraph within the xxPROCESS file and add all the SB+ internals…