•CCERP表单概要•表单概述•表单和单据的关系•表单工作原理•表单研发基本流程•什么是表单?•表单是一个界面(页面)•表单是一个容器(控件的容器)•表单是一个功能(单据、查询、统计分析、报表)•表单是一个通道•表单是一个方案•表单是一个课题•表单是一个载体表单概述•表单概述•表单和单据的关系•表单工作原理•表单研发基本流程•父子继承关系•兄弟关系(共同提供功能平台)•发展关系(能力的发展)表单和单据的关系•表单概述•表单和单据的关系•表单工作原理•表单研发基本流程•表单创建原理•表单数据逻辑•表单存盘逻辑•常用的表单设计模式表单工作原理表单工作原理—创建逻辑表单开发表单解析表单展现应用方案表单工作原理—数据逻辑表单解析表单展现应用方案页面控件数据集合ZIP数据包数据库HTTPSQL表单工作原理—总体存盘逻辑表单工作原理—单据存盘逻辑表单工作原理—数据集存盘逻辑常用的表单设计模式•常用的表单设计模式单据类型:抬头(主数据集)明细(子数据集)。表格数据维护:单个数据集存盘其他:自定义sql语句存盘:使用InsertSql()函数操作数据库。查询:抬头为查询条件,明细数据集为查询结果。•表单概述•表单和单据的关系•表单工作原理•表单研发基本流程主题•沟通•设计•开发•流程图表单研发基本流程•需求沟通•界面逻辑沟通•处理逻辑沟通表单研发基本流程—沟通•沟通•设计•开发•流程图表单研发基本流程•数据库表设计•界面逻辑设计•处理逻辑设计表单研发基本流程—设计•沟通•设计•开发•流程图表单研发基本流程•表单规划(名称、标识…)•数据集定义•界面逻辑实现•处理逻辑实现•脚本处理逻辑•数据存储逻辑•功能注册,添加菜单•权限分配•单元测试表单研发基本流程—开发•沟通•设计•开发•流程图表单研发基本流程表单开发流程—流程图需求调研数据库设计概要设计表单开发界面布局单元测试功能注册数据集定义界面逻辑开发系统测试程序发布权限分配表单属性存储逻辑公共函数概念:将经常使用的功能做成函数,在表单中进行调用。好处:节省开发成本;代码易维护;表单相关概念•开发注意点:•表单类型:单据类:数据集存盘表格数据维护:单据存盘其他:查询等•表单调试1.读取当前操作员不需要调用SqlToField从后台去读取,现在可以直接GetCookie(dzyname)获取用户名称。•例如:单据中普遍的主数据集操作员的默认值挂的函数varusername=SqlToField(selectdzynamefromzhiydocwheredzyid='+GetCookie('dzyid')+')•这种方式可以使用GetCookie(dzyname)放在主数据集的默认值中就可以。•还有一点要注意的是“操作员”不应该是实际计算项,应该是有默认值的普通的数据项。•实际计算项会在该记录行任何一个子段修改后都会重新计算一下。开发注意点开发注意点2.资料选择方案统一使用ZlSelectImpl,以后禁止使用ZlSelect。如:往来单位,部门,业务员选择3.单据提取方案统一使用DjSelect,以后禁止使用GetDjReferAll、GetDjReferHzMx、GetDjRefer、GetMxRefer主题内容4.ZlSelectImpl和DjSelect调用必须判断其返回值true/false。如果调用该方法后用户点了取消,后续的逻辑却不判断它的返回值,而直接进行一系列的复制将使数据混乱!5.不再使LoadMod(‘printdesign’);LoadMod(‘addbill’)这种方式调用,改成相应的普通的js函数调用,如PrintDesign(),AddBill(),PrintPreview()等。原则上以后禁用LoadMod方法,这个属于内部方法。开发注意点6.声明变量时,请都给初始值!尽量不要出现:varlssl;//零散数量varbzsl;//包装数量而应该是:varlssl=0;//零散数量varbzsl=0;//包装数量开发注意点7.避免不必要的数据库连接操作。varsql=“selectshl,djfromspkfkwherespid=‘SPH00000002’”;vartable=newDataTable();table.Open(sql);for(vari=0;itable.RecordCount;i++){for(varj=0;jtable.FieldCount;j++){alert(table.GetValueAt(i,j));}}开发注意点8.实现表单之间传递数据。(1)DjOpen传递数据集对象,pubDataSet如:表单1:DjOpen(“yc_xs_kp”,dssub1,”修改”);表单2:vardjbh=pubDataSet.Field(‘djbh’).Value;//pubDataSet就是表单1传递过来的dssub1(2)SetPara;GetPara如:表单1:SetPara(“hr_gztid”,“GZT00000001”);表单2:vargztid=GetPara(“hr_gztid”);开发注意点9.尽量不要直接使用组件的值,而是使用该组件绑定的数据集字段。如:if(SKDBedit1.value0){alert(“数量不能是负数!”);return;}代码应该这样写:if(dssub1.Field('shl').Value0){alert(“数量不能是负数!”);return;}表单调试表单调试:定位语法错误:检查字符串是否结束,方法名是否正确(区分大小写)注释代码alert函数定位逻辑错误alert函数CopyToPub函数visualstudio表单编程规范不要使用文档化注释规则,注释尽量做到言简意赅。JavaScript会输出到客户端浏览器,从保密原则还是数据传输量等因素考虑,可以不需要遵守文档化注释规则。注释尽量做到言简意赅(但不是说不需要注释)。JavaScript的所有变量都是变体类型(Variant),甚至不声明就可以使用。但我们要求,每个要用到的变量,都必须使用var明确声明。表单编程规范•表单分类编号统一使用小写•表单编号统一命名为:系统分类号_子系统分类号_名称的形式。名称的命名方式遵从命名规范,首字母要小写。例如:人力资源系统的人事管理模块人员修改表单,命名为:hr_rs_modifyPerson。其中系统分类号和子系统分类号长度为2位或者3位。表单编程规范•表单中的数据集必须明确设定有意义的中文名称,不允许为空•如果整个表格仅仅为数据展现,需要设定整个表格只读,而不是逐项设定所有数据字段只读•如果表格的数据项不需要提交,必须设定该字段为只读字段。表单编程规范•每个表单中的主要功能尽量不要使用按钮(Button),而应该把该功能加到主菜单中•表单中写的扩展JavaScript的自定义函数命名统一以uf_开头•公共函数统一以pf_开头,并且有对其所实现功能的注释表单编程规范•扩展javascript编程时尽量减少与后台的交互次数。例如:想通过一条SQL返回多个字段信息,就不要多次调用SqlToField()一个一个的返回,尽量使用DataTable对象一次返回多个字段/返回多条记录。•如果需要弹出资料选择方案的话,统一使用鼠标双击和键盘回车两个事件进行操作。谢谢!