金蝶(kingdee) BOS 开发 UI (CTEx 、PIEx)扩展方法分析

金蝶给我们提供一个可以扩展ui类的方法,就是我们可以建一个后缀为CTEx或者PIEx的类,继承原来的UI类,扩展就会自动先运行我们的扩展类,从而达到功能扩展的目的,下面对该方法进行一个代码分析:

我们在框架里面是通过UIFactory.create来生成IUIWindow 接口的实现,所以我们直接跟踪到一个具体的UIFactory里面去,

例如:UIModelDialogFactory

我们发现在create方法里面又如下代码:IUIObject uiObject = UIFactoryHelper.initUIObject(name, uiContext, dataObjects, oprt);

这个代码就是初始化ui界面类的,再跟踪下去,就可以发现如下代码:

uiObject = AbstractUIFactory.createUIObjectNoInit(name);

再跟踪下去就发现如下代码,一切玄机就在下面,框架会先加载CTEx为后缀的类,如果找不到就加载PIEx的类,如果再找不到才加载原来的类。。

public static IUIObject createUIObjectNoInit(String name)
throws UIException
{
try
{
Class c = null;
try
{
c = Class.forName(name + "CTEx", false, (com.kingdee.bos.ui.face.AbstractUIFactory.class).getClassLoader());
}
catch(ClassNotFoundException ex)
{
try
{
c = Class.forName(name + "PIEx", false, (com.kingdee.bos.ui.face.AbstractUIFactory.class).getClassLoader());
}
catch(ClassNotFoundException _)
{
c = Class.forName(name);
}
}
IUIObject uiObj = (IUIObject)c.newInstance();
return uiObj;
}
catch(Exception e)
{
throw new UIException("Can not create ui object!", e);
}
}

猜你喜欢

转载自paul-learning.iteye.com/blog/1409200