实现用VB.Net/(C#)开发K/3 BOS 插件的真正可行方法

        [原创]实现用VB.Net/(C#)开发K/3 BOS 插件的真正可行方法

                                                                                    ------------(网上流传的C Sharp写插件实是不可行的)

 

金蝶K3 BOS的插件官方是用VB6编写的,如果

 能用.Net下的语言工具开发BOS插件是一件很愉快的事情,其中缘由不言而喻,而本文则是个人首创,实现在了用VB.NET C# C++.Net来开发BOS的插件(DLL),如果哪位还有比这方法更早的请联系作者,修改首创的宣称

 

在此先讲几个概念性的问题:

1、   Net类组件与COM组件:VB6开发的ActiveX.dll 可以用regsvr32.exe 注册,它是适合COM规范的东西,.NET开发的类后缀也是dll,可是它们俩不是相同的东西,.NETVBC#)开发的DLL是跑在.net CLR上的中间二进制字节码以及其他一些有自描述功能的元数据组成的,它不符合COM+规范,金蝶K/3BOS都是用VB6开发而来的,EAS那就另当别论了,所以BOS插件说白了也是VB6调用符合COM规范的DLL,它的原理就是在原程序里(宿主)先导入放在BOS插件上的dll然后直接Byref调用Public Sub Show(Byval XXX as Object) 来把需要编程的对象传递过来,所以我们要VB6能调用.Netdll,那怎么办呢?Visual Studio提供了一个命令行工具,里面有一个叫regasm.exe的工具帮我们实现这个互通 命令有点汇编的那个masm!

 

2、   .NET中的强名strong name 说白了就是为了保护你的组件不被破坏,.Net开发的dll想给像com那样被调用那就必须加个强名(数字签名)

’------------------------------------------------------------------------------------------------------------------------------------------

废话少说,照着我详细的步骤来依葫芦画瓢吧

 

1,打开VS创建一个类 看图1.1

                                                               1.1

说明:注意图上的红线方框,类、类名、所使用的.Net Frame版本为3.5 2.0的也可以,此测试语言我选VB,当然C#也可以,本人是basic的忠实者!

 

2,进去后在菜单 [项目]>>[添加引用] 处添加 K3ClassEvents.dll 组件(和VB6一样要添加它)如:图2.1

                                                        2.1

 

3,net的方式和规范编写代码,具体可参考BOS资料和VB6的工具栏插件生成的代码稍作修改作为骨架码

                                                                 3.1

 

 详细代码贴出 附件也带原测试工程文件,不包括实际应用功能只作示例

Imports K3ClassEvents

 

Public Class MenuBar

 

    '定义 ListEvents 接口. 必须具有的声明, 以此来获得事件

    Private WithEvents m_ListInterface As ListEvents

 

    Public Sub Show(ByVal oListInterface As Object)

 

        'ListEvents 接口实现

        '注意: 此方法必须存在, 请勿修改

        m_ListInterface = oListInterface

 

    End Sub

 

    Private Sub Class_Terminate()

 

        '释放接口对象

        '注意: 此方法必须存在, 请勿修改

        m_ListInterface = Nothing

 

    End Sub

 

    Private Sub m_ListInterface_MenuBarClick(ByVal BOSTool As K3ClassEvents.BOSTool, ByRef Cancel As Boolean) Handles m_ListInterface.MenuBarClick

 

        'TODO: 请在此处添加代码响应事件

        On Error Resume Next

 

        Select Case BOSTool.ToolName

            Case "shangla"

                '此处添加处理shangla 菜单对象的 Click 事件

                Dim form As New Form

                form.Show()

 

            Case "dizhu"

                '此处添加处理dizhu 菜单对象的 Click 事件

 

            Case "config"

                MsgBox("此处添加处理config 菜单对象的 Click 事件  config")

 

            Case "Info"

                '此处添加处理Info 菜单对象的 Click 事件

                Dim strID As String

                strID = m_ListInterface.DataSrv.ClassType("FNAME")

 

                Dim strSQL As String

                strSQL = m_ListInterface.DataSrv.sqlselectdetail & " where " & m_ListInterface.DataSrv.Filter("filterstring")

                MsgBox(strSQL)

            Case Else

        End Select

 

    End Sub

 

    Private Sub m_ListInterface_MenuBarInitialize(ByVal oMenuBar As K3ClassEvents.MenuBar) Handles m_ListInterface.MenuBarInitialize

 

        Try

 

      

            'TODO: 请在此处添加代码响应事件

 

 

            Dim oTool As K3ClassEvents.BOSTool

            Dim oBand As K3ClassEvents.BOSBand

 

            '*************** 开始新增 BOS 菜单 ***************

 

            '新增 shangla 菜单对象,并设置属性

            oTool = oMenuBar.BOSTools.Add("shangla")

            With oTool

                .Caption = "上拉"

                .TooltipText = "上拉源单据"

                .Description = "上拉"

                .ShortcutKey = 0

                .Visible = True

                .Enabled = True

                .BeginGroup = True

                .ToolPicture = "D:/Documents and Settings/Administrator/My Documents/Visual Studio 2008/Projects/ico/makequery.ico"

                .SetPicture(0, 0)

            End With

            oBand = oMenuBar.BOSBands("BandToolBar")

            oBand.BOSTools.InsertBefore("mnuBackData", oTool)    '将菜单对象插入指定工具栏

 

 

            '新增 dizhu 菜单对象,并设置属性

            oTool = oMenuBar.BOSTools.Add("dizhu")

            With oTool

                .Caption = "斗地主"

                .TooltipText = "来休闲一下吧"

                .Description = "斗地主"

                .ShortcutKey = 0

                .Visible = True

                .Enabled = True

                .BeginGroup = True

                .ToolPicture = "D:/Documents and Settings/Administrator/My Documents/Visual Studio 2008/Projects/ico/icon.ico"

                .SetPicture(0, 0)

            End With

            oBand = oMenuBar.BOSBands("BandToolBar")

            oBand.BOSTools.InsertBefore("mnuBackData", oTool)    '将菜单对象插入指定工具栏

 

            '新增 config 菜单对象,并设置属性

            oTool = oMenuBar.BOSTools.Add("config")

            With oTool

                .Caption = "设置"

                .TooltipText = "设置自定义执行的SQL"

                .Description = "执行"

                .ShortcutKey = 0

                .Visible = True

                .Enabled = True

                .BeginGroup = True

                .ToolPicture = "D:/Documents and Settings/Administrator/My Documents/Visual Studio 2008/Projects/ico/ProgressSuccess.ico"

                .SetPicture(0, 0)

            End With

            oBand = oMenuBar.BOSBands("BandToolBar")

            oBand.BOSTools.InsertBefore("mnuBackData", oTool)    '将菜单对象插入指定工具栏

 

            '新增 Info 菜单对象,并设置属性

            oTool = oMenuBar.BOSTools.Add("Info")

            With oTool

                .Caption = "信息"

                .TooltipText = "显关相关信息"

                .Description = "信息"

                .ShortcutKey = 0

                .Visible = True

                .Enabled = True

                .BeginGroup = True

                .ToolPicture = "D:/Documents and Settings/Administrator/My Documents/Visual Studio 2008/Projects/ico/server.ico"

                .SetPicture(0, 0)

            End With

 

            oBand = oMenuBar.BOSBands("BandToolBar")

            oBand.BOSTools.InsertBefore("mnuBackData", oTool)    '将菜单对象插入指定工具栏

 

            '*************** 结束新增 BOS 菜单 ***************

 

        Catch ex As Exception

            MsgBox(ex.Message.ToString)

        End Try

    End Sub

 

End Class

 

4.  1)进入菜单 [项目]>[xxx属性]>应用程序> 程序集信息  下在 使程序集COM可见 打勾

 

 

2) 进入 [项目]>[xxx属性]>编译    [COM互操作] 打勾

3) 进入 [项目]>[xxx属性]>签名   [为程序集签名] 打勾 <新建…> 一个snk签名 不设密码也可

 

5,进入VS tools

 

关键: regasm命令注册Netdll

D:/Documents and Settings/Administrator/My Documents/Visual Studio 2008/Projects/BOS_ListEvent_PlugIns/BOS_ListEvent_PlugIns/bin/Release> regasm BOS_ListEvent_PlugIns.dll /tlb: TestPlugIns.Net.dll

 

6)结束,BOS开发环境下调用 这个注册后的dll即可

 

因为我建了一个窗体 所以多了一个 form这项

有没有看多出工具栏这几项菜单 上拉 斗地主 信息

[上拉]出现的事件 如下图

Select Case BOSTool.ToolName

            Case "shangla"

                '此处添加处理shangla 菜单对象的 Click 事件

                Dim form As New Form

                form.Show()

 

 

其实可以把从主程序的数据拉到自己建的解决方案下处理,这比VB6强一点,VB6下试了一下,好像不能显示自己建的窗体,此次为演示测试插件,并无实现任何实际功能,大家撑握.NET做插件后可尽情发挥,本人之后可能没这么多时间接触金蝶了,换了个用用友的公司,其实本人还是挺喜欢K3 BOS,闲话不说了^_^

如有疑问请联系chzjxgd@21cn.com QQ 105670118

附上原工程文件:

 

2011-2-9

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: 金蝶ERP二次开发K3BOS)应用教程PDF是一份详细的指南,旨在帮助使用金蝶ERP软件进行二次开发的用户更好地了解和学习K3BOS的应用。 这份教程PDF首先介绍了K3BOS的基本概念和功能,帮助用户快速了解K3BOS的作用和优势。然后,教程详细介绍了K3BOS的安装和配置步骤,以及如何创建和管理K3BOS的应用程序。 随后,教程重点介绍了K3BOS开发工具和技术,包括应用程序开发框架、界面设计和代码编写等。通过这些内容,用户可以掌握如何使用K3BOS进行二次开发实现定制化的业务需求。 此外,教程还提供了一些实际案例和示例代码,帮助用户更好地理解和应用K3BOS开发技术。用户可以根据这些案例和示例代码进行实践和练习,以加深对K3BOS的理解和应用。 总的来说,金蝶ERP二次开发K3BOS)应用教程PDF是一份非常实用的指南,对于想要学习和应用K3BOS进行二次开发的用户来说,具有很大的参考价值。通过学习教程中的内容,用户可以快速上手并熟练应用K3BOS进行二次开发,以满足自身业务需求。 ### 回答2: 金蝶ERP二次开发K3BOS)应用教程PDF是一本介绍金蝶ERP二次开发的教材,主要用于指导金蝶ERP用户如何进行二次开发,以满足企业个性化需求。 这本教程PDF逐步引导读者了解金蝶ERP的基本架构和开发工具,包括如何使用金蝶BOS(Business Operation System)平台进行二次开发,使用K/3自定义开发工具进行业务逻辑编写,以及使用相关的开发工具进行调试和部署。 教程中详细介绍了如何定义和管理金蝶ERP中的业务对象、业务逻辑、UI界面等方面的内容,让读者能够灵活地根据企业需要进行系统的定制和扩展。 此外,教程还涵盖了金蝶ERP的数据库操作、流程设计、报表开发等方面的内容,帮助读者理解和掌握更多的二次开发技能。 教程的编写人员经验丰富,结构清晰,内容易于理解,并提供了大量实际案例和示例代码,读者可以通过实际的实战演练来加深对金蝶ERP二次开发的理解和应用。 总之,金蝶ERP二次开发K3BOS)应用教程PDF是一本非常有价值的教材,对于金蝶ERP用户和开发人员来说,它将成为学习和掌握金蝶ERP二次开发技能的必备工具

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值