NC开发经验总结【V10】【单据部分】.doc_第1页
NC开发经验总结【V10】【单据部分】.doc_第2页
NC开发经验总结【V10】【单据部分】.doc_第3页
NC开发经验总结【V10】【单据部分】.doc_第4页
NC开发经验总结【V10】【单据部分】.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

NC开发经验总结【V1.0】钟磊2009-6-27NC开发涉及到的知识点多且琐碎,鉴于用友本身没有非常详细的文档且UAP平台本身的缺陷,造成我们开发人员经常会碰到许多莫名其妙的错误。解决这些错误又非常耗费时间和经历。因此,我个人总结了一些单据开发过程中的心得与大家共享,希望能对各位的开发产生帮助。NC单据的开发分为以下几步:1、建数据库表;2、导入数据字典;3、选择GUI界面类型;4、绑定数据模型; 设置主子表 设置值对象关系5、使用表单设计器设计表单;6、定义表单程序的按钮; 选择系统预制按钮 建立自定义按钮并选择7、定义业务动作脚本;8、校验规则设定;9、生成及部署代码;下面对每步开发过程中可能会碰到的疑难问题做下总结。1、建数据库表:1.1 此步操作会在数据库中注册相应的节点信息。1.2 命名规范:建议主表名称使用projectname_tablename_h,主表主键使用pk_tablename_h建议子表名称使用projectname_tablename_b,子表主键使用pk_tablename_b主表必须存在公司主键且公司主键必须使用pk_corp,数据库数据类型为CHAR(4)单据必须有ts、dr字段,对应数据库数据类型分别为CHAR(19)、SMALLINT下面是业务中用到的数据模型在数据库及NC中的对应模型:业务模型数据库模型NC数据类型主键型数据CHAR(20)Stringpk_corpCHAR(4)StringBoolean类型CHAR(1)UFBoolean日期类型CHAR(10)UFDate时间类型(ts)CHAR(19)UFDateTimedrSMALLINTInteger整数型INTInteger浮点型DECIMAL(20,8)UFDouble普通字符串VARCHAR(250)String1.3 建PDM的时候要注意不要遗漏主键标志,否则会造成单据保存时莫名的错误。子表中必须包含主表主键,且名称必须同主表主键名称pk_tablename_h2、导入数据字典:1.4 此步操作会将数据字典以大字段的形式保存入数据库中的数据字典表中。1.5 数据字典和单据模板中的字段并不是引用的关系,而是借助数据字典的内容自动生成的模板,因此数据字典变化不会引起单据模板变动,这点需要认知清楚。1.6 建议导入数据字典时导入到选定的目录里,不要放在根目录下。1.7 导入过程中如碰到点击下一步没有反应,请首先检查PDM中信息是否有问题,比如DataType是否还是之类的问题。3、选择GUI界面类型:1.8 此步操作未在数据库中储存关键性脚本,所有配置均用于生成框架代码。1.9 卡片界面、列表界面、管理界面的UI继承的类不同,一般单据管理界面即可。1.10 如无审批流则建议使用基本档案单据。业务单据中必须另外包含以下字段:单据主表:名称编码数据库模型公司主键pk_corpCHAR(4)单据号vbillnoCHAR(20)数据权限datalimitCHAR(20)制单人voperatoridCHAR(20)制单日期doperatordateCHAR(10)审批人vapproveidCHAR(20)审批日期dapprovedateCHAR(10)审核批语vapprovenoteVARCHAR(250)最后修改人vrevisoridCHAR(20)最后修改日期drevisedateCHAR(10)备注vnoteVARCHAR(250)单据类型pk_billtypeCHAR(20)单据状态vbillstatusSMALLINT业务类型pk_busitypeCHAR(20)单据子表:名称编码数据库模型来源单据类型vsourcebilltypeCHAR(20)来源单据IDvsourcebillidCHAR(20)来源单据行IDvsourcebillrowidCHAR(20)上层单据类型vlastbilltypeCHAR(20)上层单据IDvlastbillidCHAR(20)上层单据行IDvlastbillrowidCHAR(20)4、绑定数据模型:1.11 此步操作会在数据库dev_votable中注册VO的对应关系,但此部分信息与移植无太大关系。1.12 选择完主子表模型后如果子表关联主表主键名称处没有正常带出主表主键,则一般原因为子表中主表主键名称与主表中的主表主键不一致或主表中主键为设置为primary key;1.13 第一次绑定数据模型后如果删除重做,则会出现“主表值对象类”中VO路径为灰色不能修改的情况,这是因为第一次注册的时候在dev_votable表中写入了信息,将此表中相关信息删除后重新打开即可;由于整个UAP开发平台利用缓存处理的情况较多,如果暂时显示未生效,请重启客户端。5、使用表单设计器设计表单:1.14 此步操作中的所有信息均记录在数据库对应表中,与单据中代码无关。1.15 开启表头编辑公式:在UI的initSelfData()方法中增加this.getBillCardPanel().setAutoExecHeadEditFormula(true);1.16 开启卡片界面显示公式:在Ctrl类里的isLoadCardFormula()方法返回值设置为true1.17 增加新页签时应当注意,新增的页签顺序总是在最后,增加时应提前整理好思路按照显示的顺序逐次添加页签。1.18 BillItem的高级属性中的数据类型为小数型时,在参照类型处输入数字为控制小数点后位数。BillItem的高级属性中的数据类型为参照型时,在参照类型处输入自定义参照需用括起来。1.19 BillItem的高级属性中的“关键字名”勿随意使用,只有在表体参照配置公式时才会用到。1.20 保存按钮旁的生成其他模板功能为我们制作报表提供了极大的便利。由于报表模板生成工具操作不够直观化,制作报表的过程推荐使用配置单据模板然后生成报表模板的形式。6、定义表单程序的按钮:1.21 此步操作未在数据库中储存关键性脚本,所有配置均用于生成框架代码。1.22 建议在“单据的所有按钮”中将所有可能用到按钮都加进去,在“列表/卡片状态选择的按钮”中只选择当前需要的按钮,方便以后拓展。1.23 使用“删除”按钮时需在“单据的所有按钮”中同时选出“作废”按钮。7、定义业务动作脚本:1.24 此步操作未在数据库中储存关键性脚本,所有配置均用于生成框架代码。1.25 业务动作脚本生成在modules模块名META-INFVARsource下,在数据库中并未保存。生成代码时需同时把此部分代码导入项目工程的private包中的nc.bs.pub.action目录下,并在部署上线时一起移植。1.26 如果要修改业务动作脚本,业务动作脚本在修改后不能马上体现修改的内容。这时修改的内容已经成功提交,但由于NC中间件的问题需重启中间件才能显示出修改的内容。8、校验规则设定:1.27 此步操作未在数据库中储存关键性脚本,所有配置均用于生成框架代码。1.28 在此步最后保存时如果报ORA-01400错误时,如下:这是由于PDM中未设置主键造成的,UAP在第二步选择VO时会自动检测PDM中的主键列,出以上错误时,子表关联主表主键名称应该也是空的,如下:问题原因同绑定数据模型时。9、生成及部署代码:1.29 请不要完全相信UAP生成代码中的VO类,有时候没有问题的PDM是会生成出确实参数的VO类的。如果单据保存、主子表联动等出现问题却始终找不到问题原因,那么试着分析下对应的VO类是否存在问题。10、NC知识总结:1.30 代码结构:在开发中遇到没做过的功能主要靠经验去找,这时候我们必须理解框架,才能快速定位到想找的东西。首先我们应该明确的一点就是,类似卡片界面下表头和表尾中每个Item对象的展现形式,在NC中是通过BillItem实现的。而类似卡片界面下的表体及整个列表界面的展现形式与BillItem是不同的,数据是承载在BillModel里的。下面是UI中几个比较关键的内容的介绍:BillCardPanel是界面类和边界类。它以卡片的形式提供单据的界面,并作为模板的边界类,封装了单据模板的数据和逻辑,提供了访问单据格式和数据的属性和方法。BillListPanel和BillCardPanel一样,只是提供的列表形式的界面。BillModel是一个实体类和控制类,具有维护列表数据的功能,用来维护卡片的表体数据(bodyModel),列表的表头和表体数据。因此如果要找表体内容的解决方案请先从BillModel这里入手,相反,如果是找表头的解决方案就不要在这里面费劲了。BillItem是一个实体类和元素类。代表单据中的单个数据元素,负责卡片和列表中数据项的格式,卡片中表头和表尾数据。BillData是一个实体类和集合类,用来维护BillItem的集合,以Hashtable的形式将BillItem组织成HeadItems,BodyItems,TailItems三组。BillCardPanel可以访问BillModel和BillData等,同时BillCardPanel对象由其他各个对象逐层组装而成。从上面的介绍我们可以看出,卡片界面下的表头和表体是使用的不同体制进行展现的,因此取数方式、显示编辑公式的运作原理甚至可处理的方法的数量都会有所不同,在开发中不要单纯的认为表头能实现的功能表体就一定能实现。11、开发过程中常见问题及解决办法:1.31 浏览器无法进入NC登录界面,浏览器有黄色叹号提示错误。这主要是因为该系统用户的java权限造成的,需要手动在Javajre1.5.0_07libsecurityjava.policy中添加如下代码:grant permission java.security.AllPermission;重新打开浏览器,问题解决。1.32 把制作完成的补丁文件部署到服务器上后,重启中间件。本地机器清理缓存,然后登录NC后,报VO错误。首先代码部署后的编译过程是这样的:首先进行public的编译,然后利用public进行client的编译,其次利用public、client代码进行private的编译。这个问题主要出在public端的VO类在进行了client端的编译后再进行private端的编译时产生了序列化不一致的问题。为了保证VO类的序列化一致,只需在VO类中加入private static final long serialVersionUID = -8940196742313994740L;这样的声明代码即可。这个在Eclipse的默认设置中是会以黄叹号的形式显示在类名出,点击叹号Eclipse提示The serializable class XXX does not declare a static final serialVersionUID field of type long,选择自动生成序列化代码即可让Eclipse自动生成代码。我们进一步思考,之所以会出现序列化问题,原因在于public端的VO类在client端及private端均进行了调用,且未书写序列化代码。而在前台client端及后台private端均会调用到的VO类最主要的无非是接口用的前后台数据传输VO。因此,接口用到的VO类或接口中承载所涉及的VO类应保证其一定有序列化代码。另外,前后台均会用到的public端其他类均需对此类问题引起注意。1.33 使用UAP集成开发工具的“生成VO代码”功能时报错。这个实际上是UAP平台的一个bug,当使用此工具时,如果未点击过“目标文件目录”、“作者名”,则有可能造成这两处内容读取失败。所以在使用时请确保至少点击一次“目标文件目录”和“作者名”后再点击确定按钮。另外,由于“主表VO名称”处限制了名称的长度,如果遇到路径过长的VO类,请先起一个临时路径,导出后再进行重命名。1.34 将测试数据库的节点脚本移植入正式环境后,为何找不到对应位置的节点?出现这种情况节点并未丢失。打开【二次开发工具】-【UAP集成开发工具】-【系统管理工具】-【自定义菜单】,点击“修改模块内结构”,会在“其他节点”中找到刚才导入的节点,通过调整位置可以将节点还原回原本位置。如果正式环境中原本没有做过节点位置的个性化调整,则直接使用“恢复默认结构”即可。1.35 在Eclipse中生成EJB时发现框中是空的,应当如何处理,如下:这个问题一般是由于Eclipse所在项目代码中的.module文件或module.xml文件与当前引用的nchomemodules模块名下的.module文件或module.xml文件中的不一致造成的。比如大小写不一致。Eclipse在每次启动的时候MDE插件

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论