一转眼又星期五了,这周最后一天的实习也不能放松,昨晚对自己这么暗示来着,今早一觉睡到7点半还是室友的手机闹铃把我叫醒的。于是火急火燎地洗脸刷牙,头发也没洗早饭也没吃(准确说是没在教育超市喝粥,不过在站台旁买了俩包子,嘿嘿)。幸好今天上帝还算照顾,8点就上36路车接着一下车就正好赶上66路,太幸运了到公司也就8点45的样子,欧也!
今天龙哥来了,应该是昨天金蝶HR给他打电话询问关于我实习的事情,HR说实习生每个月也要做个总结什么的,然后公司根据业绩发放一定的薪酬,还要补签个实习合同(晕,不早说!)。说实话当时来实习之前确实是本着赚钱的目的而来的,但经过这几天的接触发现即使是二次开发也不是想象地那么容易的。首先把金蝶开发的EAS BOS Studio软件在短时间内搞熟就已经很不容易了,它包括业务建模工具、业务设计工具和业务流程图设计,对于二次开发的人员来说主要使用的是前面两种。而真正做起开发来这显然是不够的,还要有Eclipse、Oracle等支持,其中最复杂的就是金蝶内嵌在Eclipse平台中的原型项目。我们二次开发就是基于金蝶总部开发的EAS BOS框架,真正要我们自己动手编写的程序是很少的(相对于整个系统而言)。
作为实习生,我们最痛苦的也就在这里,初来乍到一方面对EAS BOS这个开发工具本身就不熟悉,Eclipse以前倒是用过,Oracle也从未使用过;另一方面南京这边开发人员本身就少,虽然一开始公司指定了龙哥做我的导师,但他除了给我好几十篇文档外几乎很少和我交流。龙哥在金蝶算是元老级任务了,整个办公室的人有什么不懂的都问他,开发方面和业务方面的。可能龙哥忘了我没有任何工作经验的身份了,给了我文档后几天后就问我“能做东西了么?”
“什么东西?”我小声问道。
“就是我们现在做的啊”他说。
“我可以试试”
“那你把这几天自己做的一些代码给我看看”。听了这句话我差点吐血,其实这几天来我就是照着文档断断续续的敲了一些代码而已,之余调试几乎很少成功的,甚至连这些代码用来干嘛的都一头雾水。这时我猜体会到看别人的代码真是痛苦啊,更何况是金蝶成百上千的员工开发出来的呢!他们的文档里没有注释,给的PPT也很概括。我只能顺着他们的条条框框大致摸清了软件的功能。至于怎么完整地做一个单据,除了使用业务建模工具添加表头、分录的字段、属性和做一些简单的界面规则校验外,对于元数据以及JAVA代码中的接口、抽象类和实现类中的各式各样的属性、方法则还是云里雾里。
龙哥显然对我做得不太满意,其实我自己也不知道自己都做了什么!后来他让我做一个实际的订单功能,尽量自己做。
总体需求是这样的:在供应链业务组别下面的销售报价单的业务单元中加一个功能,就是能够计算出缺货数量。具体的思路是这样的:首先在分录中加了两个字段“当前库存”和“缺货数量”,然后在工具栏中加一个按钮(设为“计算缺货”吧,命名btnCalLackNum),在单据增加界面点击它就能算出整个分录中每条记录的缺货数量。缺货数量=审批数量-当前库存。
好了,需求就这么多。
拿到手后我就一直在琢磨到底怎么做呢?不管三七二十一先把界面做起来再说。对于在界面上拖拽控件我还是很熟的,之前Visual Studio也没少用。在建模工具中对分录的当前库存字段加了一个更新方法calculateLackNum(),就是在库存不为空而且而且库存小于审批数量时“缺货数量=审批数量-当前库存”(后来在抽象类中看到了代码)。只是EAS BOS比一般的Eclipse和Visual Studio更复杂,主要是它引入了“元数据”。一张单据通过业务建模工具设计完毕后发布生成许多元数据,这里包括界面(.UI)、表(.table)、查询(.query)、关系(.relation)等。我们这里增加按钮必须在界面元数据上的toolbar中增加,这里还可以调整工具顺序什么的。
界面设计完后,我就开始着急了,按钮的功能写在哪里呢?对了上次发布后打开JAVA透视图后就会看到app包和client包中有ControllerBean.java和EditUI.java以及ListUI.java,只需要在这些里面增加自己的代码就OK了。好,开始发布。居然出错,在42%的时候,之前也有过这种情况。我下意识地打开java透视图,不出意外有几个java文件里有错误。果然,到底哪里出错呢?都是自动生成的啊,经过反复排除,终于发现了一个问题。那就是src文件夹里面只存放发布过得元数据生成的类,原来这个单据用到了其它业务组别的内容,要把它们也一并发布才行。
发布的问题解决了,谁知道今天发布后这些JAVA文件连影都不见,只是几个抽象类,那些都是自动生成的,龙哥说一般不要修改它,那我应该在哪里写代码呢?郁闷!一直怀疑是不是哪里出错了,找了半天没有丝毫进展,倒是想到了在分录实体(.entry)中新建一个取库存的方法(后来证明那是胡扯)。
实在不知道该怎么进行下去了,厚着脸皮问人吧,反正实习期满就打道回府了,也丢不了很长时间的人。后来那位同事告诉了我具体的做法。那就是先创建界面,如果完全自己从模板新建的单据,那么发布后会有ControllerBean.java和EditUI.java以及ListUI.java这些实现类,他们都是继承抽象类的,而这里我们是直接修改的原有单据,因此只有抽象类。也就是说,元数据发布后只需要在这些抽象类中添加代码就可以了。那么怎么添加呢?他给我做了个示范,在界面元数据中的工具栏按钮的第一个事件中双击,这样一个客户端的点击事件就可以添加了。晕!这不是和Visual Studio一样么!
再一次发布元数据,打开java透视图,在AbstractQuotationEditUI.java中就出现了方法btnCalLackNum_actionPerformed()。好了现在就可以做一些简单的测试了。
那么怎样从数据库中取数据呢?我原以为和我们在学校做的系统一样直接用SQL语句或存储过程连接数据库呢,现在面临一个问题,数据库表那么多,我怎么知道要用的是哪张呢?“没有数据字典吗?”那位同事惊讶地问道,于是他给了我一张数据字典,里面密密麻麻的全是数据库表以及它们对应的字段详细信息。
我绞尽脑汁,于是找到了一个DbUtilFromClient类,看名字的意思是从客户端对数据操作的工具类。于是我就写了如下代码:
String sql="select FCurStoreQty from T_IM_Inventory where FMaterialID="+material+"";
DbUtilFromClient a=new DbUtilFromClient();
Connection con=a.getConn("10.25.26.43","1521","wz","wz","wz");
return a.execute(con,sql);
转念一想,不对啊!万一换了数据服务器怎么办呢?呵呵,又被那个同事鄙视了一下,要我回去好好看文档,上面有说明。又是文档!郁闷啊!