Handle business exceptions (for example, invalid data)
One more scenario to handle: what to do with invalid data?:
consumer.robot
:
*** Settings ***
Documentation Inhuman Insurance, Inc. Artificial Intelligence System robot.
... Consumes traffic data work items.
Resource shared.robot
*** Tasks ***
Consume traffic data work items
For Each Input Work Item Process traffic data
*** Keywords ***
Process traffic data
${payload}= Get Work Item Payload
${traffic_data}= Set Variable ${payload}[${WORK_ITEM_NAME}]
${valid}= Validate traffic data ${traffic_data}
IF ${valid}
Post traffic data to sales system ${traffic_data}
ELSE
Handle invalid traffic data ${traffic_data}
END
Validate traffic data
[Arguments] ${traffic_data}
${country}= Get Value From Json ${traffic_data} $.country
${valid}= Evaluate len("${country}") == 3
RETURN ${valid}
Post traffic data to sales system
[Arguments] ${traffic_data}
${status} ${return}= Run Keyword And Ignore Error
... POST
... https://robocorp.com/inhuman-insurance-inc/sales-system-api
... json=${traffic_data}
Handle traffic API response ${status} ${return} ${traffic_data}
Handle traffic API response
[Arguments] ${status} ${return} ${traffic_data}
IF "${status}" == "PASS"
Handle traffic API OK response
ELSE
Handle traffic API error response ${return} ${traffic_data}
END
Handle traffic API OK response
Release Input Work Item DONE
Handle traffic API error response
[Arguments] ${return} ${traffic_data}
Log
... Traffic data posting failed: ${traffic_data} ${return}
... ERROR
Release Input Work Item
... state=FAILED
... exception_type=APPLICATION
... code=TRAFFIC_DATA_POST_FAILED
... message=${return}
Handle invalid traffic data
[Arguments] ${traffic_data}
${message}= Set Variable Invalid traffic data: ${traffic_data}
Log ${message} WARN
Release Input Work Item
... state=FAILED
... exception_type=BUSINESS
... code=INVALID_TRAFFIC_DATA
... message=${message}
- The
Handle invalid traffic data
keyword takes care of dealing with invalid traffic data. It logs a warning, including the invalid data. The work item is released asFAILED
. This time the exception type isBUSINESS
. The code can be any custom code. You choose to useINVALID_TRAFFIC_DATA
. The exception type and the code help filter the failed work items in Control Room. - You add a new branch to the
Process traffic data
keyword for handling the invalid data case.
After running the consumer task, you see the following log entry regarding the invalid data (due to the country code not matching the validation rule):
[ WARN ] Invalid traffic data: {'country': 'SWError', 'year': 2019, 'rate': 3.13947}
Your consumer robot is now complete!
The consumer:
- loops all the work items one by one.
- validates the data.
- posts the data to the sales system API.
- handles successful responses.
- handles application exceptions.
- handles business exceptions.
All done. The producer produces, and the consumer consumes. Bravissimo! ๐