最近上手了金蝶 EAS 的二次开发,工作之余也顺带研究了一下结构,便于日后排查,这个研究仅针对 EAS 7.5 , 即 BIM 6.1.0 。我们重点关注BOS Modular 的基本结构、整个 EAS 源代码的功能是怎么分布的、以及反向整理 EAS 报告异常的格式。
BOS Modular 其实由一个 eclipse ganymede ,和多个制作成 eclipse 插件的金蝶插件组成。所以我会从业务建模和 设计视图这两个透视图的源码,结合金蝶自身的 xml schemas 来排查,使用时的各种看不懂的报错是什么意思。
目前(7.5)版本的开发工具,不放在 jar 包里面的 schemas 文件,,一共有5个,罗列在下面的表格就比较方便阅读了:
根目录 | 下级目录 | 文件后缀 |
---|---|---|
BOSModular | boscommon/eclipse/plugins/com.kingdee.bos.metadata_6.1.0/schema | .exsd |
BOSModular | boscommon/eclipse/plugins/com.kingdee.bos.toolcommon_6.1.0/schema | .exsd |
BOSModular | wfdesigner/eclipse/plugins/com.kingdee.bos.workflowdesigner_6.1.0/schema | .exsd |
BOSModular | rcs/eclipse/plugins/com.kingdee.bos.rcs_6.1.0/schema | .exsd |
BOSModular | webbim/eclipse/plugins/com.kingdee.bos.metadatareleasebridge_6.1.0/schema | .exsd |
还有在翻找各个插件模块的源码时,发现了BOSModular/boscommon/eclipse/plugins/com.kingdee.bos.common_6.1.0
目录里面的这几个宝贝,其中的 Context
类包含了完整的用户操作/ 登陆的信息:
根目录 | 类的名称 | 文件后缀 |
---|---|---|
/common.jar/com/kingdee/bos/ | Context | .class |
/common.jar/com/kingdee/bos/ | Context2 | .class |
/common.jar/com/kingdee/util/ | BaseException | .class |
关于与之相关的 ,BOSModular/boscommon/eclipse/plugins/com.kingdee.bos.metadata_6.1.0
下面的 /metadata.jar/com.kingdee.bos/ConetxtUtils.class
,我后面再作说明;先来看一下 BaseException
类里面一个方法,在单据提交和校验 UI 文件的时候经常会看到这些提示:
private Throwable replaceCause(Throwable oldEX)
{
if (oldEX == null) {
return null;
}
if ((oldEX instanceof SQLException))
{
SQLException oldEX1 = (SQLException)oldEX;
Throwable newEX = oldEX1.getNextException();
if (newEX != null) {
return newEX;
}
}
return oldEX;
}
观察了代码之后,我们可以发现,BaseException
类在这里会输出两种异常,分别是 SQLException
和 Throwable
,也就是在调用单据查询和插入时发生
还有这个,经常在校验元数据时提示类似的信息
public String getMessage()
{
if (!this.hasCause) {
return super.getMessage();
}
return super.getMessage() + "\nCaused exception message is: " + (this.hasSer ? this.causeMessage : this.cause.getMessage());
}
比方说 ,校验之后,校验信息显示 nullCaused exception message is: null
。最后需要研究的就是BOSModular/bosstudio/eclipse/plugins/com.kingdee.bos.newstudio_6.1.0
目录下面的 newstudio.jar
, 关于各种控件的 schemas 定义、和开发工具界面绑定的 Action 类都在这里。等会儿就搞个大新闻。
还有些不成文的解决思路,比如运行或者发布代码时 IDE 挂掉了,先看看自己的磁盘和内存够不够(我一般用 500G 硬盘和 8 G 内存的组合,还能应付本机产品数据库和开发工具一起跑)。再就是,避免发布和标准产品表名称、字段名称一样的数据库表,防止冲突。有什么不懂的,在缺乏文档的情况下面,先研究标准产品的源代码。:)