有网友问:怎样在基于SBO UI API开发的Addon中接管系统提供的业务功能页面中的处理方式而改为采用自定义的处理流程?
答:首先,本人并不建议这样去做,毕竟SBO作为一款成熟的财务、业务一体化的Erp软件,在业务处理上有着系统内在的数据和业务一致性约束和规则。
但是在此既然提出,可能就有业务需要,这中业务需要在SBO Addon中是可以办到的。
在SBO UI API中,所有的窗体控件事件都具有一个属性 BeforeAction,这个属性为真的时候,表示指定的窗体控件事件在系统处理前需要处理的过程;这个属性为假的时候,表示指定的窗体控件事件在系统处理后需要处理的过程。
那么,SBO针对一个SBO Addon来讲,如果SBO Addon侦听了某个系统业务窗体的某个控件事件,其处理的过程应该是:
BeforeItemEventProcessing:ItemEvent的 BeforeAction=true,在此完成系统处理前的业务处理,比如合法性校验、业务缺省赋值等
SystemItemEventProcessing:SBO系统控件处理过程
PostItemEventProcessing:ItemEvent的 BeforeAction=false,在此完成系统处理后的业务处理
事实上,在SBO的事件处理机制中,还有一个非常重要的控制变量BubbleEvent,这也是一个布尔型变量。在用户自定义事件处理完成之后,如果设置BubbleEvent为真,那么,SBO就继续按照上述的处理过程进行后续的事件处理,如果设置BubbleEvent为假,SBO就终止后续的事件处理。
这样解决方案就出来了,为了完成接管系统的某个窗体控件的业务接管,首先定义一个BeforeAction=true的系统处理前的事件处理方法,在完成业务处理后,设置BubbleEvent为假就可以了。