Implement Error handling
When implementing domain logic, there are three types of errors which can happen and need to be handled:
- Business errors which can occur if business conditions are not met, but are expected to happen
- Validation errors
- General errors (all others)
Throw business errors
For every modelled business error, the SDK offers functionality to throw it.
Within the implementation file of a service, command or agent the following code can be used to throw a business error:
throw this.factory.error.nsacrnm.MyBusinessError();
Every error thrown in an implementation file should be handled latest in the errorHandler
method of the API operation.
Handle errors
In the implementation file of a service, command, agent and operation error instance check can be done by using isInstanceOf
functionality, thus enable to code handling logic for different error instances.
Handling business errors
To safely handle a business error that was modelled in the Solution Designer use the following code:
try { // call a service which might throw a business error await this.services.nsacrnm.ServiceIdentifier(input); } catch (e) { // check whether the error matches any of the errors modelled in Solution Designer if (this.isInstanceOf.businessError.ns1.NoBalanceAvailable(e)) { // now can handle this specific business error } if (this.isInstanceOf.error.ValidationError(e)) { // now can handle this validation error } if (this.isInstanceOf.businessError.ns2.NoCustomerFound(e)) { // now can handle this specific business error } }
Handling general errors
These are the general errors that can occur. To safely handle an error, use the following code:
try { // execute some logic } catch (e) { // check whether the validation of an entity (used as input or instance) fails if (this.isInstanceOf.error.ValidationError(e)) { // now can handle this validation error } // check for a child of abstract BusinessError if (this.isInstanceOf.error.BusinessError(e)) { // now can handle this Business error } // check whether an action (e.g. a command) is not currently available if (this.isInstanceOf.error.ActionNotAvailableError(e)) { // now can handle this ActionNotAvailable error } // check whether an aggregate is found in the datastore if (this.isInstanceOf.error.AggregateNotFound(e)) { // now can handle this AggregateNotFound error } // check whether an external request (i.e. this.util.request) caused an error if (this.isInstanceOf.error.ExternalRequestError(e)) { // now can handle this ExternalRequest error } // check whether an internal request caused an error if (this.isInstanceOf.error.InternalRequestError(e)) { // now can handle this InternalRequest error } // check for GeneralError if (this.isInstanceOf.error.GeneralError(e)) { // now can handle this general error } }
The hierarchy of error consists of GeneralError
, ValidationError
and BusinessError
, where
ValidationError and BusinessError extend GeneralError.