1. You don't need to check whether the sub exists or not.
2. The default raise event method should be ba.raiseEventFromUI.
3. You need to wrap the ArrayList with anywheresoftware.b4a.objects.collections.List:
Code:
anywheresoftware.b4a.objects.collections.List list = new anywheresoftware.b4a.objects.collections.List();
list.setObject(data);
ba.raiseEventFromUI(this, eventName + "_finalresult", list);