二次开发-1.0单据开发初学者手册新一代云ERP解决方案22目录1.概述..41.1.基本概念..41.2.单据开发主要流程..42.搭建开发环境..62.1.本文软件开发环境..62.2.建立开发工程..62.3.UAP集成开发配置.63.数据库表PDM及SQL脚本的生成..73.1.数据模型..73.2.生成PDM步骤.73.3.生成SQL脚本步骤..94.导入数据字典..115.生成VO..145.1.准备工作.145.2.生成VO.146.节点功能注册及权限分配.166.1.功能注册.166.2.自定义菜单.166.3.权限分配.17新一代云ERP解决方案37.第一个单据DEMO..187.1.建立单据模板.187.2.建立工程包结构.227.3.定制界面UI类.227.4.创建按钮动作类.238.数据持久化..258.1.主要工作.258.2.定义接口.258.3.定义实现类.258.4.配置UPM文件..25新一代云ERP解决方案41.概述1.1.基本概念单据:比如报销时的报销单,一般由表头和表体组成(有些时候还含有表尾)。表头中包含了单据的主信息,比如日期、部门、预算项目;表体包含了单据的明细信息,比如具体的事项和金额。单据类型:一个业务系统为了使结构更清晰,通常也是分层的。比如,供应链系统包含了采购、库存等子系统,每个子系统都具有一个系统类型,而每个子系统都会具有很多张单据,为了区分这些单据,为每张单据命名一个单据类型,作为唯一标识。模板:单据开发涉及到三大模板(单据模板、查询模板、打印模板)。单据模板定义了单据的显示外观和基本框架,查询模板定义了单据的查询对话框,打印模板定义了单据信息打印到打印机的样式和格式。VO:值对象,用作传输数据的载体。聚合VO:单据一般由表头和表体构成,因此单据的数据表通常设计成主表和子表。聚合VO是对单据数据的抽象,它用于装载主表VO和一组子表VO。UI工厂:虽然能通过三大模板定义出单据的显示,但每张单据都有一些公共的或特殊的行为。UI工厂是一种单据开发框架,它将常用单据抽象成了很多类型,因此,UI工厂相当于是单据开发的代码模板,预置了单据的各种公共行为,比如增、删、改、查,并且可以连接到U8cloud流程平台,支持审批、单据驱动等应用。1.2.单据开发主要流程U8cloud平台对开发过程进行很多抽象和封装,使得单据开发变得非常容易。一般地,开发环境中,开发一个单据主要包括以下步骤:第一步、PowerDesigner中建立单据的物理模型(数据库表),保存成pdm文件(xml);第二步、利用PowerDesigner生成单据的建表脚本(SQL语句),在数据库中执行此脚本建立数据库表结构;第三步、利用U8cloud二次开发平台中的数据字典生成工具导入pdm文件,生成相应的数据字典;第四步、利用企业建模平台中的模版管理生成单据模版,将单据涉及的数据表生成VO对象;新一代云ERP解决方案5第五步、以UI工厂为基础,应用Template模式,编写自己的单据类。下面,我们以一个简单的员工信息管理系统分别介绍这几个步骤。新一代云ERP解决方案662.搭建开发环境2.1.本文软件开发环境 操作系统:Windows10 数据库设计工具:SybasePowerDesigner(以下简称PD) 数据库:MSSQLServer2000 开发工具:Eclipse4.4.02.2.建立开发工程打开eclipse,新建MDE工程。如果是在原工程增加节点,则省略此步。2.3.UAP集成开发配置设置模块开发的基本信息,并将其设为开发库。新一代云ERP解决方案73.数据库表pdm及SQL脚本的生成PD是一种高端的数据建模工具,使用它可以很方便的建立数据库、导出SQL脚本,其物理模型文件的后缀名为pdm,所以,U8cloud二次开发平台多处依赖PD来完成数据库相关操作。3.1.数据模型我们的员工信息管理系统包括员工的基本信息,员工家庭信息。下图显示了实体间的关系。3.2.生成pdm步骤第一步、启动PD,会出现如下界面,选择新建一个物理模型。第二步、点击确定后左侧面板中会出现一个节点,右键properties后弹出画面,设置此模新一代云ERP解决方案88型的name,code等。第三步、在新建节点上点击右键选择New->Table或者点击右侧Toolbox,拖动下图圈选图标至主面板。第五步、双击主板中的table框,设置表名,表的中文描述。新一代云ERP解决方案9第六步、在Columns选项卡中定义列,列的中文描述。注意此处列的数据类型,一般地,主键前缀为pk_,数据类型为char(20),boolean类型的列前缀为b,数据类型为char(1),日期类型前缀为d,数据类型为char(10)等。第七步、保存到指定目录,便得到pdm文件3.3.生成SQL脚本步骤第一步、选择菜单项Database->GenerateDatabase…新一代云ERP解决方案1010第二步、在弹出界面中,设置生成脚本文件的存放路径。第三步、按下确定按钮后,便生成了SQL脚本。新一代云ERP解决方案114.导入数据字典数据字典是U8cloud二次开发工具中探测数据库表结构的数据基础,而不是采用每次需要数据都连接数据库的方式。数据字典由上一步骤生成的pdm文件生成,U8cloud二次开发工具提供了相应的生成工具。步骤如下:第一步、启动U8cloud企业建模平台,选择菜单系统管理工具->数据字典管理。第二步、在弹出的界面中,选择菜单项工具->导入数据字典。新一代云ERP解决方案1212第三步、选择数据字典导入文件类型,此处选择解析PDM文件。第四步、在弹出的界面中点击选择按钮,选择上一章生成的PDM文件。新一代云ERP解决方案13第五步、选择覆盖方式,一般地,选择全部覆盖。第六步、在弹出的窗口左侧会出现可供选择的数据表,选中需要导入的数据库表加到右边的窗口中。第七步,会出现如下窗口,此时便完成了数据字典的导入。新一代云ERP解决方案14145.生成VOVO值对象是数据传递的载体,其结构和数据库表结构紧密相关。一般我们在一个专门的包中存放VO对象,VO对象命名规则表现为类名以VO结尾。U8cloud二次开发工具中也提供了相应的工具,用于生成数据库表的VO类。5.1.准备工作我们首先要建立起数据库表结构。在SQLServer2000查询分析器中执行第二章生成的SQL脚本,生成数据库表。5.2.生成VO建立了数据库表后就可以手动生成VO了。第一步、启动企业建模平台二次开发平台,选择集成开发工具。第二步、选择菜单工具和选项,点击根据数据源生成VO。新一代云ERP解决方案15第三步、根据当前环境连接的数据源生成VO。选择数据表,点击列表,选择主表,子表。选择VO生成目标文件夹。点击确定,即可在目标目录下找到生成的VO文件。新一代云ERP解决方案16166.节点功能注册及权限分配现在我们要在系统中构造节点并分配权限。6.1.功能注册u8c.ui.demo.StaffUI为客户端入口类,StaffUI名字一般都是写成UI后缀形式,u8c.ui.demo.为每个功能节点对应的包名。6.2.自定义菜单新建的节点,系统一般都会把它归纳在其他节点上面去,这样分配权限的时候就找不到对应的节点进行分配权限,所以一般需要在自定义菜单这里点击恢复默认结构,这样在分配权限的时候才能看到对应的节点。新一代云ERP解决方案176.3.权限分配权限管理->权限分配->保存,给新搭建节点分配权限。新一代云ERP解决方案18187.第一个单据demo在以上准备工作的基础上,我们现在着手开发第一个单据。7.1.建立单据模板第一步、启动企业建模平台,选择企业建模平台模板管理->模板设置->单据模版设置工具。第二步、在弹出的界面中,输入新单据模板标识,如T01,然后按下“显示模板”按钮,如果此模板已经存在,会显示出已经设置好的信息,如果此模板不存在,右侧的“增加”按钮会变亮,表明可添加此模板。然后,通过表前缀过滤器,列出需要的数据表,主表只能选一个,子表可多选,本例我们选择员工信息作为主表,员工家庭住址作为子表,按下“增加”按钮。新一代云ERP解决方案19第三步、弹出的界面的右上是我们刚才选择的数据表,左上为表头部分,左中为表体部分。第四步、接下来我们设置表头和表体的显示内容,左键单击选中主表(staffinfo)不放,拖动到表头区域松开,此时会弹出如下对话框。新一代云ERP解决方案2020第五步、采用默认设置,确定,同样操作,将子表(homeinfo)拖动到表体区域,此时界面变成如下样子。第六步、我们可以修改具体显示字段的排列顺序,在表头/表体区域按下鼠标右键,会弹出下图右键菜单。第七步、选择“项目重新排序”菜单,通过上移下移改变排列顺序。新一代云ERP解决方案21第八步、我们还可以去掉一些不需要显示的字段,在不需要显示的字段上按下鼠标右键,弹出如下右键菜单,选择“删除项目”菜单,就完成字段的删除。第九步、保存编辑完的模板,选择菜单项模板操作->保存模板。第十步、输入模板的显示标题和节点标识,便完成了模板的设置。新一代云ERP解决方案22227.2.建立工程包结构首先、建立自己的模板包,此处包名为u8c.vo.demo。其次、建立VO对象包,将我们第五章生成的VO包拷贝到工程的src目录下即可。7.3.定制界面UI类第一步、在u8c.ui.mytest包中建立MyTestUI类,继承自FrameUI类。publicclassStaffUIextendsFrameUI{//……}第二步、重载initButtons(),createMainPanel(),createDataModel(),createButtonStateRegister()方法,关联界面控制类,此处返回一个panel对象。protectedvoidinitButtons(){BtnManagerbtnManager=getBtnManager();btnManager.regButton(AbstractBtnReg.SYSBTN_QUERY,newConversionQueryAction(this));..protectedConversionMainPanelcreateMainPanel(){returnnewConversionMainPanel(this,"600220",null);//节点编号}protectedListDataModelcreateDataModel(){returnnewConversionDataModel();}protectedBtnStateRegcreateButtonStateRegister(){returnnewConversionBtnStsReg(newStateRegister());}新一代云ERP解决方案23这样,就完成了UI类。第三步、创建主panel类。ConversionMainPanelextendsMainBillListPanelpublicConversionMainPanel(FrameUIframeUI,StringstrBilltype,StringstrBusitype){super(frameUI,"T02",null);//模版名称}第四步、创建数据模型。publicclassConversionDataModelextendsListDataModel第五步、按钮注册类。publicclassConversionBtnStsRegextendsBtnStateReg7.4.创建按钮动作类第一步、在UI类中初始化按钮。protectedvoidinitButtons(){BtnManagerbtnManager=getBtnManager();btnManager.regButton(AbstractBtnReg.SYSBTN_QUERY,newConversionQueryAction(this));btnManager.regButton(AbstractBtnReg.SYSBTN_ADD_LINE,newConversionAddChildAction(this));..}第二步、u8c.ui.demo_action包下新建ConversionQueryAction、ConversionAddChildAction等按钮控制类。根据功能的异同构建execute方法。getQueryTemplet()方法获取查询模版。publicclassConversionQueryActionextendsAbstractAction{publicvoidexecute()throwsException{getQueryTemplet().showModal();}publicHrQueryDialoggetQueryTemplet(){if(queryDialog==null){TemplateInfotempinfo=newTemplateInfo();tempinfo.setPk_Org(ClientEnvironment.getInstance().getCorporation().getPrimaryKey());新一代云ERP解决方案2424tempinfo.setCurrentCorpPk(Global.getCorpPK());tempinfo.setFunNode("600220");tempinfo.setUserid(Global.getUserID());queryDialog=newHrQueryDialog(frameUI,tempinfo);}第三步、点击新构建的功能节点,弹出如下UI。新一代云ERP解决方案258.数据持久化8.1.主要工作需要定义接口、实现类并配置UPM文件。8.2.定义接口publicinterfaceIStaffinfo{StaffinfoVO[]getStaffinfoVOs(StringcorpPK)throwsBusinessException;StaffinfoVO[]getStaffinfoVOs1(StringDLGwheresql)throwsBusinessException;}8.3.定义实现类publicclassStaffinfoImplimplementsIStaffinfo{@OverridepublicStaffinfoVO[]getStaffinfoVOs(StringcorpPK)throwsBusinessException{returnnewStaffinfoDAO().getStaffinfoVOs(corpPK);}PublicStaffinfoVO[]getStaffinfoVOs1(StringDLGwheresql)throwsBusinessException{returnnewStaffinfoDAO().getstaffinfoVOs1(DLGwheresql);}}在StaffinfoDAO中具体实现数据的增删改查操作。8.4.配置UPM文件在upm中配置接口和实现类,以及事务管理,是否单例等。
u8c.itf.demo.IStaffinfou8c.impl.demo.StaffinfoImpl新一代云ERP解决方案2626新一代云ERP解决方案27新一代云ERP解决方案NewGenerationofCloudERPSolution用友网络科技股份有限公司YonyouNetworkTechCo.Ltd.