![summary-icon](https://cdn-vip.kingdee.com/statics/webfront/summary_icon.png)
本文介绍了金蝶云·苍穹平台中的插件开发,详细说明了插件基类选择、注册位置、开发步骤及注意事项。插件开发需确定应用场景和插件基类,根据业务需求选择合适的控件和事件方法。文章还提供了插件注册的具体路径和日志查看方式,并附上了相关参考资料和链接,旨在帮助开发者快速上手插件开发。
目前,越来越多的伙伴加入到苍穹开发的大军中来,但很多同学对于插件开发还是相当难于快速上手,尤其是新入门的朋友,对于插件基类的选择 & 注册位置都不是很熟悉,下面仅以本文来给大家简单介绍一下,希望能给大家在苍穹开发的道路上提供一点帮助。
使用应用开发平台的设计器开发业务对象,全程配置,简单易学,但不够灵活。配置业务对象时使用的业务语意,需要预先定义,遇到未考虑的业务场景,则无法处理。业务对象设计器,目标是实现常见的大多数业务语意,利用开放的插件开发,可实现剩余的功能。
插件可以在适当的时机,根据接收到的上下文信息,对系统功能进行控制。适当的时机,是指插件只会在系统功能运行到了特定时刻,才能收到系统通知,进行功能处理,并不能对系统功能的全过程进行干预。插件拿到的上下文信息,能够调用的控制方法,也是经过系统封装,有所限制。简单的说,插件可以在系统约束的框架之内,对系统进行适度的干预,在灵活性与安全性之间有个平衡。
插件开发步骤
① 确定应用场景,选择插件基类
② 确定事件源&控件
③ 响应插件事件,进行业务逻辑开发
插件基类选择
不同的业务对象类型,提供特定的业务功能,有适用的应用场景。系统为各种业务对象类型、各种应用场景,封装了相应的插件接口、事件方法,定义了抽象插件基类,实现最基本的插件接口。进行业务功能设计时,首先需要根据业务需求特点,分析业务应用场景,选择业务对象类型。如果需要进行插件开发,则根据前面确定好的业务对象类型及应用场景,从下表中选择对应插件基类进行扩展。
事件/方法选择
有交互界面的应用场景(如表单、单据列表等),在界面加载、关闭时,会触发相应的插件事件。此外,用户与界面,以及界面上的控件交互时,也会触发插件事件。各种控件有其自身功能特点,适用不同的业务需求,并提供了相应的插件事件。在进行功能设计时,需要根据业务需求,选用合适的控件,确定需要重写的插件接口方法,然后响应插件事件。
没有交互界面的应用场景(如单据操作、单据转换、关联反写等),不会与用户发生交互,其插件事件是由服务引擎按顺序触发的。
响应插件事件
系统会在适当的时机,调用插件事件接口的方法,传入上下文参数,触发插件事件。不同的插件事件,触发的时机、传入的上下文参数、可以控制的功能,差异非常大。因此,必须根据业务需求,选择合适的插件事件响应。
有界面交互的场景
有交互界面的应用场景,插件基类实现了表单界面支持的插件接口,但没有实现各种控件的插件接口。
如果只是要捕获表单界面事件,则扩展插件基类,重写表单事件方法即可。
如果要捕获各种控件事件,则需要:
> 在插件类定义,实现控件支持的插件事件接口。例如:以树形控件支持节点勾选为例,业务插件需实现接口TreeNodeCheckListener,代码如下:
public class TreeViewTreeNodeCheckDemoPlugin extends AbstractBillPlugIn implements TreeNodeCheckListener
> 实现控件的插件事件接口中的方法,完成事件的捕捉,接上例,示例代码如下:
@Override public void treeNodeCheck(TreeNodeCheckEvent evt) { TreeView treeView = (TreeView) evt.getSource(); if (StringUtils.equals(treeView.getKey(), KEY_TREEVIEW)){ List<String> selectNodeIds = treeView.getTreeState().getCheckedNodeIds(); // TODO 在此添加业务逻辑 } }
> 在表单界面插件registerListener事件,向控件实例注册本插件实例,完成控件与插件实例的绑定:控件事件发生时,即触发其所绑定的插件事件。
@Override public void registerListener(EventObject e) { super.registerListener(e); // 侦听树节点勾选事件 TreeView treeView = getView().getControl(KEY_TREEVIEW); treeView.addTreeNodeCheckListener(this); }
示例树形控件支持的节点勾选的完整代码如下:
package kd.demo; import java.util.EventObject; import java.util.List; import kd.bos.bill.AbstractBillPlugIn; import kd.bos.dataentity.utils.StringUtils; import kd.bos.form.control.TreeView; import kd.bos.form.control.events.TreeNodeCheckEvent; import kd.bos.form.control.events.TreeNodeCheckListener; public class TreeViewTreeNodeCheckDemoPlugin extends AbstractBillPlugIn implements TreeNodeCheckListener { private final static String KEY_TREEVIEW = "treeviewap"; @Override public void registerListener(EventObject e) { super.registerListener(e); // 侦听树节点勾选事件 TreeView treeView = getView().getControl(KEY_TREEVIEW); treeView.addTreeNodeCheckListener(this); } @Override public void beforeBindData(EventObject e) { super.beforeBindData(e); TreeView treeView = getView().getControl(KEY_TREEVIEW); // 支持多选 treeView.setMulti(true); } @Override public void treeNodeCheck(TreeNodeCheckEvent evt) { TreeView treeView = (TreeView) evt.getSource(); if (StringUtils.equals(treeView.getKey(), KEY_TREEVIEW)){ List<String> selectNodeIds = treeView.getTreeState().getCheckedNodeIds(); // TODO 在此添加业务逻辑 } } }
无界面交互的场景
没有交互界面的应用场景,插件基类已经实现了必要的插件接口,插件只需要扩展插件基类,重写事件方法即可完成事件的捕捉。
插件注册
由于苍穹平台内部的插件类型不同,其注册的位置亦不相同,下面逐一介绍各插件的注册位置。
动态表单/单据/基础资料PC端界面插件
插件注册路径:表单设计器 →【大纲】→ 根节点 →【业务属性】→【插件】→【注册】
动态表单/单据/基础资料PC端(标准/左树右表/树形)列表界面插件
插件注册路径:列表设计器 →【大纲】→ 根节点 →【业务属性】→【列表插件】→【注册】
业务操作插件
插件注册路径:
表单设计器 →【大纲】→ 根节点 →【业务属性】→【操作】→ 选择需要注册插件的操作代码(以save为例) →【修改】→【其它控制】→【服务插件】→【注册】
单据转换插件
插件注册路径:【开发服务云】→【业务流开发】→【转换规则】→ 选择一条转换规则进入详情界面 →【插件】→【注册】
工作流插件
插件注册路径:【流程服务云】→【工作流服务】→【设计中心】→【流程设计】→ 新建/打开一条流程
① 流程设计器界面空白处 →【基本信息】→【启动条件】→【条件类型】→【外部接口】→【类型】→【Java插件】→【插件类】
② 流程设计器界面空白处 →【流程控制】→【流程插件】→【新增】→【外部接口】→【类型】→【Java插件】→【插件类】
③ 流程节点 →【插件】→【进入节点时执行/离开节点时执行/任务处理时执行】→【新增】→【类型】→【Java插件】→【插件类】
引入插件
操作插件注册路径:
表单设计器 →【大纲】→ 根节点 →【业务属性】→【操作】→ 【importdata】 →【修改】→【参数设置】→【引入插件】→【注册】
界面插件注册路径:
通过前述内容,我们已知道,引出插件的基类也是AbstractBillPlugin/AbstractBasePlugIn,即单据/基础资料插件基类,故其注册位置保持一致,这里不再赘述。
引出插件
通过前述内容,我们已知道,引出插件的基类也是AbstractListPlugin,即列表插件基类,故其注册位置保持一致,这里不再赘述。
套打/打印插件
插件注册路径:打印模板页面 →【大纲】→ 根节点 →【业务属性】→【插件】→【注册】
后台任务插件
插件注册路径:【系统服务云】→【系统管理】→【调度管理】→【调度作业】→ 新增/选择一条调度作业 → 【执行程序】
OpenAPI插件
插件注册路径:【开发服务云】→【开放平台】→【新增】→【新建API服务】→【操作服务/自定义服务】→【插件】→【注册】
报表界面插件
插件注册路径:报表页面 →【大纲】→ 根节点 →【业务属性】→【插件】→【注册】
报表取数插件
插件注册路径:报表页面 →【大纲】→【报表列表】→【业务属性】→【查询插件】
日志查看
① 测试/UAT/生产环境的日志可通过monitor查看。
② 日志输出方式的配置:租户管理中心(MC)→【基础数据维护】→【环境公共配置项】→【标准公共配置】→【配置】→【mservice】→【prop】→编码为log.confi的配置项。有关详细配置项的具体含义可自行百度查阅。
注意事项
1. 动态表单/单据/基础资料/列表/打印插件一定要先【大纲】页签下选中根节点!
2. 因流程插件在不同的位置配置可实现不同的业务逻辑功能,故流程设计器界面多处位置可配置工作流插件,本文如有遗漏,请以标准产品相关资料为准。金蝶云•苍穹流程服务云使用指南:https://club.kdcloud.com/article/183308 。
3. 所有注册插件的地方请填写Java类的全类名。
参考资料
https://dev.kingdee.com/index/docsNew/34f4b44b-0ced-4bbd-8421-251243949f02 ——《金蝶云苍穹平台插件开发指南》
https://dev.kingdee.com/index/docsNew/4f18dcb4-6f30-4b0f-817e-0485aabef97d
https://dev.kingdee.com/index/docsNew/a750d6d3-a0a7-45c7-b9b5-4aecedf4f81d
大家如有任何建议和意见,欢迎在评论区留言,我将不断努力改进。
创作不易,如能帮到大家,请动动您的金手指点赞鼓励一下,非常感谢~【emoji】【emoji】【emoji】
推荐阅读