版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
....下载可编辑..用友U8开发一月通用友U8平台技术部ERP事业部产品市场推广部2007年1月总策划:郉艳凯主编:张劲涛、李正、侯关士撰稿:陈鸿远、鞠进步、唐丰、胡景峰、郑芸、郑子阳、王振骞、陈文海、罗文印、吴小山、李东、蔡再安、廖年兵、蒋志全审校:姜炜、胡春钰、魏勇、阚宇鸣谢衷心感谢U8产品本部邓适宜总经理为本书所做的指导和点评衷心感谢ERP事业部向奇汉副总裁为本书的传播所给予的关注衷心感谢U8平台技术部、U8总体设计部、U8供应链开发部、U8财务开发部、U8行业开发部、ERP事业部产品市场推广部在本书的写作推广过程中给予的大力支持和帮助目录TOC\o"1-4"\h\z\u目录 3开篇导读 9第一篇:U8开发模式介绍 10第一节U8开发模式 10第二节U8二次开发模式 102.1U8二次开发 102.2UAP开发 10第二篇:U8二次开发 11第一节:应用程序框架简介 11第二节:门户开发与集成 11一、功能概述 11二、名词解释 112.1菜单调整工具 112.2idt.dll文件 11三、如何开发可与门户集成的VBdll 123.1代码修改 123.2常见问题 163.3参考 163.4挂接菜单 18四、如何开发可与门户集成的.NETUserControl 184.1通过建立一个项目类型为类库的项目 184.2实现接口IUserControl 194.3编译该控件输出DLL 214.4替换文件 213.5示例源程序代码 213.6挂接菜单 21五、可执行文件(EXE)如何挂接到门户 22六、UAP表单和UAP列表如何挂接到门户 23七、如何不使用菜单调整工具增加和修改菜单 257.1相关表结构 257.2各种程序类型的增加方法 26八、应用习题 28第三节:界面设计与开发 283.1档案开发 28功能介绍: 28使用环境: 29使用说明: 29应用案例: 29应用技巧: 29应用习题: 29相关控件:参照/列表/MDIExtend 293.2单据开发 29功能介绍: 29使用环境: 30使用说明: 30应用案例: 39应用技巧: 41应用习题: 413.3打印控件 41功能介绍: 41使用环境: 42使用说明: 42应用案例: 54应用技巧: 54应用习题: 553.4凭证开发 55功能介绍: 55使用环境: 55使用说明: 56应用案例: 59应用技巧: 61应用习题: 61相关控件:凭证控件 62第四节:业务功能开发 624.1加密控制 62功能介绍: 62使用环境: 62使用说明: 62应用案例: 66应用技巧: 67应用习题: 674.2功能权限控制 67功能介绍: 67使用环境: 67使用说明: 67应用案例: 73应用技巧: 74应用习题: 744.3数据权限控制 75功能介绍: 75使用环境: 75使用说明: 75应用案例: 83应用技巧: 84应用习题: 84第五节API应用 845.1库存部分 84功能介绍: 84使用环境: 84使用说明: 85应用案例: 86应用技巧: 88应用习题: 885.2采购部分 88功能介绍: 88使用环境: 88使用说明: 89应用案例: 97应用技巧: 98应用习题: 985.3销售部分 98功能介绍: 98使用环境: 98使用说明: 99应用案例: 101应用技巧: 102应用习题: 102第六节EAI开发 102第一节EAI功能介绍: 102第二节EAI二次开发模式: 103第三节导入导出数据格式标准: 105第四节支持哪些基础档案和业务单据的的导入导出 108第五节凭证的导入 111第七节工作流 112功能介绍: 112使用过程: 112开发帮助 113第八节插件式开发 142功能介绍: 142使用环境: 142使用说明: 143应用案例: 143应用技巧: 143应用习题: 143第三篇:UAP应用开发 144第一节:UAP功能介绍 144第二节:UAP安装与卸载 145第三节:UAP应用环境及流程 145第四节:项目定义 1454.1使用项目 1454.2项目的导入导出 1464.3任务管理 147第五节:表单管理 1485.1应用开发 1485.1.1UAP表单模型 1485.1.2表单结构设计 1485.1.3布局视图设计 1535.2表单二次开发接口 157功能介绍: 157使用环境: 157使用说明: 158应用案例: 170应用技巧: 175应用习题: 1755.3列表二次开发接口 176功能介绍: 176使用环境: 176使用说明: 176应用案例: 180应用习题: 1805.4后台服务二次开发 180功能介绍: 180使用环境: 181使用说明: 181应用案例: 183应用技巧: 184应用习题: 185第六节:报表管理 1856.1报表概述 1856.2使用报表 186使用说明: 186应用习题: 1896.3报表二次开发接口 189使用说明: 189应用习题: 196第七节:单据转换规则 196功能介绍: 196使用环境: 196使用说明: 196应用技巧: 198第八节:产品发布 198UAP项目发布 198功能介绍: 198使用环境: 199使用说明: 199二次开发DLL部署 200使用环境: 200使用说明: 200应用案例: 201应用技巧: 202应用习题: 202第九节:其它功能介绍 2021、参照 202参照设计器 202参照组件 2122、菜单设计器 2383、应用角色 238功能介绍: 238使用说明: 2394、数据引擎定义工具 239功能介绍: 239使用说明: 240备注: 262应用技巧: 262应用习题: 2625、商业敏感数据工具 263功能介绍: 263使用说明: 263应用技巧: 266应用习题: 2666、栏目设计器 266功能介绍: 266使用说明: 266应用技巧: 268应用习题: 2687、过滤设计器 268功能介绍: 268使用说明: 268应用技巧: 273应用习题: 274第四篇:开发技巧 275第一节:MSSQL2000脚本生成器 275功能介绍: 275使用环境: 275使用说明: 275应用案例: 275应用技巧: 275应用习题: 275第二节:单据模板预置工具 276功能介绍: 276使用环境: 276使用说明: 276应用案例: 276应用技巧: 276应用习题: 276第三节:年结易用性工具 276功能介绍: 276使用环境: 276使用说明: 277应用案例: 277应用技巧: 277应用习题: 277第五篇:习题解答 278开篇导读今天,企业种类多样,业务流程更加复杂,ERP包含的功能越来越多,长期以来,ERP厂商一直都在努力,试图开发一个能满足各种企业的各种业务的ERP系统,但是,客户的业务流程总是会变,客户的需求总是层出不穷,变化的速度远远超过了ERP厂商推出新版本或开发新产品的速度,ERP厂商疲于奔命,即使使尽浑身解数也吃力不讨好。经过冷静思考,我们可以从低级的生物生态链找到卸掉ERP厂商多年包袱的原型办法,ERP厂商、增值开发商、集成开发商和ERP最终用户形成了企业应用软件的链条,他们承担了不同的职责,获得不同的利益。ERP厂商集中精力开发标准产品,负责提供功能强大的二次开发平台和集成开发平台,为支持灵活的客户化工作提供技术支持。客户化有三个级别,第一个级别是系统配置客户化,ERP软件支持通过配置用户接口和业务操作来满足客户的业务要求;第二个级别是允许客户修改,在软件许可的情况下,把部分ERP软件模块的代码开放给用户,ERP内置的系统部件拥有特殊的代码容器,容器可以大大简化对客户修改代码的管理、升级和测试;第三个级别是提供修改服务,不用做很大的客户化工作,ERP软件就能满足客户的大部分需求。因为独特的业务环境,客户还是有个性化的需求,ERP软件厂商提供开发工具或开发平台,充分利用客户或增值开发商的技术资源来实现客户的个性要求,只要客户化工作严格遵循ERP软件的编程规范,产品兼容性和集成就不是问题。用友不遗余力,一直想探索好的科学的客户化工程,曾经开放过部分U8的源代码,因为无法或不能很好的升级客户化产品,只好做罢。U8已经能支持第一个级别的客户化工程,通过参数配置可以满足一部分客户要求,但是,U8真正灵活的客户化能力支持却要体现在第三个级别,U8呈现给用户的要是强大的二次开发平台。针对U870产品,我们已经暴露了部分控件(比如:登录控件、参照控件、打印控件、自定义报表控件、单据控件和凭证控件)的部分编程接口,我们也支持在U8门户挂接二次开发接点等。另外我们重拳推出了UAP开发平台,它针对不同角色(客户、实施、开发、伙伴等)的人员提供了友好、稳定、快速的开发及实施平台,通过平台技术使编码人员得到最大的解放。希望通过此教程可以为不同角色的您提供最大能力的提升。第一篇:U8开发模式介绍学习基础:学习此部分内容要具备的基础知识;学习目的:学习完此部分内容后要达到的目标;掌握重点:此部分内容的重点掌握对象;第一节U8开发模式 介绍U8的开发方法与步骤第二节U8二次开发模式 总体介绍U8二次开发模式分为UAP开发和基于控件的U8二次开发两种;下面两节分别介绍两种不同开发模式的优缺点和应用环境,为什么两种模式都存在,在进行二次开发时,如何根据具体情况选择不同的开发模式。2.1U8二次开发2.2UAP开发第二篇:U8二次开发学习基础:学习此部分内容要具备的基础知识;学习目的:学习完此部分内容后要达到的目标;掌握重点:此部分内容的重点掌握对象;第一节:应用程序框架简介第二节:门户开发与集成一、功能概述如何使伙伴二次开发的程序很好地和U8产品集成在一起?需要满足什么条件的程序才能和门户集成?如何开发一个满足这个条件的程序?本文将为您解答这些问题。二、名词解释2.1菜单调整工具功能:调整菜单位置;新增、修改、删除菜单(除U8系统菜单外)。菜单调整工具在UAP中,通过菜单“工具->菜单调整工具”进入。2.2idt.dll文件位置:在U8安装目录的Portal目录里。该文件其实是一个xml文件,可以用任何文本编辑器打开。其内容描述了双击每个末级菜单项目时需要调用的物理程序。三、如何开发可与门户集成的VBdll3.1代码修改3.1.1引用工程UFPortalProxyInterface3.1.2相关代码修改1、Login接口(PrivateFunctionILoginable_Login()AsBoolean),不管弹出的是模式窗体还是非模式窗体,此接口在成功登录后须返回True,而且要保证登录成功后,第二次调用此接口时也要返回True。只有在登录失败后方可返回False。也就是说此接口返回值的含义是是否已经成功登录子系统。2、LogOff接口(PrivateFunctionILoginable_LogOff()AsBoolean),此接口的含义是执行LogOff过程,如查成功使该子系统牌LogOff状态返回True,否则返回False。也就是说,如果该子统还未登录,则真接返回False就可以了。如果系统处于已经登录的过程,则执行业务组原有所需的LogOff过程,如果执行功能,正确LogOff了子系统,则返回True,否则返回False。如果在实际程序中没有此过程,则直接返回True即可。3、CallFunction接口(PrivateFunctionILoginable_CallFunction()AsBoolean)。如果861产品没有子系统登录过程的产品,此值须返回True.4、对于显示模式窗体的产品,如果已经申请了任务,请在模式窗体退出时自已清除任务。PrivateFunctionILoginable_Login()AsBooleanIfg_bLogined=TrueThen ILoginable_Login=True ExitFunctionEndIfIf((Notg_businessIsNothing)Andg_bLogined=False)Then DimoLoginTmpAsObject SetoLoginTmp=g_business.GetVBclsLogin() Setg_oLogin=oLoginTmp ILoginable_Login=Login(oLoginTmp) If(ILoginable_Login=True)Then g_bLogined=True EndIfElse ILoginable_Login=Notg_businessIsNothingEndIfEndFunctionPrivateFunctionILoginable_LogOff()AsBooleanIf(g_bLogined=True)Then ILoginable_LogOff=LogOff() If(ILoginable_LogOff=True)Theng_bLogined=FalseEndIfElse ILoginable_LogOff=TrueEndIfEndFunction增加Business属性PublicPropertyGetBusiness()AsObject SetBusiness=g_businessPublicPropertySetBusiness(busValAsObject)Setg_business=busValEndProperty增加全局变量新建一module文件,并加入如下全局变量:Publicg_businessAsObjectPublicg_bLoginedAsBoolean3.1.3三种窗体修改嵌入Portal的窗体文件原来有MdiExtender控件的窗体要嵌入Portal的窗体修改方法:调用CreateFormEnv方法调用ShowForm方法每个窗体都要有方法ExitForm修改第一次弹出就是模态的窗体由嵌入Portal的窗体弹出的窗体,3.1.4UFToolbar的修改在Settoolbar之前将g_business传入在Settoolbar之前设置Tag信息设置微软Toolbar每个Button的Tag信息调用CreatePortalToolbarTag方法设置示例button.Tag=CreatePortalToolbarTag(“ICON_NEW”,”ICOMMON”,”PortalToolbar”)注意:严禁创建多次.1图标.2分组常用(ICOMMON):如打开、保存等编辑(IEDIT):如增行、拷贝单元格等处理(IDEAL):如审核、分单等查询(ISEARCH):如过滤、联查等.3类型在窗体的Unload事件中加入SetUFToolbar1.Business=Nothing3.1.5中间过程判断窗体是否打开FormIsOpened设置并激活某个已经存在的窗体在显示过程中(窗体已经显示)关闭自身窗体CloseForm3.2常见问题程序已经修改,双击门户节点时没有反应,调用状态进不了VB程序;未正确修改clsProductFacade文件;窗体已经嵌入到Portal中,但Toolbar的相关信息未转移到门户的工具栏上;是否正确设置了每个Button的Tag信息;3.3参考3.3.1ShowForm显示嵌入Portal的窗体PublicFunctionShowForm(ByValobjAsObject,ByValSubIDAsString,ByValsKeyAsString,OptionalmodalableAsBoolean=False,OptionalDockToProtalAsBoolean=True,OptionalByValvfdAsObject)AsStringobj:Form对象;SubID:子产品号;sKey:Key,注意不能是form的Hwnd,在窗体的生命周期中,此值必须唯一;modalable:该窗体是否为Model窗口;DockToProtal:是否要嵌入到Portal中;vfd:由CreateFormEnv对象的返回对象;3.3.2CreateFormEnvsKey:Key,注意不能是form的Hwnd,在窗体的生命周期中,此值必须唯一;formObj:Form对象3.3.3CloseForm关闭一个已经打开的窗体PublicFunctionCloseForm(ByValsKeyAsString,ByValobjAsObject)sKey:Key,注意不能是form的Hwnd,在窗体的生命周期中,此值必须唯一 obj:Form对象。3.3.4FormIsOpened判断某个Key值的窗体是否已经打开PublicFunctionFormIsOpened(ByValsKeyAsString)sKey:Key,注意不能是form的Hwnd,在窗体的生命周期中,此值必须唯一;3.3.5CreatePortalToolbarTagImage按钮的图片actionSet分组toolbarType分组Toolbar的类型3.3.6SetFormActive使某个窗口成为当前窗口PublicFunctionSetFormActive(ByValsKeyAsString,ByValobjAsObject)sKey:Key,注意不能是form的Hwnd,在窗体的生命周期中,此值必须唯一obj:Form对象3.4挂接菜单输入VBDLL的完整类名称。VBDLL时,此项无效。这里选择VBDLL如果控制功能权限,这里就选是如果是文件夹这里选否菜单的多语名称,将在U8左树菜单里显示自动生成。输入VBDLL的完整类名称。VBDLL时,此项无效。这里选择VBDLL如果控制功能权限,这里就选是如果是文件夹这里选否菜单的多语名称,将在U8左树菜单里显示自动生成。需要idt.dll中增加记录:id=ua_menu.cmenu_idtype=0assembly=dll类名四、如何开发可与门户集成的.NETUserCusercontrol与门户集成需要建立实现IUserControl接口的组件4.1通过建立一个项目类型为类库的项目此处项目名称为UFIDA.U8.UAP.Demo.ProjectManage4.2实现接口IUserControl在该项目中添加以下DLL的引用U8安装路径\UAP\RUNTIME\UFIDA.U8.Portal.UAPFacade.dllU8安装路径\UAP\Interop.U8LoginU8安装路径\uap\UFIDA.U8.Portal.Framework.dllU8安装路径\uap\UFIDA.U8.Portal.Proxy.dllU8安装路径.Windows.Form.dllU8安装路径\uap\UFIDA.U8.Portal.Common.dll然后实现接口IuserControl:IUserControl接口有三个方法:1.2.1ControlCreateControl(U8Login.clsLoginlogin,stringMenuID,stringParamters);功能描述:该方法创建要显示的usercontrol参数描述:loginu8登陆对象,该对象不能转换成u8Login.clsLoginClass.MenuID:打开的菜单IDParamters菜单的参数描述,它是一个XML字符串其定义格式如下:<propertytype="IUserControl"id=””dllpath=”二次开发的DLL路径”classname=”二次开发的命名空间加类名”><parameters/></property>dllpath:dll的路径,要用u8soft的相对路径,最好放在uap目录下;id:UserContrl唯一标识,其值自定;type:属性值必须为"IUserControl",区分大小写;parameters:需要给程序(UserControl)传送的数据,格式自定。返回值要显示的usercontrol用法:要在门户中显示自定义的窗体,必须在此函数内实例化一个从control继承过来的对象,并且返回该对象1.2.2VoucherAction[]CreateToolbar(U8Login.clsLoginlogin);功能描述:在u8门户上创建Toolbar对象参数描述:login当前的u8登陆对象返回值toolbar对象数组VoucherAction对象是一个toolbarbutton的描述其用法如下其参数描述如下:publicVoucherAction(stringtext,stringtoolTip,boolisSystemButton,boolisHavePopedom,stringid,IActionDelegatedele,VoucherActionTypetypeName,intsortNo,stringparentKey,stringauthID);Text:button的名称toolTip:提示名称isSystemButton:是否系统按钮isHavePopedom:是否需要权限控制id:toobarbutton的ID,该ID不允许重复,如果重复则后添加的对象无效dele:action的代理对象,在该代理内实现toolbar的具体操作typeName:toolbarbutton共分四种类型,类型相同的toolbarbutton显示在同一组中sortNo:排序号parentKey:父键,如果没有则为nullauthID:权限ID用法://定义toolbar返回对象UFIDA.U8.Portal.UAPFacade.VoucherAction[]actions=newVoucherAction[2];//定义toolbar的处理事件UserActionDelegateactionDelegate=newUserActionDelegate();//实例化toolbarbutton对象actions[0]=newVoucherAction("确定","",false,false,"btnOK",actionDelegate,VoucherActionType.Normal,1,null,null);actions[0]=newVoucherAction("取消","",false,false,"btnCancel",actionDelegate,VoucherActionType.Normal,1,null,null);//返回要显示的toolbarreturnactions;1.2.3boolIUserControl.CloseEvent()功能描述:usercontrol的关闭事件参数描述:返回值是否关闭当前窗体,如果是true则关闭否则保持当前状态4.3编译该控件输出DLL编译出的DLL推荐拷贝到u8soft\uap\runtime目录下4.4替换文件替换文件:,替换到U8安装目录\UAP\RUNTIME下。3.5示例源程序代码示例源程序:。3.6挂接菜单.NETUsercontrol时,此项无效。这里选择.NETUsercontrol如果控制功能权限,这里就选是如果是文件夹这里选否菜单的多语名称,将在U8左树菜单里显示输入,只能由字母和数字组成。.NETUsercontrol时,此项无效。这里选择.NETUsercontrol如果控制功能权限,这里就选是如果是文件夹这里选否菜单的多语名称,将在U8左树菜单里显示输入,只能由字母和数字组成。形如形如<propertytype="IUserControl"id=””dllpath=”二次开发的DLL路径”classname=”二次开发的命名空间加类名”><parameters/></property>五、可执行文件(EXE)如何挂接到门户这里输入EXE文件的路径,是一个相对于U8安装路径的相对路径,举例,U8安装在E:\U8Soft,这里设置为.\EAI\U8EAI.exe,表示E:\U8Soft\EAI\U8EAI.exe。EXE时,参数无效这里选择EXE如果控制功能权限,这里就选是如果是文件夹这里选否菜单的多语名称,将在U8左树菜单里显示这里输入EXE文件的路径,是一个相对于U8安装路径的相对路径,举例,U8安装在E:\U8Soft,这里设置为.\EAI\U8EAI.exe,表示E:\U8Soft\EAI\U8EAI.exe。EXE时,参数无效这里选择EXE如果控制功能权限,这里就选是如果是文件夹这里选否菜单的多语名称,将在U8左树菜单里显示自动生成自动生成菜单的多语名称,将在U8左树菜单里显示如果是文件夹这里选否如果控制功能权限,这里就选是这里选择EXEEXE时,参数无效这里输入EXE文件的路径,是一个相对于U8安装路径的相对路径,举例,U8安装在E:\U8Soft,这里设置为.\EAI\U8EAI.exe,表示E:\U8Soft\EAI\U8EAI.exe。六、UAP表单和UAP列表如何挂接到门户形如<propertycardnum="UAPTrain_0009"type="voucher"/>的字符串,这里UAPTrain_0009为表单编号;UAP表单时,此项无效。这里选择UAP表单如果控制功能权限,这里就选是形如<propertycardnum="UAPTrain_0009"type="voucher"/>的字符串,这里UAPTrain_0009为表单编号;UAP表单时,此项无效。这里选择UAP表单如果控制功能权限,这里就选是如果是文件夹这里选否菜单的多语名称,将在U8左树菜单里显示输入,只能由字母和数字组成。这里选择UAP表单如果控制功能权限,这里就选是如果是文件夹这里选否菜单的多语名称,将在U8左树菜单里显示输入,只能由字母和数字组成。这里选择UAP表单如果控制功能权限,这里就选是如果是文件夹这里选否菜单的多语名称,将在U8左树菜单里显示输入,只能由字母和数字组成。形如<propertytype="List形如<propertytype="List"cardnum="UAPTrain_0009"><UFGeneralListid="eea90b20-4a2b-4149-8d00-820818dcd38f"/></property>的字符串,这里UAPTrain_0009为表单编号;eea90b20-4a2b-4149-8d00-820818dcd38f为表单列表IDUAP列表时,此项无效。七、如何不使用菜单调整工具增加和修改菜单7.1相关表结构7.1.1UA_Menu表结构字段名数据类型含义AutoIDuid自动编号cMenu_IdString菜单编号,自动产生,不可修改cMenu_NameString菜单名称,输入cMenu_EngString程序类型cSub_IdString模块标识,程序处理IGradeInt16级次,根据当前选中菜单程序自动处理cSupMenu_IdString上级菜单编号,根据当前选中菜单程序自动处理bEndGradeBoolean是否末级,输入,cAuth_IdString功能权限编号,程序内部处理,控制权限时有效(cAuth_Id=cMenu_Id)。iOrderInt32显示顺序号,程序处理iImgIndexInt32图标索引号,暂不用ParamtersString参数,输入,只有末级菜单才允许录入参数DependsString依赖,暂不用FlagInt标志,暂不用7.1.2UFMenu_Business_Lang表结构(菜单的多语表)字段名数据类型含义MenuId菜单标识,对应UA_Menu表的cMenu_Id值Caption菜单显示名称(简体中文名称显示的是UA_Menu表的cMenu_Name值)LocaleId语言区域ZH-CN――简体中文ZH-TW――繁体中文EN-US――英文7.2各种程序类型的增加方法7.2.1 VBDLLUA_Menu:ua_menu.cmenu_id=“UA”+顺序号ua_menu.csub_id=nullua_menu.Paramters=nullUA_Menu.cMenu_Eng=’0需要idt.dll中增加记录:id=ua_menu.cmenu_idtype=0assembly=dll类名7.2.2EXEUA_Menu:ua_menu.cmenu_id=“UA”+顺序号ua_menu.csub_id=nullua_menu.Paramters=nullUA_Menu.cMenu_Eng=’1需要idt.dll中增加记录:id=ua_menu.cmenu_idtype=1assembly=EXE文件路径(相对于U8安装的相对路径)7.2.3UAP表单处理UAP增加的菜单无意识被删除需要手工添加,或者,需要UAP菜单挂接不同位置。UA_Menu:ua_menu.cmenu_id=“UA”+顺序号ua_menu.csub_id=’UA’ua_menu.Paramters=形如<propertycardnum=”UAPTrain_0009”type=”voucher”/>的字符串,这里UAPTrain_0009为表单编号;UA_Menu.cMenu_Eng=’2不需要在idt.dll中增加记录。7.2.4 UAP处理UAP增加的菜单无意识被删除需要手工添加,或者,需要UAP菜单挂接不同位置。UA_Menu:ua_menu.cmenu_id=“UA”+顺序号ua_menu.csub_id=’UA’ua_menu.Paramters=形如<propertytype=”List”cardnum=”UAPTrain_0009”><UFGeneralListid=”eea90b20-4a2b-4149-8d00-820818dcd38f”/></property>的字符串,这里UAPTrain_0009为表单编号;eea90b20-4a2b-4149-8d00-820818dcd38f为表单列表ID;UA_Menu.cMenu_Eng=’3不需要在idt.dll中增加记录。7.2.5.NetUserControl系统定义一个接口IUserControl,只有两个属性:U8Login对象和菜单对象(对应的菜单行数据)。如果.NetUserControl需要U8Login对象必须实现这个接口,否则可以不实现这个接口。ua_menu.cmenu_id=“UA”+顺序号ua_menu.csub_id=’UA’ua_menu.Paramters=<propertytype="IUserControl"id=””dllpath=”二次开发的DLL路径”classname=”二次开发的命名空间加类名”><parameters/></property>dllpath:dll的路径,要用u8soft的相对路径,最好放在uap目录下;id:UserContrl唯一标识,其值自定;type:属性值必须为"IUserControl",区分大小写;parameters:需要给程序(UserControl)传送的数据,格式自定。UA_Menu.cMenu_Eng=’4不需要在idt.dll中增加记录。八、应用习题简述菜单调整工具的作用;开发一个VBDLL并挂接到U8门户上;第三节:界面设计与开发3.1档案开发功能介绍:能实现的功能详细介绍;使用环境:开发环境的介绍;使用说明:开发过程详细说明;应用案例:开发案例,详细说明实现的功能及实现的过程;应用技巧:开发技巧介绍;应用习题:2至3道习题;相关控件:参照/列表/MDIExtend3.2单据开发功能介绍:单据控件为实现各业务产品组中各种单据的数据处理,该控件实现数据分层处理。单据控件以OCX提供给各个业务模块使用(包括WEB组)业务组在使用前初始化单据控件,最终业务模块从单据控件取得数据按各自的业务规则检查合法后保存。 U870版本的单据控件有以下新特性:支持Web 对后台数据实现分层处理支持各种模版样式支持无表体单据样式支持无表头单据样式数据更新状态智能标记支持表头、表体附件表体汇总表体批量修改使用环境:支持环境为U870以上版本使用说明:在VB中引用单据控件在VB中点击主菜单中的“工程->部件”或者直接按Ctrl+T热键,随后出现的“部件”对话框中选中“UAPVoucherControl85”,然后点击“确定”,左侧的工具条中将出现该控件的图标,如下图所示:OCX文件的方法函数图例如下:单据控件的主要属性BackColor,BackColorBkg,BackColorFixed,BackColorSel,BackColorTotal属性:返回或设置单据控件不同的背景颜色语法:voucher.BackColor[=color]
voucher.BackColorBkg[=color]
voucher.BackColorFixed[=color]
voucher.BackColorSel[=color]voucher.BackColorTotal[=color] 参数说明:参数描述Voucher单据控件名称Color一个指定的颜色值 备注: 下图为Voucher属性设置效果 Example: Note:如要设置这些属性值,必需在设置完模板数据后再设置才能起作用。PrivateSubForm_Load()Timer1.Interval=500EndSubPrivateSubTimer1_Timer()Voucher1.BackColorBkg=QBColor(Rnd*15)Voucher1.BackColorFixed=QBColor(Rnd*10)Voucher1.BackColorSel=QBColor(Rnd*10)Voucher1.BackColorSelTotal=QBColor(Rnd*10)EndSub Col,Row,ColSel,RowSel属性返回或设置当前表体活动单元格的行列坐标,此属性在设计状态不可用。语法:voucher.Col[=number]
voucher.Row[=number]参数说明: 参数描述Voucher单据控件名称number一个指定的指定活动单元行列的数值备注: 使用Col、Row属性来指定活动单元格,Col>0,Row>0,Col<Cols,Row<Rows。 设置完Col,Row值后ColSel和RowSel将自动变更成Col,Row,更说细的说明。 请参照MSDN Examples: PublicSubCommand_Click() Voucher.Col=50 Voucher.Row=20 Debug.PrintVoucher1.Col Debug.PrintVoucher1.Row Debug.PrintVoucher1.ColSel Debug.PrintVoucher1.RowSel EndSubTitleCaption,TitleFont,TitleForeColor,ToolTipText返回或设置标题各项属性值语法:voucher.TitleCaption[=string]
voucher.TitleFont[=font]
voucher.TitleForeColor[=color]
voucher.ToolTipText[=string] 参数说明:参数描述Voucher单据控件名称Color一个指定的颜色值string字符串表达式Font指定的字体对象 注: 这些属性的赋值操作必须在setTemplateData方法后,否则你的操作将会得不到处理(因为你的这些操作会被setTemplateData方法覆盖)。Left,Top,Width,Height属性返回或设置单据控件大小属性语法:voucher.Left[=value]
voucher.Top[=value]
voucher.Widht[=value]
voucher.Height[=value] 参数说明:参数描述Voucher单据控件名称value数值备注: 在执行完setTemplateData方法后,setTemplateData会按照单据设计设计的宽度和高度自动设置Width和Height属性。HeadText属性 设置或返回表头项目的值
语法: voucher.HeadText(Index)=[=string]
参数
描述
Voucher
单据控件名称
Index下标,可以是数值,也可是关键字,用来标识表头项目
string
字符串或数值
Example: PublicSubCommand1-_Click() Voucher.headText(1)=‘用友软件公司’ Voucher.headText(‘cCusName’)=‘用友软件公司’cCusName=‘客户名称’ EndSub 备注: 如果你要设置的项目(Index)不存在,单据控件将会产生一个错误,具体的错误信息可以通过GetLastError方法得到。
BodyText属性 设置或返回表体项目的值
语法: voucher.HeadText(RowasLong,ColasVariant)=[=string] 参数
描述
Voucher
单据控件名称
Row数值,表示表体里的哪一行
Col
可变体,可以是列,也可用关键值来表示表体里的哪一行。
String字符串表达式
Example: PublicSubCommand1-_Click() Voucher.bodyText(1,1)=‘用友软件公司’ Voucher.headText(1,‘cCusName’)=‘用友软件公司’cCusName=‘客户名称’ EndSubBodyColWidth属性 设置表体指定行的宽度
语法: voucher.BodyColWidth(ColasVariant)=[=value] 参数
描述
Voucher
单据控件名称
Col
可变体,可以是列,也可用关键值来表示表体里的哪一行。
value数值
Example: PublicSubCommand1-_Click() Voucher.bodyColWidth(1)=300 Voucher.bodyColWidth(‘cCusName’)=300,cCusName=‘客 户名称’ EndSub 备注: 有些属性用来给程序员动态的控制单据表体的某一列显示。请在做具体的操作时,考虑用户权限的问题。BodyMaxRows返回或设置表体可输入的最大行数
语法: voucher.BodyMaxRows[=Value]参数
描述
PublicSubCommand1- _Click()Voucher.bodymaxRows=2 表体最多可以输入2行数据 EndSubBodyRows返回当前表行数据行的总数(只包括有数据的行)语法:voucher.BodyRows[=Value]参数
描述
PublicSubCommand1-_Click() Debug.printvoucher.bodyRowsEndSub
m_sPrintEntir设置打印环境变量
语法: voucher.m_sPrintEntir=[string] 在单据打印的时候用户可以将单前打印机设置保存起来,以备下次打印的时候不需要重新设置。备注: 该属性只为Web模式设置,C/S结构另(详见DEMO)。
MultiLineSelect返回或设置是否是多行选择
语法: voucher.MultiLineSelect=[Boolean]备注: 在表体参照的时候如果你需要参照返回多条数据时,在你参照前请记得先把该属性设置为TRUE,参照完成后记得一定要把改属性设置成FALSE (如果不进行处理,有可能会产生单据单据不能离开焦点的BUG)。单据控件的主要方法setTemplateData方法功能:设置单据控件的模版数据记录集,在第一次初始化单据控件时,必须设置单据模版数据。语法: PublicSubsetTemplateData(rstTemplateAsRecordset)参数: rstTemplate:单据模版数据结果记录集
备注:本操作是将单据设计好的结果集传递给单据控件进行显示界面初始化处理。包括定位、模版信息。该数据结果集是能过调用单据控件后台服务来获得的例子: PublicSubCommand1-_Click() Dimo asObject DimrstasRecordset Seto=CreateObject(‘UFVoucherServer85.clsVoucherTemplate’) IfoisnothingthenExitSub ‘如果创建对象Fail,则退出 Setrst=o.GetTemplateData2(数据库连接(Connection),单据(CardNumber),模版号(VT_ID)) Voucher.SetTemplateData(rst) ‘设置模版 EndSub
AddLine方法PublicSubAddLine(optionalnRowasLong,OptionsLineasString=’‘OptionRelativeasAddLineState=ALSLast)DelLine方法
功能: 单据表体删除指定的行,如果没指定行删除当前所在的行。语法: PublicSubDelLine(OptionalByvalnRowasLong)参数:nRow为单据表体的具体行号返回值:无
AddNew方法功能:增加一张新单据
语法:PublicSubAddNew(ByvaleModeasAddNewMode)参数:eMode为新增时的增加模式返回值:无
备注: 增加一张新单据,实际上就是将表头对象(Header)和表体对象(Body)中各项目的值据增加模式清空。在增加一张新的单据时,应先调用。GetVoucherDataXML方法功能:得到单据数据DOM对象语法: PublicSubgetVoucherData(oDomheadAsVariant,oDomBodyAsVariant)参数: rstHeader: 表头数据DOM对象(MSXML.DOMDocument对象) rstBody: 表体数据DOM对象(MSXML.DOMDocument对象)返回值:无
备注:更新数据(从控件生成DOMDocumetn对象)
GetLineDom方法功能:返回当前或指定行的Dom对象(得到表体一行的全部Dom数据对象)语法: PublicFunctionGetLineDom(OptionalByValnRowAsLong=0)AsDOMDocument
参数: nRow指定的行Index,缺省为0,即取当有Mouse所在行的数据返回值:DOMDocument对象PrintVoucherEx方法功能:打印单据数据
语法: PublicFunctionPrintVoucherEx(ByValrsTemplateAsVariant,ByValrsFieldAsVariant,OptionalByValbShowPrintDlgAsBoolean=True)AsLong参数:rsTemplate[IN]记录集 单据模版数据(必需通过单据后台服务提供)rsField [IN]记录集固定文本数据(必需通过单据后台服务提供)bShowPrintViewDlg[IN]布尔值是否显示打印对话框返回值: 如果打印成功返回0,否则返回非0,具体的错误信息请参考打印控件(ErrorTable)例子:PublicSubCommand1-_Click() Dimo asObject DimrsTemplateasRecordset DimrsField asRecordset Seto=CreateObject(‘UFVoucherServer85.clsVoucherTemplate’) IfoisnothingthenExitSub ‘如果创建对象Fail,则退出 SetrsTemplate=o.GetTemplateData2(数据库连接(Connection),单据(CardNumber),模版号(VT_ID)) SetrsField=o.GetFixedData(数据库连接字符串(String),模版号(VT_ID)) Callvoucher.PrintVoucherEx(rsTemplate,rsField,True) ’显示打印对话框EndSubExportToFile方法
功能:导出单据单据数据到指定的文件
语法: PublicFunctionExportToFile(ByValrsTemplateAsVariant,ByValrsFieldAsVariant)AsBoolean参数:rsTemplate[IN]记录集 单据模版数据(必需通过单据后台服务提供)rsField [IN]记录集固定文本数据(必需通过单据后台服务提供)返回值: 如果导出成功返回0,否则返回非0,具体的错误信息请参考打印控件(ErrorTable)。例子:PublicSubCommand1-_Click() Dimo asObject DimrsTemplateasRecordset DimrsField asRecordset Seto=CreateObject(‘UFVoucherServer85.clsVoucherTemplate’) IfoisnothingthenExitSub ’如果创建对象Fail,则退出 SetrsTemplate=o.GetTemplateData2(数据库连接(Connection),单据(CardNumber),模版号(VT_ID)) SetrsField=o.GetFixedData(数据库连接字符串(String),模版号(VT_ID)) Callvoucher.ExportToFile(rsTemplate,rsField) ‘导出文件EndSub
单据控件的主要事件BodyBrowUser当用户单击表体参照时产生此事件语法:PrivateSubvoucher_bodyBrowUser(ByValrowAsLong, ByValcolAsLong,sRetAsvariant)EndSub参数说明: 参数描述Voucher单据控件名称row下标col下标(可用关键字)sRet返回值BodyCellCheckBodyCellCheckWeb表体数据发生该变,需要数据检查时发生此事件 语法:PrivateSubVoucher_bodyCellCheck(RetValueAsString,bChangedAsVoucherControl85.CheckRet,ByValrAsLong,ByValcAsLong)EndSub参数说明: 参数描述Voucher单据控件名称RetValue返回当前单元的值bChanged数据检测是否居功row下标col下标(可用关键字)Click当用户在单据控件上单击时产生此事件
DblClick当用户在单据控件上双击时产生此事件
KeyDown,KeyPress,KeyUp,MouseDown,MouseMove,MouseUp 鼠标及键盘响应事件
BillNumberChecksucceed在设置单据编号规则后,如果当前单据满足了编号规则后,将会激活当前事件
AddNewLineEvent当调用AddLine方法时,该事件将会产生应用案例:表头附件1)
Toolbar增加按钮附件 按钮响应事件代码 Me.ctlVoucher1.SelectFile() 需要根据自己单据的状态设置按钮的状态 2)
单据保存部分 在原来的单据内容保存完成以后,事务提交以前增减保存附件的代码 DimcnnAsNewADODB.Connectioncnn.Openm_strConnectDimErrDescAsStringDimblnsaveAccAsBooleanDimstrXmlAsStringstrXml=ctlVoucher1.GetAccessoriesInfo(ErrDesc)IfErrDesc<>""ThenMsgBoxErrDescEndIf Dimm_oServerasUFVoucherServer85.clsVoucherTemplateDimobjDocAsNewMSXML2.DOMDocument30CallobjDoc.loadXML(strXml)CallobjDoc.documentElement.setAttribute("VoucherTypeID","88")CallobjDoc.documentElement.setAttribute("VoucherID","01")strXml=objDoc.xml setobjDoc=nothingCallm_oServer.SaveAccessories(strXml,cnn,ErrDesc)IfErrDesc<>""ThenMsgBoxErrDescEndIf备注:蓝字部分如果不是新增,则可以不写 VoucherTypeID如果没有更改(即和单据模版一致)也可以不用设置VoucherID表示单据主键值的value,可以是组合2005001{#}003,顺序和前面的vchtblPrimarykeyNames顺序一致如果是单据删除,Callm_oServer.SaveAccessories(strXml,cnn,ErrDesc)删除附件strXML="<DataAccessoriesChanged='1'Deleted='1'VoucherTypeID='88'VoucherID='001'/>"3)
初始化模版代码部分'设置单据数据源对象单据数据源对象是单据的数据访问组件,web版使用的时候需要自己实现这个接口Dimm_oDataSourceAsObjectSetm_oDataSource=CreateObject("IDataSource.DefaultDataSource")Ifm_oDataSourceIsNothingThenMsgBox"设置单据数据源对象Fail!",vbCritical,"渣昫"EndIfm_oDataSource.SetLoginm_oLoginSetctlVoucher1.SetDataSource=m_oDataSource表体附件1:870单据格式设计器中可以设置字段的参照类型,需要指定一个文本字段的参照类型为附件 2:需要配置应用服务器的文件服务器设置。 3:如果需要显示的支持该功能,需要在单据模板中增加一条文本类型,参照类型为附件的记录表体定位1:Toolbar增加按钮定位 2:按钮响应事件代码 ctlVoucher1.ShowFindDlg 需要根据自己单据的状态设置按钮的状态表体固定行 单据控件设计态时设置ShowFIxColer=true表体排序 单据控件设计态时设置ShowSorter=true表体汇总1:Toolbar增加按钮汇总2: 按钮响应事件代码CallctlVoucher1.SHowAggregateSetupDlg 需要根据自己单据的状态设置按钮的状态,只有在查看状态可用。表体批改Me.ctlVoucher1.ShowBatchModify()开发案例,详细说明实现的功能及实现的过程;应用技巧:单据控件是一个标准的ocx控件,使用的过程符合标准ocx的方法。应用习题:习题1 实现表体汇总功能习题2 实现表头附件功能答案参考代码实例 光盘samplecode下VoucherDemo3.3打印控件功能介绍:XMLPrintControl是一个独立的,但同时又具有一定针对性的报表打印控件,它根据指定的XML格式文件(或字符串)对指定的XML数据文件(或字符串)进行格式化输出,本身基本不做任何数据的处理,不涉及任何业务逻辑,也不与任何数据库进行交互。也就是说,一旦你对控件指定了源格式XML和数据XML,那么通过控件得到的打印预览输出和打印输出也就唯一确定了。从这一点来看,本控件类似于IE、Mozilla等浏览器对纯HTML文本进行的解释。XMLPrintControl的格式化输出依赖与上述的两个XML文件(或字符串,下同,以后不再注明),任何报表或者其他类似文件,如果希望使用本控件来打印的话,都必须先将格式和数据分别组织成满足本控件预定义格式的XML文件。XMLPrintControl以ocx的形式封装,是一个进程内的COMServer,并支持嵌入到WEB中使用。使用环境:支持870以上开发环境使用说明:在VB中引用打印控件在VB中点击主菜单中的“工程->部件”或者直接按Ctrl+T热键,随后出现的“部件”对话框中选中“PrintControlActiveXControlmodule”,然后点击“确定”,左侧的工具条中将出现该控件的图标,如下图所示:如下图:需要注意的是,基于特定的理由,本控件取消了“运行时不显示”的特性,因此,为了防止运行时显示出控件本身的窗口,应该在控件的属性窗口中设定Visible为FALSE,如图: OCX文件的方法函数图例如下:打印控件的主要功能:绑定绑定XML文件页面设置打印预览打印输出到文件型数据库
打印控件方法介绍SetDataStyleXMLPageSetupPrintPreviewDoPrint
ExportToFilePrintExAboutBox
SetDataStyleXML为控件绑定格式和数据XML文件(或字符串)。本方法是使用其他方法的先决条件(AboutBox方法除外)。语法:
longSetDataStyleXML( VARIANTvarDataXML, booleanbDataIsFile, VARIANTvarStyleXML, booleanbStyleIsFile, VARIANTvarModuleID);SetDataStyleXML参数:
varDataXML 字符串 指明数据XML,含义由bDataIsFile决定。 bDataIsFile 布尔值 如果为True,表示varDataXML为数据XML文件的绝对路径或者相对路径;如果为False,表示varDataXML为数据XML字符串本身。 varStyleXML 字符串指明格式XML,含义由bStyleIsFile决定。 bStyleIsFile 布尔值 如果为True,表示varStyleXML为格式XML文件的绝对路径或者相对路径;如果为False,表示varStyleXML为格式XML字符串本身。 varModuleID 字符串 模版ID。 本参数可由调用者自由定义,用做开始打印时的打印任务名,可以为空,但建议使用有意义的字符串标识打印任务。
返回值:
长整形,0表示成功,非0表示错误调用控件的SetDataStyleXML方法的示例代码如下:OptionExplicitPrivateSubbtnBind_Click()DimlRetAsLongDimsDataAsStringDimsStyleAsStringDimsModuleIdAsStringsData=txtData.TextsStyle=txtStyle.TextsModuleId=txtModuleID.TextlRet=printer.SetDataStyleXML(sData,True,sStyle,True,sModuleId)MsgBoxlRetEndSub如果使用XML文件作为输入(上例中),那么sData和sStyle为文件的路径(绝对路径和相对路径均可),如果以XML字符串作为输入,那么sData和sStyle为XML字符串本身,同时第2和第四个参数应为False。sModuleId为单据的模版名(注:本控件使用该字符串作为打印任务名,并为使用者提供一个区别各类格式XML的标志)。关于本方法的详细说明请参考“XMLPrintControl控件参考”的“XMLPrintControl方法参考”部分。ExportToFile将XML的内容输出到其他格式的文件(一般指文件型数据库),支持输出到rep文件(需要PrnExtension.DLL)。
语法:
longExportToFile(longlJobId,VARIANTvarColType, VARIANTvarColSize, VARIANTvarColName, VARIANTvarTempDBPath);参数:
lJobId 长整形 指定需要输出的任务ID,即XML数据文件包含多个任务时的第几个任务,第一个任务ID为0。
varColType 字符串 该参数指定输出时各个字段的类型,各个字段类型之间用英文逗号隔开,组成字段类型字符串,并且中间不能有空格。例如:(10,10,5,5)表示总共有4个字段,各字段类型分别为:字符串(dbText)、字符串、货币(dbCurrency)和货币。 varColSize 字符串 该参数指定各个字段的大小,同样,各个字段大小之间用英文逗号?,?隔开(中间不允许有空格),组成字段大小字符串,并与字段类型字符串相对应。对应于前例,字段大小字符串为(50,50,8,8),表示第一个文本型字段的大小为50字节,第二个文本型字段大小也为50字节,后两个货币金额型字段大小均为8个字节。 varColName 字符串 该参数指定各个字段的字段名用于输出。各个字段名之间用英文逗号隔开(中间不能有空格,否则空格将被认为是字段名的一部分),组成字段名字符串。绑定了格式和数据之后,可以使用ExportToFile方法将数据中表体的内容导出到系统中已安装有ISAM驱动的文件型数据库中,例如dBase,Foxpro,Excel,HTML文件,Text文件,Lotus,Paradox,Access等,如以下示例代码:PrivateSubbtnExport_Click()DimsTypeListAsStringDimsSizeListAsStringDimiAsLongDimeAsLongi=0sTypeList="10,10,5,5"sSizeList="50,50,8,8"e=printer.ExportToFile(i,sTypeList,sSizeList,"","")MsgBoxeEndSub该方法将XML数据文件中表体的内容根据指定的字段类型,字段大小和字段名(如果没有提供字段名,将使用表格头固定行最后一行的各列名作为字段名)导出到用户指定的其他格式文件。该方法将弹出一个文件保存对话框,在这个对话框中,用户可以选择导出文件类型并填写文件名,如下图所示:PageSetup绑定完数据和格式之后可以使用PageSetup方法进行页面设置,如以下示例代码:PrivateSubbtnPageSetup_Click()printer.PageSetupEndSub以上方法将显示如下所示的对话框: 在本对话框中可以设置各种打印格式。关于本方法的详细说明请参考“XMLPrintControl控件参考”的“XMLPrintControl方法参考”部分。PrintPreview绑定了格式和数据以后,可以使用PrintPreview方法查看打印预览,如以下示例代码:PrivateSubbtnPreview_Click()printer.PrintPreviewEndSub该方法将显示一个打
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 堇青石多色性鉴定报告
- 跨境电商的营销策略与运营技巧
- 文化传承与保护:传统文化的数字化保存
- 港口码头建设项目代建管理要点分析
- 生产管理培训手册:提升生产效率与质量
- 通信网络建设中的质量优化策略
- 电能监控与智能化管控技术应用
- 教育信息化与智慧教育探讨报告
- 健康医疗科技发展与应用前景
- 文化创意产业发展趋势与案例分析
- 新编护理三基复习测试题
- 社会体育指导员合作协议
- GB 4234.2-2024外科植入物金属材料第2部分:纯钛
- 眼袋手术课件
- 计算机二级WPS考试题及答案
- 手部卫生要讲究学会洗手剪指甲一年级综合实践活动课件
- DL-T5024-2020电力工程地基处理技术规程
- DZ∕T 0153-2014 物化探工程测量规范(正式版)
- 开荒保洁合同保洁开荒合同范本
- 地震应急演练实施方案村委会
- 育苗温室大棚施工组织设计方案-2
评论
0/150
提交评论