解惑

解己之惑,解人之惑

标签:修改

使用工具修改代码时一定要谨慎

今天早上来更新了下代码,发现自己负责的和Crystal Report集成的代码突然不能工作了,刚好昨天升级了Crystal Report,而我们明天早上就要做演示的,天啊。
不过好在我是一个经验丰富的老鸟了,这点事情还不至于让我手忙脚乱,看了下控制台,没有异常信息,在关键代码的地方设置了断点,跟踪了下,发现原来工作的一个Query不能工作了,但是异常被截获并忽略了,把异常信息打出来,报的信息是查询无法识别,我没有修改过啊,而且这个查询是提交到Crystal Report Server的,那个Server并没有升级啊,再仔细一看,原来是我的查询被修改了,加了一个/*ARQXXXXX*/的注释,呵呵,原来罪魁祸首是美国那边的架构师,不知道他使用什么工具把我们系统全部代码的SQL前面全加了一个这个注释,但是我的这个查询虽然和SQL很像(也是Select … From … Where),但是实际是完全不同的东西啊,根本就不支持注释。

我同时记起了我自己前两个月犯的一个类似错误,我在造自己的大轮子,那个时候在写表现层的底层部分,生成HTML,在格式化的时候,我开始选择的是使用4个空格作为缩进,但是后来考虑到这样会导致生成的HTML太大,就使用tab替换,但是我写的单元测试已经是使用空格了,所以使用UltraEdit使用表达式进行全部替换,结果我的代码全部没有了(UltraEdit的那个功能没有Undo),因为我的代码也是使用四个空格作为缩进的,好在还能恢复很多,因为Eclipse是带本地历史记录功能的,可以恢复到上一次修改的状态,然后把最后的一次修改再做一下(浪费了一个小时的时间)。

更新:架构师的批量修改又有新问题,一些调用Oracle的存储过程的SQL也被加了那个,但是也不能加

慎用JavaScript修改Form的元素的值

很早就收到一个Bug说修改了某个元素的值以后,点击Next提交然后使用浏览器的Back按钮返回,结果那个元素的值是提交以前的值。
这个应该是浏览器的History功能的限制,它不能记录你的Javascript代码对Form元素的值的修改。在完成向导之类的功能的时候不要使用自定义的表单元素,或者不要用JavaScript去修改其它的需要提交的元素的值,这些修改都不会被浏览器的History功能记录。当用户点击浏览器的后退时,他可能看到不是他期望的结果。
一般要解决这个问题,要么禁用浏览器的后退功能(很多MIS系统可能都是这么干的),自己另外提供一个后退功能重新从后台取数据并刷新页面。
要么使用Cookie记录那些操作并在页面的onload事件里面从Cookie提取那些记录。
无论是那种方法都不是很方便。

不知道有没有完美的解决方案。另外这个问题对IE和FF都是有效的。

© 2024 解惑

本主题由Anders Noren提供向上 ↑