本文介绍了在K3Wise中添加并嵌入一个新功能的步骤。包括:添加功能链接至数据库,通过VB6开发ActiveX DLL,实现K3功能链接接口,编写并注册DLL组件,添加窗体并嵌入控件,将窗体嵌入主控台,并通过类调用窗体实现主控台融合。最后提示了使用form方式融合而非ocx控件的推荐做法。
再K3Wise如何添加一个新功能(一)中已经介绍了如何再主控台添加一个功能
现在介绍如何点击这个功能打开一个嵌入到k3主控台里的。
参考内容:K3Wise如何添加一个新功能(一) https://vip.kingdee.com/link/s/MuV1V
1.首先添加一个新功能链接:
insert into t_DataFlowDetailFunc(FDetailFuncID,FFuncName,FFuncName_CHT,FFuncName_EN,FSubFuncID,FIndex,FClassName,FClassParam,FIsNormal,FHelpCode,FVisible,FAcctType,FFuncType,FEnable)
values(60160103,'嵌入功能演示','嵌入功能演示','New app demo',601601,3,'UsrPrj.Application',60160103,0,51062,1,',1,2,3,4,5,6,7,9,10,11,12,13,16,17,14,15,',0,1)
update t_DataFlowTimeStamp
set FName = FName
GO
点击新功能提示:
2.打开VB6开发工具
选择ActiveX DLL,打开
分别修改工程名和类名为:UsrPrj,Application(与上面的脚本的FClassName保持一致),修改完成后保存工程。
3.实现K3功能链接接口
为工程添加引用:Project->References;Browse...选择k3erp目录下的k3bbi.tlb文件;要开发vb二开项目,开发机上必须要安装对应版本的K3应用程序。
4.再Application类中添加继承接口代码implements IBizConsole,以及实现接口的代码:
60160103为脚本插入的FDetailFuncID
代码编写完毕,后编辑组件,并将组件放到k3erp目录下之后用Regsvr32注册组件;
regsvr32 "D:\Program Files (x86)\Kingdee\K3ERP\UsrPrj.dll"
5.重新打开K3查看效果;
6.再工程中添加一个[窗体]对象,添加完之后给窗体重命名为frmMain(取一个自己喜欢的名字)
并再窗体上添加一些控件(本例中添加了一个lable控件,caption设置为二开的一个窗体。)
修改Application代码,
编译、替换、注册后,重新打开k3查看效果
7.如何做到将框体嵌入到主控台里去(这样做的目的是让二开的功能看上去和K3是一个整体,看上去舒适一些。)?
类似于【生产任务单序时簿】,再主控台中有一个页签定位它。
8.在frmMain窗体中,添加控件Active Bar 3.0;Project->Components
点击应用;这一步是必须的,要想做嵌入窗体就必须添加一个Acitvebar,否则会引起无法关闭功能.(开发环境必须有控件的授权,否则是无法正常使用的,如下图,没有授权。)
获得正版许可之后,重新打开工程,编辑菜单(为了演示,做一个最简单的菜单)
9.再工程中添加类(类名改为填自己喜欢的),ILoadCtrlListener为K3BBI中的接口
10.修改Application类代码:
"UsrPrj"为当前工程名,"嵌入功能演示"为主控台标签想要显示内容,“UserPrj.CApp”为一个新入口类。
11.添加CApp类,用它来调frmMain;
12.修改frmMain代码,来响应主控台融合事件
kdvbf.ParentWindow需要引用kdvbf.dll
abSubMenu,是frmMain窗体activexbar控件的ID
编译、替换、注册
查看效果:
(完)
不推荐使用主控台融合ocx的方式来开发功能,ocx容易因为运行时控件授权码异常无法正常打开功能,使用form的方式去融合就不存在此类问题,可以放心使用。
附件为本文完整项目代码。
UsrPrj.rar(16.10KB)
推荐阅读