ERP事业部咨询实施客户化开发部
用友软件股份有限公司
地址:北京市海淀区北清路68号
用友软件园
电话:010-62436688
网址:www.ufida.com.cn
客户化开发基本能力提升手册
起草单位 :ERP咨-客户化开发部 修正单位 : 批 准 : 批准日期 :
第1页 共 329页
ERP事业部咨询实施客户化开发部
1 U8基础开发篇
1.1 门户开发与集成 1.1.1 功能概述
如何使二次开发的程序和U8产品集成在一起?需要满足怎样条件的程序才能和门户集成?如何开发满足这个条件的程序?本文将为您解答这些问题。
1.1.2 名词解释
1.1.2.1 菜单调整工具
功能:调整菜单位置;新增、修改、删除菜单(除U8系统菜单外)。 路径:菜单调整工具在UAP中,通过菜单“工具->菜单调整工具”进入。 注意:菜单调整工具只针对应用该工具新增的菜单(菜单号以ua开头),对于手工插
入ua_menu表中的菜单该工具不识别。
1.1.2.2 程序调用方法
功能:通过UFSystem数据库中的物理表UA_IDT预置数据,其内容描述了双击每个
末级菜单或者某个模块时需要调用的物理程序。
方法1:通过菜单调整工具新增的菜单,会在UA_IDT自动插入记录。 方法2:通过sql脚本手工插入UA_IDT记录。 Delete From ua_idt where id='1N' Insert into [ua_idt]([id],[assembly],[catalogtype],[type],[class],[entrypoint],[parameter],[reserved]) Values('1N','EFFYMain.clsProductFacade',0,0,NULL,NULL,NULL,NULL) GO
对应字段的含义见[ua_idt]表说明: 字段名称 描述 数据类型 长度 是否允许为空 第2页 共 329页
ERP事业部咨询实施客户化开发部
Assembly Catalogtype Class entrypoint ID parameter Reserved Type Ufts dll名字 类型,比如dotnet vb dll exe 等 用于createobject 入口 唯一编号 命令行参数 保留字段 类型 时间戳 nvarchar int nvarchar nvarchar nvarchar nvarchar nvarchar int timestamp 256 4 512 512 32 False True True True False 1024 True 1024 True 4 8 True False Type字段:为0时为VB DLL;为1时为可执行程序;为2或者4时.net的应用程序。
1.1.3 如何开发与门户集成的VB dll
1.1.3.1 代码修改
具体实例见\\\\U890客开资料\\U8基础开发篇Demo\\门户\\文件夹下 1.1.3.1.1 引用工程
UFPortalProxyInterface
文件位置:U8安装路径\\Portal\\UFPortalProxyInterface.dll 1.1.3.1.2 相关代码修改
clsProductFacade文件为门户的入口文件,即在ua_idt表中assembly项所对应的类名。
如下所描述的:
id=‘EFFYGL040101’
首先,ua_idt中assembly属性描述的对应类要实现接口ILoginalbe。 比如ua_idt中描述了如下信息: type=’0’ assembly=’EFFYMain.clsProductFacade’ 第3页 共 329页
ERP事业部咨询实施客户化开发部
insert into ua_idt ([id],[assembly],[catalogtype],[type],[class],[entrypoint],[parameter],[reserved])values(' EFFYGL040101',' EFFYMain.clsProductFacade ',0,0,Null,Null,Null,Null)
然后在该接口的实现函数中转发调用原先工程中的Login,CallFunction,Logoff三个方
法,具体参见后附的例子。在左树启动一项命令时依次调用Login和CallFunction。在门户退出或在权限管理中结束该产品时调用LogOff。
子系统必须自己维护是否已经进行子系统登录过程,业务系统须维护子系统是否已经登录。 Login对象从g_business中通过调用GetVBclsLogin方法获得。 各接口含义如下:
1、Login接口( Private Function ILoginable_Login() As Boolean ),不管弹出的是模式窗体还是非模式窗体,此接口在成功登录后须返回True,而且要保证登录成功后,第二次调用此接口时也要返回True。只有在登录失败后方可返回False。也就是说此接口返回值的含义是是否已经成功登录子系统。
2、LogOff接口( Private Function ILoginable_LogOff() As Boolean ),此接口的含义是执行LogOff过程,如成功使该子系统LogOff状态返回True,否则返回False。也就是说,如果该子统还未登录,则直接返回False就可以了。如果系统处于已经登录的过程,则执行业务组原有所需的LogOff过程,如果执行此功能,正确LogOff子系统,则返回True,否则返回False。如果在实际程序中没有此过程,则直接返回True即可。
3、CallFunction接口(Private Function ILoginable_CallFunction() As Boolean),如果产品没有子系统登录过程,此值须返回True。
4、对于显示模式窗体的产品,如果已经申请了任务,请在模式窗体退出时自已清除任务。
实现这三个方法的例子如下:
'接口ILoginable函数Login Private Function ILoginable_Login() As Boolean ILoginable_Login = True End Function Private Function ILoginable_LogOff() As Boolean ILoginable_LogOff = True End Function 第4页 共 329页
ERP事业部咨询实施客户化开发部
Private Function ILoginable_CallFunction(ByVal cmenuid As String, ByVal cmenuname As String, ByVal cAuthId As String, ByVal cCmdLine As String) As Object Set ILoginable_CallFunction = CallFunction(cmenuid, cmenuname, cAuthId, cCmdLine) End Function
1.1.3.1.2.1 增加Business属性
可读可写,且对大小写敏感。此属性维护一个对于业务工程全局变量,以实现和VB程序和890Portal的交互。参考实现如下:
Public Property Get Business() As Object Set Business = g_business End Property Public Property Set Business(ByRef bBus As Object) Set g_business = bBus End Property
1.1.3.1.2.2 增加全局变量
新建一个module文件 modPublicFuncs,并加入如下全局变量: Public g_business As Object Public g_bLogined As Boolean
1.1.3.1.3 三种窗体
1.1.3.1.3.1 修改嵌入Portal的窗体文件 原来有MdiExtender控件的窗体 要嵌入Portal的窗体 修改方法:
调用CreateFormEnv方法 调用ShowForm方法
每个窗体都要有方法ExitForm
第5页 共 329页