迈克尔家的后院儿

Understand what makes us do what we do.
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1、简介:

这是一个单机版的信息系统,主要为了生成一份复杂的报告。用到的技术有C#(v1.1), Excel2003, MS Access, Crystal Report 9.0等。当理解到这些时,几乎很多人都会认为这个项目不会太复杂、应该很容易做,这也是当时我们的想法。

在介绍的时候,除了项目经验和大家分享外,也会分享关键的技术解决思路。

2、阶段一:

这是一个了解需求的阶段。在中国现有的非IT企业中,多数多出了一个类似软件开发的部门,他们是我们这些外包公司的主要沟通窗口。不过有一种感觉是,这些非准IT部门的存在是为了我们和终端用户(真正的需求)进行沟通的一个准备--这需要更多的人去验证,但没有他们事情还真难做。

遇到的主要技术问题:如何在Crystal Repor里画几个复杂的Chart图(这个Chart图可能比你见到的最复杂的Excel的杂Chart图还要复杂,还要在此基础上加上Excel表格,文字注释等等信息)。实际上这个问题也一直持续到项目的最后。

最后我们给的解决方案是,通过Crystal Report嵌入OLE的功能嵌入Excel(嵌入的时候选择Link的方式)。这样,在程序运行的时候,可以先通过程序控制Excel里面的数据,画好报表,再让Crystal Report连接保存后的Excel文件。

注意事项:
1)Crystal Report嵌入Excel的时候,不能动态指定Excel的路径,Excel的路径是写死的;
2)我的Excel版本是MS Excel 2003中文版的,如果是2003英文版的需要安装Excel的多国语言包SP2,否则会出错。微软在MSDN上说这是他们自己的Bug;
3)至于如何引用Excel的dll,并怎么操纵它,在网上搜索一下,还是很多的(不过有的代码有问题)。
4)如果找Excel的详细操控代码,比如控制Excel单元格之类或者控制Excel里面的Chart图形等,建议先学会Excel里面的VBA的录制宏的功能,这样你会找到灵感的。

3、阶段二:

我的担心比我预想的要快。在一个多月后,进入项目后期的时候,客户突然提出需求的变更。在中国做项目,没有谁会希望看到这种状况,很简单,这部分钱不容易赚。无论你拿出多好的证据,客户都会认为这是一个比较小的改动。我们的测试人员也增加到了6个。哈哈,这样一个小的系统竟然用这么多的测试人员!!!这个阶段,是最容易项目组里的人垮掉的时候,容易有负面情绪。无数的加班,还好我们挺过来了。

现在期望,以后一定不要有这种类似的事情发生。

4、阶段三:

心底的一个更大隐患发生了,我们在客户的再三催促下,投递了一个版本给客户。递交的时候,还祈祷我们的测试是最棒的。不过真正的用户用起来的时候,在1个月的用户测试时间内,给我们发了14封Feedback。决对没有比这个更吓人的了,因为我们公司很多项目组的Defeact都是0。最后冷静下来分析原因,主要的原因还是我们的那个非准IT部门,次要的是我们不能真正了解真正的需求。

这个时候,我采取的策略是,对任意一个Feedback马上响应。不按照公司的流程去走,这样会耽误太多的时间。如果时间托的久的画,客户的态度会转变的很快。我的出发点是要让客户喜欢我们,项目也要成功。14封Feedback中,响应最迟的也就是隔一天,大多数都是当天解决掉了,虽然Effort有点让我们吃亏。。。

以后再遇到这种类型的部门,一定要有心理准备,他们的需求可能和真实的需求差很多,要想办法在项目的初期就将其解决掉。

嗯,这样,终于撑到了最后。。。

5、阶段四:

在项目快要Close以前,绝不要以为不会有什大的事情发生,我们就遇到了。看了这个项目的介绍,大家很容易了解这是一个单机版的程序。可客户真正的Product上面,是把程序安装到了Windows 2000 Server上面,用户通过XP的Remote Desktop去连接该Server上的程序。这样问题就来了,我们在程序中用过Excel,很显然,以前的设计让多用户一起应用是不可能实现的。

虽然客户(非准IT部门)也承认,在项目的一开始,就没想到这件事情,不能怪我们。但如果这个问题不解决,很可能成为一个大问题,导致项目失败!还好,我们没有停止研究,继续考虑其它办法将Excel的Chart图显示在水晶报表里面。功夫不负有心人,我们是这样实现的:

1)每个登陆用户,用Excel文件的一个Copy;
2)在Excel中画好图后,对Excel的worksheet的指定区域进行抓屏,放到剪贴板里面;
3)想办法将剪贴板里面的图片放到一个临时的DataSet里面;
4)最后让水晶报表去连接这个DataSet,显示出里面的图片。
5)最后把临时的Excel文件清除掉。


成了!成功了!客户也满意了!

总结:

这是我做过很多项目的其中一个。项目虽小,可挑战性很强!在开发那一阶段,加班最频繁的时候,很多时候都是那句话支撑着我们:没有不可能!不管怎样,一定要有一个结果出来!不能半途而废!

还要和大家分享的是,如果有可能,尽量参与到项目的整个周期的过程,这太有意思了,你会遇到各种你想都没想过的问题,在项目成功的那一刻,心理和经验的感受会有质的改变。

在我们的这个项目中,我最终想到了用Excel做报表,源于我对Excel的熟悉。我想大家在做项目的时候,不到不得已,还是不要首选这个方案,它对客户的要求比较多。运行效率也有点问题。也许等微软的Office Dot Net 版出来会好一点。