Links

Catch exception

The Catch Exception Action Node is used to execute an action when an error occurs.
When an error occurs in an action node, normal execution of the action will stop, and Appfarm will look for a Catch Exception Action Node. It will first look downward on the same level, then go up one level to look for it there (top-down), and so on. When it finds a catch block that meets the criteria of the error, the catch will execute whatever is defined inside it and then resume execution starting with the node directly after the catch (unless you use end execution or some other flow-changing action).

Settings

Catch All

If selected, all types of errors will trigger the execution of the action nodes inside the action.

Execution Types

If Catch All is not selected, you need to define the execution type(s) that shall be caught. Four different options are available, and have a set of different properties.

Delete Constraint Exception

Used when there's a Delete Rule on a relation in the database, and the user tries to delete a parent. As long as objects in an object class have reference to a remote object class, deletions of referenced objects will not be allowed, i.e., if objects in the Project object class reference a Person object, it will not be possible to delete that Person object.

Web Request Error

Used when a web request returns an error, i.e., 400 or 500 error codes. If you don't want the action node to catch all exceptions, you might define specific HTTP Error Codes to be caught by the action node.

Custom Exception

Used when a Throw Exception Action Node returns an error. If you don't want the action node to catch all custom exceptions, you can define specific error codes that should be caught by the action node.

Defined Errors

Used when Appfarm returns an error. Only the error codes you define will be caught by the action node. Here is a list of relevant Appfarm Error Codes.
Name
Code
HTTP Status Code
UniquenessConstraintError
34002
500
MissingRequiredFieldsError
34003
500
InsuficientCreatePermissionError
34004
403
InsuficientUpdatePermissionError
34006
403
InsuficientDeletePermissionError
34007
403
DeleteConstraintException
34011
500
PropertyValidationError
34012
400
UpdateReadOnlyError
34008
403
PersistError
34010
500
UpdateObjectError
34009
500
WebRequestException
17003
500
WebRequestTimeoutException
17005
0
WebRequestAbortedException
17006
0
GetUserMediaNotAllowedError
17004
500
AppfarmCustomException
17001
500
JobConcurrencyError
31500
500
UserAccountNotFound
11005
404
UserAccountAlreadyExistException
14007
403
MultipleUsersFoundError
13005
500
InvalidEmailError
14400
400
QuotaExceededException
14009
422
SmsDisabledException
35001
DailyQuotaExceededException
35002
MonthlyQuotaExceededException
35003
FunctionEvalError
16002
500
FunctionEvalTimeoutError
16003
500

Result mapping

Result mapping might be used to map error data to Data Sources. The following data is available:
Key
Data
httpStatusCode
Error code
code
Internal Appfarm error code
name
Error name
message
Error message
body
Web Request response data
The data is returned as a JSON object, and body data can be mapped by setting RootPath to body.theKeyYouWant.
{
httpStatusCode: integer,
code: integer,
name: String,
message: String,
body: {}
}