U8门户开发手册DOC_第1页
U8门户开发手册DOC_第2页
U8门户开发手册DOC_第3页
U8门户开发手册DOC_第4页
U8门户开发手册DOC_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、1. 功能概述如何使伙伴二次开发的程序很好地和U8产品集成在一起?需要满足什么条件的程序才能和门户集成?如何开发一个满足这个条件的程序?本文将为您解答这些问题。2. 名词解释功能:调整菜单位置;新增、修改、删除菜单(除U8系统菜单外)。菜单调整工具在UAP中,通过菜单“工具>菜单调整工具”进入。位置:在U8安装目录的Portal目录里。该文件其实是一个xml文件,可以用任何文本编辑器打开。其内容描述了双击每个末级菜单项目时需要调用的物理程序。在872版本里,idt.dll并不在安装盘里,而是U8门户第一次运行时通过UFSystem.UA_IDT表里的内容动态生成的。当UFSystem.U

2、A_IDT有变化时,U8门户会重新生成idt.dll文件。有了这种机制后,菜单调整工具就可以通过维护UFSystem.UA_IDT里的内容,从而达到维护idt.dll的目的。3. 如何开发可与门户集成的VB dll引用工程UFPortalProxyInterface文件位置:U8安装路径相关代码修改clsProductFacade文件为门户的入口文件,即在idt.dll文件后assembly项所对应的类名。如下所描述的:<idt id=Test01 type=0 assembly=TestU8Prj.clsProductFacade/>assembly属性描述的对应类要实现接口IL

3、oginalbe。比如idt.dll中描述了如下信息:<idt id=Test01 type=0 assembly=TestU8Prj.clsProductFacade/>则要在clsProductFacade中实现ILoginable接口。即用代码:然后在该接口的实现函数中转发调用原先工程中的Login,CallFunction,Logoff三个方法,具体参见后附的例子。在左树启动一项命令时依次调用Login和CallFunction。在门户退出或在权限管理中结束该产品时调用LogOff。子系统必须自己维护是否已经进行了子系统登录过程,业务系统须维护子系统是否已经登录。Login

4、对象从g_business中通过调用GetVBclsLogin方法获得。各接口含义如下:1、Login接口( Private Function ILoginable_Login() As Boolean ),不管弹出的是模式窗体还是非模式窗体,此接口在成功登录后须返回True,而且要保证登录成功后,第二次调用此接口时也要返回True。只有在登录失败后方可返回False。也就是说此接口返回值的含义是是否已经成功登录子系统。2、LogOff接口( Private Function ILoginable_LogOff() As Boolean ),此接口的含义是执行LogOff过程,如查成功使该子系

5、统牌LogOff状态返回True,否则返回False。也就是说,如果该子统还未登录,则真接返回False就可以了。如果系统处于已经登录的过程,则执行业务组原有所需的LogOff过程,如果执行功能,正确LogOff了子系统,则返回True,否则返回False。如果在实际程序中没有此过程,则直接返回True即可。3、CallFunction接口(Private Function ILoginable_CallFunction() As Boolean)。如果861产品没有子系统登录过程的产品,此值须返回True.4、对于显示模式窗体的产品,如果已经申请了任务,请在模式窗体退出时自已清除任务。实现这

6、三个方法的例子如下:Private Function ILoginable_Login() As BooleanIf g_bLogined = True ThenILoginable_Login = TrueExit FunctionEnd IfIf (Not g_business Is Nothing) And g_bLogined = False) ThenDim oLoginTmp As ObjectSet oLoginTmp = g_business.GetVBclsLogin()Set g_oLogin = oLoginTmpILoginable_Login = Login(oLog

7、inTmp)If (ILoginable_Login = True) Theng_bLogined = TrueEnd IfElseILoginable_Login = Not g_business Is NothingEnd IfEnd FunctionPrivate Function ILoginable_LogOff() As BooleanIf (g_bLogined = True) ThenILoginable_LogOff = LogOff()If (ILoginable_LogOff = True) Theng_bLogined = FalseEnd IfElseILoginab

8、le_LogOff = TrueEnd IfEnd Function.1增加Business属性可读可写,且对大小写敏感。此属性维护一个对于此业务工程全局变量,以实现和VB程序和870Portal的交互。参考实现如下:Public Property Get Business() As ObjectSet Business = g_businessEnd PropertyPublic Property Set Business(busVal As Object)Set g_business = busValEnd Property.2增加全局变量新建一module文件,并加入如下全局变量:Pub

9、lic g_business As ObjectPublic g_bLogined As Boolean三种窗体.1修改嵌入Portal的窗体文件原来有MdiExtender控件的窗体要嵌入Portal的窗体修改方法:调用CreateFormEnv方法调用ShowForm方法每个窗体都要有方法ExitForm.2修改第一次弹出就是模态的窗体可以直接使用通过采用VB窗体的Form.Show (vbModal)的方式,也调用ShowForm方法来显示此窗体。.3由嵌入Portal的窗体弹出的窗体,不作修改,如果是模式窗体,请在此窗体上加入UFFormPartner控件 UFToolbar的修改.1

10、在Settoolbar之前将g_business传入.2在Settoolbar之前设置Tag信息设置微软Toolbar每个Button的Tag信息调用CreatePortalToolbarTag方法设置示例button.Tag = CreatePortalToolbarTag(“ICON_NEW”,”ICOMMON”,”PortalToolbar”) 注意: 严禁创建多次人机工程部给出完整的图标,并制定相应文件的命名规格放在%U8SOFT%的icons目录下直接使用图标的文件名(不需扩展名)常用(ICOMMON):如打开、保存等编辑(IEDIT):如增行、拷贝单元格等处理(IDEAL):如审核

11、、分单等查询(ISEARCH):如过滤、联查等PortalToolbar,目前填入此值即可。.3在窗体的Unload事件中加入Set UFToolbar1.Business = Nothing中间过程.1判断窗体是否打开FormIsOpened.2设置并激活某个已经存在的窗体SetFormActive.3在显示过程中(窗体已经显示)关闭自身窗体CloseForm程序已经修改,双击门户节点时没有反应,调用状态进不了VB程序;未正确修改clsProductFacade文件;窗体已经嵌入到Portal中,但Toolbar的相关信息未转移到门户的工具栏上;是否正确设置了每个Button的Tag信息;

12、ShowForm显示嵌入Portal的窗体Public Function ShowForm(ByVal obj As Object, ByVal SubID As String, ByVal sKey As String, Optional modalable As Boolean = False, Optional DockToProtal As Boolean = True, Optional ByVal vfd As Object) As Stringobj: Form对象;SubID: 子产品号;sKey: Key,注意不能是form的Hwnd,在窗体的生命周期中,此值必须唯一;mod

13、alable: 该窗体是否为Model窗口;DockToProtal : 是否要嵌入到Portal中;vfd: 由CreateFormEnv对象的返回对象; CreateFormEnv初始化嵌入Portal的环境Public Function CreateFormEnv(ByVal sKey As String, ByRef formObj As Object) As VBFormDescriptorsKey: Key,注意不能是form的Hwnd,在窗体的生命周期中,此值必须唯一;formObj: Form对象 CloseForm关闭一个已经打开的窗体Public Function Clos

14、eForm(ByVal sKey As String, ByVal obj As Object)sKey: Key,注意不能是form的Hwnd,在窗体的生命周期中,此值必须唯一obj: Form对象。FormIsOpened判断某个Key值的窗体是否已经打开Public Function FormIsOpened(ByVal sKey As String)sKey: Key,注意不能是form的Hwnd,在窗体的生命周期中,此值必须唯一;CreatePortalToolbarTag创建Toolbar的Tag信息Public Function CreatePortalToolbarTag(Im

15、age As String, actionSet As String, toolbarType As String) As StringImage按钮的图片actionSet分组toolbarType分组Toolbar的类型SetFormActive使某个窗口成为当前窗口Public Function SetFormActive(ByVal sKey As String, ByVal obj As Object)sKey: Key,注意不能是form的Hwnd,在窗体的生命周期中,此值必须唯一obj: Form对象菜单的多语名称,将在U8左树菜单里显示如果是文件夹这里选否这里选择VB DLLV

16、B DLL时,此项无效。输入VB DLL 的完整类名称。自动生成。4. 如何开发可与门户集成的.NET User C user control与门户集成需要建立实现INetUserControl接口的组件此处项目名称为继承门户中类NetLoginable在该项目中添加以下DLL的引用U8安装路径Framework.dllU8安装路径Interop.dll U8安装路径Interop.dll U8安装路径PortalU8安装路径PortalU8安装路径Portal在项目中新建一个类,该类需要继承类NetLoginable,并重写其中的两个方法,示例如下:publicoverr

17、ideobject CallFunction(string cMenuId, string cMenuName, string cAuthId, string cCmdLine)INetUserControl mycontrol = newMyNetUserControl(); mycontrol.Title = "SSSS"base.ShowEmbedControl(mycontrol, cMenuId, true);returnnull;publicoverridebool SubSysLogin()Return true;4.3 实现接口INetUserControl

18、在项目中再新建一个类,该类实现接口INetUserControl,INetUserControl接口有三个属性(EditorPart、EditorInput、Title)和三个方法(CreatControl、CreatToolbar、CloseEvent),详细说明:EditorPart属性原型声明:NetEditorEditorPart get;set;对于二次开发人员 ,这个是只读属性,严禁为该属性赋值。通过这个属性,二次开发人员可以访问UAP表单在门户中显示的页签对象,可以执行页签关闭等操作。4.3.2EditorInput属性原型声明:NetFormInputEditorInput g

19、et;set;对于二次开发人员 ,这个是只读属性,严禁为该属性赋值。通过这个属性,二次开发人员可以访问门户工具栏上的按钮。 Title属性原型声明:stringTitle get;set;对于二次开发人员,可以设置这个属性,设置该属性后,属性值即打开单据后相应的页签标题。CreateControl 方法原型:/<summary>/创建UserControl对象/</summary>/<param name="login">u8Login对象</param>/<param name="MenuID"&g

20、t;菜单ID</param>/<param name="Paramters">菜单自定义参数</param>/<returns>显示的usercontrol</returns> System.Windows.Forms.Control CreateControl(U8Login.clsLogin login, string MenuID, string Paramters); 功能描述: 该方法创建要显示的usercontrol 参数描述: login u8登陆对象,该对象不能转换成u8Login.clsLogin

21、Class.MenuID: 打开的菜单IDParamters 菜单的参数描述,它是一个XML字符串 其定义格式如下: <property type="IUserControl" id=” dllpath=”二次开发的DLL路径” classname=”二次开发的命名空间加类名” ><parameters/></ property>dllpath:dll的路径,要用u8soft的相对路径,最好放在uap目录下;id:UserContrl唯一标识,其值自定;type:属性值必须为"IUserControl",区分大小写;p

22、arameters:需要给程序(UserControl)传送的数据,格式自定。返回值 要显示的usercontrol 用法: 要在门户中显示自定义的窗体,必须在此函数内实例化一个从control继承过来的对象 ,并且返回该对象CreateToolbar方法原型:/<summary>/创建toolbar对象/</summary>/<returns>返回对象</returns>VoucherAction CreateToolbar(U8Login.clsLogin login);功能描述:在u8门户上创建Toolbar对象参数描述: login 当前

23、的u8登陆对象 返回值 toolbar对象数组VoucherAction对象是一个toolbar button的描述其用法如下其参数描述如下:public VoucherAction(string text, string toolTip, bool isSystemButton, bool isHavePopedom, string id, IActionDelegate dele, VoucherActionType typeName, int sortNo, string parentKey, string authID);Text:button的名称toolTip:提示名称isSyst

24、emButton:是否系统按钮isHavePopedom:是否需要权限控制id:toobar button的ID,该ID不允许重复,如果重复则后添加的对象无效dele:action的代理对象,在该代理内实现toolbar的具体操作typeName: toolbar button共分四种类型,类型相同的toolbar button显示在同一组中sortNo:排序号parentKey:父键,如果没有则为nullauthID:权限ID用法:/定义toolbar返回对象UFIDA.U8.Portal.UAPFacade.VoucherAction actions = new VoucherAction

25、2;/定义toolbar的处理事件 UserActionDelegate actionDelegate = new UserActionDelegate(); /实例化toolbar button对象 actions0 = new VoucherAction("确定", "", false, false, "btnOK", actionDelegate, VoucherActionType.Normal, 1, null, null); actions0 = new VoucherAction("取消", &quo

26、t;", false, false, "btnCancel", actionDelegate, VoucherActionType.Normal, 1, null, null);/返回要显示的toolbar return actions;4.3.6CloseEvent方法原型:/<summary>/关闭事件/</summary>/<returns></returns>bool CloseEvent();功能描述:usercontrol的关闭事件参数描述: 返回值 是否关闭当前窗体,如果是true则关闭 否则保持当前状

27、态4.4 编译该控件输出DLL 编译出的DLL推荐拷贝到u8softuapruntime目录下示例源程序:。4.6 挂接菜单为二次开发编译后的dll存放路径,是一个相对于U8安装目录的相对路径继承了NetLoginable类的类名称(包含命名空间)参数不填即可。菜单的多语名称,将在U8左树菜单里显示这里选择.NET Usercontrol如果是文件夹这里选否在挂接菜单后,还需要在UFSystem库中的ua_idt表中添加一条记录,(uap已经自动添加)insertinto ua_idt (id,assembly,catalogtype,type,class)values('test&#

28、39;,'.uapruntimeUFIDA.U8.Portal.NetProductSample.dll',0,2,'UFIDA.U8.Portal.NetProductSample.MyLoginable')其中:'test'为挂架菜单的菜单编号;'.uapruntimeUFIDA.U8.Portal.NetProductSample.dll'为二次开发编译后的dll存放路径。'UFIDA.U8.Portal.NetProductSample.MyLoginable'为二次开发中继承了NetLoginable类的

29、类名称(包含命名空间)。5. 可执行文件(EXE)如何挂接到门户1、打开菜单调整工具;2、鼠标选中需要挂接的文件夹(如果没有可以用菜单调整工具新建文件夹),点新增按钮;3、自动生成菜单的多语名称,将在U8左树菜单里显示如果是文件夹这里选否这里选择EXEEXE时,参数无效这里输入EXE文件的路径,是一个相对于U8安装路径的相对路径,举例,U8安装在E:U8Soft,这里设置为,表示E:U8Soft。4、保存后,自动生成一个菜单编号,这里是UA8;6、UAP表单和UAP列表如何挂接到门户1、挂接UAP表单输入,只能由字母和数字组成。菜单的多语名称,将在U8左树菜单里显示如果是文件夹这里选否这里选择

30、UAP表单UAP表单时,此项无效。形如<property cardnum="UAPTrain_0009" type="voucher"/>的字符串,这里UAPTrain_0009为表单编号;2、挂接UAP列表UAP列表时,此项无效。形如<property type="List" cardnum="UAPTrain_0009"><UFGeneralList id="eea90b20-4a2b-4149-8d00-820818dcd38f"/></prope

31、rty>的字符串,这里UAPTrain_0009为表单编号;eea90b20-4a2b-4149-8d00-820818dcd38f为表单列表ID这里选择UAP列表菜单的多语名称,将在U8左树菜单里显示如果是文件夹这里选否输入,只能由字母和数字组成。7. 如何不使用菜单调整工具增加和修改菜单7.1 相关表结构UA_Menu表结构字段名数据类型含义AutoIDuid自动编号cMenu_IdString菜单编号cMenu_NameString菜单名称,输入cMenu_EngString程序类型cSub_IdString模块标识,程序处理IGradeInt16级次,根据当前选中菜单程序自动处理

32、cSupMenu_IdString上级菜单编号,根据当前选中菜单程序自动处理bEndGradeBoolean是否末级,输入,cAuth_IdString功能权限编号,程序内部处理,控制权限时有效(cAuth_Id= cMenu_Id)。iOrderInt32显示顺序号,程序处理iImgIndexInt32图标索引号,暂不用ParamtersString参数,输入,只有末级菜单才允许录入参数DependsString依赖,暂不用FlagInt标志,暂不用UFMenu_Business_Lang表结构(菜单的多语表)字段名数据类型含义MenuId菜单标识,对应UA_Menu表的cMenu_Id值C

33、aption菜单显示名称(简体中文名称显示的是UA_Menu表的cMenu_Name值)LocaleId语言区域ZH-CN简体中文ZH-TW繁体中文EN-US英文注:U8的系统菜单在UFSystem库里,UAP新增或者菜单调整工具新增的菜单在UFData库里,二次开发增加的菜单也要求在UFData库里。 UA_IDT表结构字段名数据类型含义idstring标识,一般等于ua_menu表里面的cMenu_Idassemblystring菜单对应的具体程序catalogtypeint分类,目前都设置为0typeint菜单对应的程序类型0-VB DLL1-EXE2-.NET UserControl程

34、序类型决定了assembly和class的内容classstringtype=2时有效,.NET UserControl中继承了NetLoginable的类entrypointstring目前没有作用,设置为nullparameterstring目前没有作用,设置为nullreservedstring目前没有作用,设置为nullufts时间戳标志是否有变化VB DLL:UA_Menu:ua_menu.cmenu_id=“UA”+顺序号ua_menu.csub_id=nullua_menu.Paramters=nullUA_Menu. cMenu_Eng=0需要ufsystem.ua_idt中增

35、加记录:id= ua_menu.cmenu_idtype = 0assembly = dll类名EXEUA_Menu:ua_menu.cmenu_id=“UA”+顺序号ua_menu.csub_id=nullua_menu.Paramters=nullUA_Menu. cMenu_Eng=1需要ufsystem.ua_idt中增加记录:id= ua_menu.cmenu_idtype = 1assembly = EXE文件路径(相对于U8安装的相对路径)UAP表单处理UAP增加的菜单无意识被删除需要手工添加,或者,需要UAP菜单挂接不同位置。UA_Menu:ua_menu.cmenu_id=“

36、UA”+顺序号ua_menu.csub_id=UAua_menu.Paramters=形如<property cardnum=”UAPTrain_0009” type=”voucher”/>的字符串,这里UAPTrain_0009为表单编号;UA_Menu. cMenu_Eng=2不需要在ufsystem.ua_idt中增加记录。UAP列表处理UAP增加的菜单无意识被删除需要手工添加,或者,需要UAP菜单挂接不同位置。UA_Menu:ua_menu.cmenu_id=“UA”+顺序号ua_menu.csub_id=UAua_menu.Paramters=形如<property

37、 type=”List” cardnum=”UAPTrain_0009”><UFGeneralList id=”eea90b20-4a2b-4149-8d00-820818dcd38f”/></property>的字符串,这里UAPTrain_0009为表单编号;eea90b20-4a2b-4149-8d00-820818dcd38f为表单列表ID;UA_Menu. cMenu_Eng=3不需要在ufsystem.ua_idt中增加记录。.Net UserControl系统定义一个接口IUserControl,只有两个属性:U8Login对象和菜单对象(对应的菜单

38、行数据)。如果.Net UserControl需要U8Login对象必须实现这个接口,否则可以不实现这个接口。UA_Menu:ua_menu.cmenu_id=“UA”+顺序号ua_menu.csub_id=UAua_menu.Paramters=<property type="IUserControl" id=” dllpath=”二次开发的DLL路径” classname=”二次开发的命名空间加类名” ><parameters/></ property>dllpath:dll的路径,要用u8soft的相对路径,最好放在uap目录下;i

39、d:UserContrl唯一标识,其值自定;type:属性值必须为"IUserControl",区分大小写;parameters:需要给程序(UserControl)传送的数据,格式自定。 UA_Menu. cMenu_Eng=4不需要在ufsystem.ua_idt中增加记录。附录:门户示例详解内容 :增加产品 操作窗口 写入门户消息 联查其他功能第一步:增加产品在UFsystem 中执行下列sql-增加门户菜单INSERT INTO UFSystem.dbo.UA_Menu(cMenu_Id, cMenu_Name, cMenu_Eng, cSub_Id, IGrade

40、, cSupMenu_Id, bEndGrade, cAuth_Id, iOrder, iImgIndex, Paramters, Depends, Flag)VALUES('LZ','测试产品',null,'LZ',0,'SCMG',0,NULL,0,0,NULL,NULL,NULL)INSERT INTO UFSystem.dbo.UA_Menu(cMenu_Id, cMenu_Name, cMenu_Eng, cSub_Id, IGrade, cSupMenu_Id, bEndGrade, cAuth_Id, iOrder,

41、 iImgIndex, Paramters, Depends, Flag)VALUES('LZ01','测试产品单据1',null,'LZ',1,'LZ',1,NULL,0,0,NULL,NULL,NULL)INSERT INTO UFSystem.dbo.UA_Menu(cMenu_Id, cMenu_Name, cMenu_Eng, cSub_Id, IGrade, cSupMenu_Id, bEndGrade, cAuth_Id, iOrder, iImgIndex, Paramters, Depends, Flag)VAL

42、UES('LZ02','测试产品单据1列表',null,'LZ',1,'LZ',1,NULL,0,0,NULL,NULL,NULL)-增加idt对应记录select * from ua_idtINSERT INTO UFSystem.dbo.ua_idt(id, assembly, catalogtype, type, class, entrypoint, parameter, reserved)VALUES('LZ01','TestVBActiveXDll.Person',0,0,null,nul

43、l,null,null)INSERT INTO UFSystem.dbo.ua_idt(id, assembly, catalogtype, type, class, entrypoint, parameter, reserved)VALUES('LZ02','TestVBActiveXDll.Person',0,0,null,null,null,null)效果如下第二步:编译编译 到 u8softufcomsql 目录下第三步:打开产品登录 u8打开测试产品单据1效果如下第四步:打开单据界面包含四个部分1、有关工具条的操作2、有关窗口操作3、有关消息中心4、有关联查单据1,2 对照代码参考即可第五步:消息中心要往门户发自己的消息分两个步骤1:增加一个消息类型(如果是发现有类型的消息,则忽略该步骤)-预置一条消息类型,指定类型为notice 通知If Not Exists (Select 1 From UFSystem.UA_MessageType where MsgTy

温馨提示

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

评论

0/150

提交评论