Example: handling expected application errors
Error handling is supported with the WSThrows and WSError attributes.
In your REST function expected errors, such as application level errors, are listed in the
WSThrows attribute defined
in the ATTRIBUTES clause of the function.
Example using WSError with WSThrows
In this example the HTTP status code "400" is listed in the 
WSThrows attribute
to trap for an error when a resource is not found. The function also references the "userError"
variable (@userError) defined with the WSError attribute for the description of the
error at runtime. Note: In the example, the variable 
userError is a record but you
can define this as any suitable Genero BDL simple type. If a customer record is not found, the WSError attributed variable is set with a
specific description of the HTTP status code, and the SetRestError() method is called
to return it.
IMPORT com
PUBLIC DEFINE userError RECORD ATTRIBUTE(WSError="User error")
  message STRING
END RECORD
PUBLIC FUNCTION GetCustomersNameById( id STRING ATTRIBUTE(WSQuery) )
  ATTRIBUTES(WSGet,
             WSPath="/customers",
             WSThrows="400:@userError")
  RETURNS STRING
    DEFINE s STRING
    WHENEVER ERROR CONTINUE
      SELECT lname INTO s FROM customers WHERE @id  = id
    WHENEVER ERROR STOP
    IF sqlca.sqlcode == NOTFOUND THEN
        LET userError.message = SFMT("Could not find customer id :%1",id)
        CALL com.WebServiceEngine.SetRestError(400,userError)
    END IF
    RETURN s
END FUNCTION