beforeDoOperation事件

1 事件介绍
插件可以在此事件:
提示确认消息;
校验数据,取消操作的执行;
传递给自定义操作参数给操作服务、操作插件。
2 事件触发时机
用户点击按钮、菜单,执行绑定的操作逻辑前,触发此事件;
表单beforeDoOperation事件与操作校验器的区别:
运行时机不同:
1. 表单beforeDoOperation事件,是由表单触发的,只有在表单上执行操作时,才会被触发;后台直接操作服务,不会触发此事件;数据校验逻辑放在这个事件,有可能漏过;
2. 操作校验器,是由微服务层操作引擎执行的,不管是在表单上执行操作,还是后台调用操作服务,都会执行微服务层操作引擎,都会执行操作校验器。
适用的操作类型不同:
1. 操作分为两种大类:
表单操作:对界面进行处理,如关闭界面;
实体操作:更新数据库,如保存;
2. 只有实体操作,才允许配置操作校验;
3. 对普通的表单操作进行数据校验,只能使用表单插件beforeDoOperation事件。
控制颗粒度不同:
1. 批量操作时,操作校验器,对批量数据进行逐个校验,略过校验失败的数据,继续执行校验成功数据;
2. 表单beforeDoOperation事件,只能整体取消操作,不能对批量数据进行区分。
因此,对操作进行数据校验,尽可能配置操作校验器、或使用操作插件,而不是使用表单beforeDoOperation事件。
3 代码模板
package kd.bos.plugin.sample.dynamicform.pcform.form.template;
import kd.bos.dataentity.utils.StringUtils;
import kd.bos.form.events.BeforeDoOperationEventArgs;
import kd.bos.form.operate.FormOperate;
import kd.bos.form.plugin.AbstractFormPlugin;
public class BeforeDoOperation extends AbstractFormPlugin {
final static String KEY_OPKEY = "myoperation";
@Override
public void beforeDoOperation(BeforeDoOperationEventArgs args) {
super.beforeDoOperation(args);
FormOperate formOperate = (FormOperate)args.getSource();
if ( StringUtils.equals(KEY_OPKEY, formOperate.getOperateKey())){
// TODO 在此添加业务逻辑
}
}
}
说明:
常量KEY_OPKEY 是操作标识,要根据实际场景进行替换。
4 参数说明
BeforeDoOperationEventArgs args:
Object getSource():FormOperate类型,操作执行类,包含了操作的配置信息;
void setCancel(boolean cancel):可以取消操作。
5 应用示例
5.1 案例说明
1. 用户点击"付款"菜单按钮时,提示用户确认:
用户确认后,才继续执行付款操作;
用户取消,则不执行付款操作。
5.2 实现方案
1. 捕获表单beforeDoOperation 事件:
开始执行付款前,显示交互提示,取消本次操作;
用户确认后再次执行付款操作时,不再重复显示交互提示;
通过自定义操作参数,标志是否为确认后再次执行操作。
2. 捕获表单confirmCallBack 事件:
获取用户确认结果;
用户确认付款时,重新调用付款操作;
设置自定义操作参数值,标志为确认后再次执行操作,避免重复显示交互提示。
5.3 实例代码
package kd.bos.plugin.sample.dynamicform.pcform.form.bizcase;
import kd.bos.dataentity.OperateOption;
import kd.bos.dataentity.RefObject;
import kd.bos.dataentity.utils.StringUtils;
import kd.bos.form.ConfirmCallBackListener;
import kd.bos.form.ConfirmTypes;
import kd.bos.form.MessageBoxOptions;
import kd.bos.form.MessageBoxResult;
import kd.bos.form.events.BeforeDoOperationEventArgs;
import kd.bos.form.events.MessageBoxClosedEvent;
import kd.bos.form.operate.FormOperate;
import kd.bos.form.plugin.AbstractFormPlugin;
public class BeforeDoOperationSample extends AbstractFormPlugin {
private final static String KEY_PAY = "pay";
private final static String OPPARAM_AFTERCONFIRM = "afterconfirm";
/**
* 执行操作前,触发此事件
*/
@Override
public void beforeDoOperation(BeforeDoOperationEventArgs args) {
super.beforeDoOperation(args);
FormOperate operate =beforeDoOperation事件
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



