XX项目管理系统开发总结

1.日期控件的修改:

      原来的日期控件返回的格式有'yyyy-mm-dd hh24:mi:ss'和'yyyy-mm-dd',在项目管理系统中还需要'yyyy-dd'这种格式,因此得修改该控件的返回格式,又不影响返回其他格式的函数。

      解决方法:

             写一个新函数,执行类似的计算(生成一个日期选择的界面div),重写选择事件函数οnclick=新函数。

             不过当时的解决方法是                                                       修改了onclick的函数。

      问题:

           1.修改的onclick函数增添了新的传入参数,如何传入。

       解决:

           触发事件的对象.onclick = function(){

                         return 修改的onclick函数名(增加的参数);

           } ;

            问题1解决了,伴随的问题出现了,修改的onclick函数内部有this引用,该this本意是指向触发事件的对象(day的选择单元格),即.οnclick=onclick函数名,可是为了传参,改为了.οnclick=function(){return onclick函数名(参数)},这样,onclick函数的域发生了变化,this指向了global。

           解决:

           触发事件的对象.onclick = function() {

                  function(that) {

                          return onclick函数名(增加的参数,that);

                  }(触发对象的事件);

          } ;

          对应的onclick函数也得修改:将this替换成that变量,判断是否传入了that参数,没有传入就将this变量值赋予that变量值,否则就用传入的that变量,这样该函数this的替代变量that始终指向了触发事件的对象。

 

2.写一个方法,传入<表名>参数,去调用数据库的存储过程,得到并返回该表的唯一id(递增的):

名为SP_SRM_GET_LOCAL_ID存储过程的作用是管理该数据库所有客户自定义表的ID生成,这样替代了oracle的sequence,mysql的auto_increment,统一了建表格式:

CREATE OR REPLACE PROCEDURE SP_SRM_GET_LOCAL_ID (
  out_tablekey out varchar2,
  in_tablename varchar2,
  out_msg out  varchar2) as
  iCount number:=0;

  begin
  set transaction read write;                         --只能在一个transaction的最前面
  select count(*) into iCount from  bas_tablepk where tablename = in_tablename;
  if iCount>0 then
  update bas_tablepk set currentpk = currentpk + 1 where tablename = in_tablename;
  select currentpk into out_tablekey  from bas_tablepk where tablename = in_tablename;
  else
  insert into bas_tablepk (tablename,currentpk) values(in_tablename,1);
  select currentpk into out_tablekey from bas_tablepk where tablename = in_tablename;
  end if;
  commit;
  end SP_SRM_GET_LOCAL_ID;

Java调用:

  CallableStatement cs = stmt.prepareCall("{call SP_SRM_GET_LOCAL_ID(?,?,?)}");

  cs.registerOutParameter(1, Types.VARCHAR);

  cs.registerOutParameter(3, Types.VARCHAR);

  cs.setString(2, tabName);

  cs.execute();

  return cs.getString(1);

 

3.SQL:

UNION ALL 把两个拥有相同字段的视图拼成了一个视图,顺序按UNION ALL 前后顺序。

ROLLUP是ORACLE的统计函数,例如:GROUP BY ROLLUP(YEAR,MONTH,DAY),先按YEAR,MONTH,DAY分组,并统计每组之和,即不同的某年某月某天之和;再按YEAR,MONTH分组,并统计每组之和,即不同的某年某月之和;再按YEAR分组,并统计每组之和,即不同的某年之和;再汇总所有行的和。范围由小到大。

大部分情况下,SQL尽量避免子查询,可用表连接代替(join vs exist vs in区别)。

 

4.报表工具ChinaExcel的使用:

ChinaExcel报表WEB开发的使用步骤:

        1.用chinaexcel stutio设计报表,生成.tab文件。

        2.在后台写个方法,查询数据库表,把得到的数据组成个特定格式的String对象,返回该String对象。

        3.在页面上用一个object标签嵌套chinaexcel的ActiveX插件(cab文件),用来处理从服务器端传来的String对象。

        4.用chinaexcel的js开发库,编写实现报表功能的函数,展现,下载,图表等。

 

5.Ext浅接触:

     Ext是一个Js框架,用于用js来控制browser端的用户界面,通过面向对象的方式。其中封装了很多的UI的js库,在项目中用到了:

多个Ext.Panel构成了界面的大框架,导航栏,显示区,底脚,横幅。

Ext.tree.treePanel和Ext.tree.AsyncTreeNode构成一棵异步树。

Ext.request.Ajax用于异步与服务端通信。

Ext.data.JsonStore更简便地用于接收服务器端传过来的json数据。其中服务器端传json数据时最好定义好它的MIME类型"application/json",一些浏览器会对没定义好MIME类型的json数据产生点小问题。

对于系统有多棵树,就把一个Ext.tree.treePanel再封装一下,分离出要变动的配置参数为传入参数,这样,只需new 封装了TreePanel的类(参数),就可得到一个自定义treePanel了,避免了代码的复写。注意,做包装类时不要使配置的id值相同,当该包装类的对象出现多个时会出错!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值