简单二开插件创建原创
金蝶云社区-胡哥哥
胡哥哥
5人赞赏了该文章 295次浏览 编辑于2020年10月17日 22:17:45

以表单插件为例,演示插件开发流程

1、创建项目(演示环境VS2019)

情况一,在现有解决方案创建新的项目,每个项目对应一个组件

(1)点击解决方案节点右键菜单项,选择添加-新建项目

image.png

(2)选择C#,Windows,库过滤,查找类库(.NET Framework)

image.png


(3)录入项目名称,默认当前位置,选择框架版本,点击创建完成项目的创建。

image.png

情况二,创建新解决方案及项目

(1)打开VS2019,点击创建新项目

image.png

(2)选择C#,Windows,库过滤,查找类库(.NET Framework)

image.png

(3)录入项目名称,选择解决方案/项目存放的位置,不建议放在默认路径;可以修改解决方案名称,选择框架版本.NET Framework4.0,点击创建完成新解决方案/项目的创建。

image.png

2、准备依赖组件

插件开发需要依赖BOS部分组件,需要先在解决方案根目录创建文件夹K3CloudServer进行存放,方便引用,到本地金蝶云星空安装目录获取组件,引用组件版本必须和本地金蝶云星空版本一致,组件列表如下:

Kingdee.BOS.dll

Kingdee.BOS.App.dll

Kingdee.BOS.Core.dll

Kingdee.BOS.App.Core.dll

Kingdee.BOS.Contracts.dll

Kingdee.BOS.DataEntity.dll

Kingdee.BOS.ServiceHelper.dll

image.png


3、引用组件

(1)选择当前项目,右键点击引用--添加引用,点击浏览,选择上面创建的依赖组件目录\Kingdee.Service.Example.Project\K3CloudServer,全选引用

image.png

引用示例:

image.png

(2)设置组件生成路径,方便测试可以设置为本地金蝶云星空安装目录,例如

D:\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\

image.png

4、开始写逻辑,搭建框架

(1)继承动态表单插件基类AbstractBillPlugIn,添加相应引用

image.png

(2)按照场景实现具体逻辑

/// <summary>

        /// 菜单工具栏点击事件

        /// </summary>

        /// <param name="e"></param>

        public override void BarItemClick(BarItemClickEventArgs e)

        {

            if (e.BarItemKey.ToUpper() == "TBSAYHELLO")

            {

                string name = GetName();

                this.View.ShowMessage(string.Format("Hello,{0}", name));

            }

            base.BarItemClick(e);

        }

        /// <summary>

        /// 按钮点击事件

        /// </summary>

        /// <param name="e"></param>

        public override void ButtonClick(ButtonClickEventArgs e)

        {

            if (e.Key.ToUpper() == "TBSAYHELLO")

            {

                string name = GetName();

                this.View.ShowMessage(string.Format("Hello,{0}", name));

            }

            base.ButtonClick(e);

        }

 

        private string GetName()

        {

            return this.Model.GetValue("FName").ToString();

        }

5、生成组件

选中项目,右键—生成,生成相应组件

image.png

image.png

6、注册发布

(1)到对应动态表单——属性——表单插件,选择本地安装目录,选择二开插件

Kingdee.EK.Example.Project,插件列表会根据插件类型加载出符合的插件信息,根据插件的描述进行选择注册。

image.png

(2)首次生成组件,建议重启IIS,避免组件代码版本不一致

7、演示并调试

(1)设置断点位置,需要调试的代码位置,IDE菜单工具栏选择调试——附加到进程

image.png

(2)勾选显示所有用户进程,选择金蝶云星空进程w3wq.exe,点击附加。

image.png

(3)调试结果

image.png

 

设置热更新

(1)在代码对应类中添加属性[HotUpdate],该属性位于Kingdee.BOS.Util

(2)修改配置文件..\Kingdee\K3Cloud\WebSite\App_Data\Common.config

文件中添加节点

    <!--是否启用插件热更新(开发时启用,正式服务器必须设为false,以免影响性能)-->

<add key="IsEnablePlugInHotUpdate" value="true" />

 

 

 

常见问题

1、若修改代码逻辑后生成组件发现无法触发热更新

热更新特性存在失效的情况,建议重启IIS重新读取代码数据

2、在BOS相应单据注册插件时,无法加载出插件类

(1)确定是否重启IIS

(2)插件类中是否携带public 公共访问修饰符

(3)是否正确继承基类,比如表单插件基类为

AbstractDynamicFormPlugIn、AbstractBillPlugIn

3、调试时,无法找到w3wq.exe进程

(1)确定金蝶云星空是否正常运行

(2)附加进程界面是否勾选【显示所有用户进程】

4、调试时,断点灰显,不能显示红点,提示当前进程调试代码版本与源代码版本不一致

重新生成插件,重启IIS


5