本文介绍了苍穹平台中“操作”功能的重要性及详细使用方法。文中阐述了“操作”的类型(表单操作和实体操作)、业务场景(如增删改查、工作流等)、配置方式(设计器或代码调用)和使用场景。此外,还详细说明了如何在工具栏添加操作按钮、新增操作类型、配置操作前后的提示信息,并通过代码示例展示了在不同场景中如何使用和操作这些功能,包括调用服务帮助类、单据插件调用、操作插件开发及注册等。最后,介绍了通过OpenApi调用操作的方法及相关文档链接。
创作不易,如果文章对您有帮助,请为我点击一个朴实无华的赞^_^
前言
最近与生态伙伴沟通时,发现有很多新接触苍穹的开发者对于苍穹的“操作”不是很熟悉,所以写一篇文章介绍苍穹的一项重要的功能:操作。
介绍“操作”
“操作”有很多业务场景,每个操作都有操作类型和操作编码。
在苍穹里面,“操作”分两种类型:
表单操作:对界面进行处理,如关闭界面;
实体操作:更新数据库,如保存;
每种“操作”都对应一种业务场景,举例说明:
对数据的增删改查的业务场景,例如:保存、删除等等。
关于流程(工作流)的业务场景,例如:提交、撤销、审核、反审核等等。
还有一些其他的业务场景,例如:打印,引出数据,刷新页面,退出页面等等。
“操作”可以在设计器上配置,也支持通过代码来调用。
使用场景
苍穹里面有很多的预置好的操作,例如:新增,保存,提交,打印,引入,引出等等。
这些操作基本可以覆盖用户对数据使用的绝大部分业务场景了。
操作可以在单据列表和单据详情中使用,如下图,
这一栏工具栏里面的按钮,都是绑定了操作的,点击对应的按钮,就可以执行相应的操作
工具栏添加操作按钮
在开发平台,页面设计器中,可以在工具栏上添加一个按钮,然后绑定一个操作:
点击加号,添加工具栏按钮:
选择刚刚新加的按钮节点,选择右侧的业务栏上的操作代码
选择一行操作编码,例如选择“新增”,点击确定,然后工具栏的按钮就绑定上了这个操作
工具栏添加当前单据没有的操作
苍穹会给标准的单据列表预置一些操作,当前我们的业务需求有其他的操作时,就可以新增一个操作类型。
在打开选择操作列表之后,这个列表里面并不是全部的操作,是一部分预置的操作,开发者还可以再添加新的操作到这个单据列表里面。
操作前提示和操作后提示
通常情况下,操作前默认不会提示框,以及在操作完成之后会给出提示,例如:“xxx成功”。
以下步骤,可以给操作配置一个操作前提示框,以及操作成功之后的提示信息:
如下图,开始给“提交”操作配置一个提交前的 确认操作提示框:
经过上述配置,提交成功之后也有提示:
代码中使用操作的几种方式
1.调用SaveServiceHelper做保存操作,DeleteServiceHelper做删除操作
以下仅给出部分代码
OperationResult result = SaveServiceHelper.saveOperate(formNumber, dynamicObjects, OperateOption.create());
SaveServiceHelper的保存操作,用来删除某行单据体之后保存,相当于在单据页面上删除单据体的分录之后点击保存按钮,具体案例请参考文章:
https://club.kdcloud.com/article/183678515395167232
https://club.kdcloud.com/article/205695637969862400
2.实体操作服务帮助类OperationServiceHelper
审核操作
OperationServiceHelper.executeOperate("audit", "kded_testt", new Object[] {id}, OperateOption.create());
具体案例请参考文章:
https://club.kdcloud.com/article/202539250599359488
3.单据插件上调用getView().invokeOperation()
单据提交操作,等效于点击工具栏上的提交按钮
可以在父类插件AbstractBillPlugin的派生类中调用以下代码,把当前单据做一个提交操作。
this.getView().invokeOperation("submit");
具体案例请参考文章:
https://club.kdcloud.com/article/136924752286676736
4.在单据页面插件中获取操作执行结果
AbstractFormPlugin的派生类,有两个事件:
beforeDoOperation | 操作前事件,通过setCancel可以取消当前操作 |
afterDoOperation | 操作后事件 |
继承AbstractFormPlugin类,重写beforeDoOperation,afterDoOperation。
beforeDoOperation,操作在执行之前,会调用该事件,用于判断数据是否符合条件,如果不符合,取消当前操作。
afterDoOperation,操作执行后,会调用该事件,用于获取操作结果,根据操作结果执行一些相应的业务操作。
以第3点的提交操作为例,我们可以在beforeDoOperation事件中,获取model,然后判断当前单据的数据是否可以进行提交,如果不满足提交条件,就取消当前提交操作。
例如在afterDoOperation事件中,获取提交结果,如果提交成功,则关闭当前页面。
具体案例请参考文章:
https://dev.kingdee.com/index/docsNew/b74369d3-40d4-49e4-a7fe-0e60b7ffb85b
https://club.kdcloud.com/article/167933067377099776
https://club.kdcloud.com/article/96536077644569600
5.操作插件
实体操作,可以绑定操作插件,并进行开发,对操作写数据入库的过程,进行干预。
表单操作,不会写数据入库,只能针对表单界面及界面数据进行处理,不支持操作插件。
继承AbstractOperationServicePlugIn,可以实现操作插件。
操作插件常用事件
beforeExecuteOperationTransaction事件:插件可以在此事件,对已经通过校验的数据,进行整理,或者取消操作的执行。
beginOperationTransaction事件:可以在此事件,进行数据同步处理,可能会执行失败的同步处理,如和第三方系统的对接,放在这个事件比较合适。
endOperationTransaction事件:可以在此事件,进行数据同步处理,可能执行失败的同步处理,不适合放在这个事件执行,事务回滚比较麻烦。
rollbackOperation事件:可以在此事件,对没有事务保护的数据更新进行补偿。
afterExecuteOperationTransaction事件:可以在此事件,对操作结果进行整理,或者执行其他无需事务保护的逻辑。
单据操作插件相关文档:
https://vip.kingdee.com/link/s/MUo7Z
https://vip.kingdee.com/link/s/MUo7f
具体案例请参考文章:
https://dev.kingdee.com/index/docsNew/6fb8daba-2b52-41bb-bc1e-820237e2108c
https://club.kdcloud.com/article/208241211567092480
6.注册操作插件
继承AbstractOperationServicePlugIn,给操作注册一个操作插件
7.页面操作事件和操作插件的区别
第4点的页面插件AbstractFormPlugin,第5点的操作插件AbstractOperationServicePlugIn,这两者是有区别的。
例如:
在单据A的保存操作上做了操作插件,在其他页面上,使用SaveServiceHelper.saveOperate,保存了单据A,那么也能执行单据A的操作插件的beforeExecuteOperationTransaction事件。
单据插件只能在打开这个页面上响应,只有进入单据A的详情页面才能触发beforeDoOperation事件。
Open Api 调用操作
开放平台的OpenApi,支持通过http请求,调用api来执行操作。
参考以下文章:
API文档介绍
https://vip.kingdee.com/link/s/MUocD
保存操作API
https://vip.kingdee.com/link/s/MUoce
推荐阅读