Handle business exceptions (for example, invalid data)

One more scenario to handle: what to do with invalid data?:


*** 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 as FAILED. This time the exception type is BUSINESS. The code can be any custom code. You choose to use INVALID_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! ๐Ÿ‘