Example: handling an unexpected error
Example of a method you can use to code for unexpected errors.
Warning: In general, the recommended option is to list all the possible errors as shown
in Example: error handling with WSThrows, in order to have them generated in
the OpenAPI specification file and trapped on the client side.
However, you can code to trap a code number not defined in the WSThrows
list with a call to the
SetRestError()
method. SetRestError()
then returns the error code and optionally the error
variable.
Example 2: managing unexpected errors
IMPORT com
TYPE accountType RECORD
id INT,
name VARCHAR(50),
email VARCHAR(100)
END RECORD
PUBLIC DEFINE myError RECORD ATTRIBUTE(WSError="user error")
message STRING
END RECORD
PUBLIC FUNCTION queryAccountById( id VARCHAR(10) ATTRIBUTE(WSParam) )
ATTRIBUTES(WSGet,
WSPath="/accounts/{id}",
WSThrows="400:@myError,500:Internal Server Error")
RETURNS accountType ATTRIBUTES(WSName="body")
DEFINE thisAccount accountType
WHENEVER ERROR CONTINUE
SELECT * INTO thisAccount.* FROM accounts WHERE @id = id
WHENEVER ERROR STOP
CASE
WHEN sqlca.sqlcode == 0
EXIT CASE
WHEN sqlca.sqlcode == NOTFOUND
LET myError.message = SFMT("Could not find account id :%1",id)
CALL com.WebServiceEngine.SetRestError(400,myError)
OTHERWISE
CALL com.WebServiceEngine.SetRestError(505,NULL)
END CASE
RETURN thisAccount.*
END FUNCTION