def handle_on_error(msg, error)
return false if h.state == 'failing'
err = deflate(error)
oe_parent = lookup_on_error(err)
return false unless oe_parent
handler = oe_parent.local_on_error(err)
return false if handler.to_s == ''
workitem = msg['workitem']
workitem['fields']['__error__'] = err
immediate = if handler.is_a?(String)
!! handler.match(/^!/)
elsif handler.is_a?(Array)
!! handler.first.to_s.match(/^!/)
else
false
end
@context.storage.put_msg(
'fail',
'fei' => oe_parent.h.fei,
'workitem' => workitem,
'immediate' => immediate)
true
end