您好,欢迎访问三七文档
U8门户开发手册1.功能概述如何使伙伴二次开发的程序很好地和U8产品集成在一起?需要满足什么条件的程序才能和门户集成?如何开发一个满足这个条件的程序?本文将为您解答这些问题。2.名词解释2.1菜单调整工具功能:调整菜单位置;新增、修改、删除菜单(除U8系统菜单外)。菜单调整工具在UAP中,通过菜单“工具-菜单调整工具”进入。2.2idt.dll文件位置:在U8安装目录的Portal目录里。该文件其实是一个xml文件,可以用任何文本编辑器打开。其内容描述了双击每个末级菜单项目时需要调用的物理程序。在872版本里,idt.dll并不在安装盘里,而是U8门户第一次运行时通过UFSystem..UA_IDT表里的内容动态生成的。当UFSystem..UA_IDT有变化时,U8门户会重新生成idt.dll文件。有了这种机制后,菜单调整工具就可以通过维护UFSystem..UA_IDT里的内容,从而达到维护idt.dll的目的。3.如何开发可与门户集成的VBdll3.1代码修改3.1.1引用工程UFPortalProxyInterface文件位置:U8安装路径\Portal\UFPortalProxyInterface.dll3.1.2相关代码修改clsProductFacade文件为门户的入口文件,即在idt.dll文件后assembly项所对应的类名。如下所描述的:idtid=’Test01’type=’0’assembly=’TestU8Prj.clsProductFacade’/首先,idt.dll中assembly属性描述的对应类要实现接口ILoginalbe。比如idt.dll中描述了如下信息:idtid=’Test01’type=’0’assembly=’TestU8Prj.clsProductFacade’/则要在clsProductFacade中实现ILoginable接口。即用代码:ImplementsUFPortalProxyInterface.ILoginable然后在该接口的实现函数中转发调用原先工程中的Login,CallFunction,Logoff三个方法,具体参见后附的例子。在左树启动一项命令时依次调用Login和CallFunction。在门户退出或在权限管理中结束该产品时调用LogOff。子系统必须自己维护是否已经进行了子系统登录过程,业务系统须维护子系统是否已经登录。Login对象从g_business中通过调用GetVBclsLogin方法获得。各接口含义如下: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=TrueThenILoginable_Login=TrueExitFunctionEndIfIf((Notg_businessIsNothing)Andg_bLogined=False)ThenDimoLoginTmpAsObjectSetoLoginTmp=g_business.GetVBclsLogin()Setg_oLogin=oLoginTmpILoginable_Login=Login(oLoginTmp)If(ILoginable_Login=True)Theng_bLogined=TrueEndIfElseILoginable_Login=Notg_businessIsNothingEndIfEndFunctionPrivateFunctionILoginable_LogOff()AsBooleanIf(g_bLogined=True)ThenILoginable_LogOff=LogOff()If(ILoginable_LogOff=True)Theng_bLogined=FalseEndIfElseILoginable_LogOff=TrueEndIfEndFunction3.1.2.1增加Business属性可读可写,且对大小写敏感。此属性维护一个对于此业务工程全局变量,以实现和VB程序和870Portal的交互。参考实现如下:PublicPropertyGetBusiness()AsObjectSetBusiness=g_businessEndPropertyPublicPropertySetBusiness(busValAsObject)Setg_business=busValEndProperty3.1.2.2增加全局变量新建一module文件,并加入如下全局变量:Publicg_businessAsObjectPublicg_bLoginedAsBoolean3.1.3三种窗体3.1.3.1修改嵌入Portal的窗体文件原来有MdiExtender控件的窗体要嵌入Portal的窗体修改方法:调用CreateFormEnv方法调用ShowForm方法每个窗体都要有方法ExitForm3.1.3.2修改第一次弹出就是模态的窗体可以直接使用通过采用VB窗体的Form.Show(vbModal)的方式,也调用ShowForm方法来显示此窗体。3.1.3.3由嵌入Portal的窗体弹出的窗体,不作修改,如果是模式窗体,请在此窗体上加入UFFormPartner控件3.1.4UFToolbar的修改3.1.4.1在Settoolbar之前将g_business传入3.1.4.2在Settoolbar之前设置Tag信息设置微软Toolbar每个Button的Tag信息调用CreatePortalToolbarTag方法设置示例button.Tag=CreatePortalToolbarTag(“ICON_NEW”,”ICOMMON”,”PortalToolbar”)注意:严禁创建多次3.1.4.2.1图标人机工程部给出完整的图标,并制定相应文件的命名规格放在%U8SOFT%的icons目录下直接使用图标的文件名(不需扩展名)3.1.4.2.2分组常用(ICOMMON):如打开、保存等编辑(IEDIT):如增行、拷贝单元格等处理(IDEAL):如审核、分单等查询(ISEARCH):如过滤、联查等3.1.4.2.3类型PortalToolbar,目前填入此值即可。3.1.4.3在窗体的Unload事件中加入SetUFToolbar1.Business=Nothing3.1.5中间过程3.1.5.1判断窗体是否打开FormIsOpened3.1.5.2设置并激活某个已经存在的窗体SetFormActive3.1.5.3在显示过程中(窗体已经显示)关闭自身窗体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.2CreateFormEnv初始化嵌入Portal的环境PublicFunctionCreateFormEnv(ByValsKeyAsString,ByRefformObjAsObject)AsVBFormDescriptorsKey: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.5CreatePortalToolbarTag创建Toolbar的Tag信息PublicFunctionCreatePortalToolbarTag(ImageAsString,actionSetAsString,toolbarTypeAsString)AsStringImage按钮的图片actionSet分组toolbarType分组Toolbar的类型3.3.6SetFormActive使某个窗口成为当前窗口PublicFunctionSetFormActive(ByValsKeyAsString,ByValobjAsObject)sKey:Key,注意不能是form的Hwnd,在窗体的生命周期中,此值必须唯一obj:Form对象3.4挂接菜单4.如何开发可与门户集成的.NETUserControl.netusercontrol与门户集成需要建立实现INetUserControl接口的组件4.1通过vs.net建立一个项目类型为类库的项目此处项目名称为UFIDA.U8.Portal.NetProductSample菜单的多语名称,将在U8左树菜单里显示如果是文件夹这里选否这里选择VBDLLVBDLL时,此项无效。输入VBDLL的完整类名称。自动生成。4.2继承门户中类NetLoginable在该项目中添加以下DLL的引用Windows.Form.dllU8安装路径\Framework\UFSoft.U8.Framework.Login.UI.dllU8安装路径\Interop\Interop.U8Login.dllU8安装路径\Interop\Interop.UFPortalProxyInterface.dllU8安装路径\Portal\UFIDA.U8.Portal.Framework.dllU8安装路径\Portal\UFIDA.U8.Portal.Proxy.dll
本文标题:U8门户开发手册
链接地址:https://www.777doc.com/doc-2864247 .html