-
新建空白动态表单
-
添加一个按钮
-
为其添加事件后保存
以关闭事件为例,将其操作代码项更改为pay
- 编码
package kd.bos.dynamicform.plugin;
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;
/**
* <p>Title: </p>
* <p>
* Description:
* beforeDoOperation事件 试验
* </p>
* <p>Copyright: Copyright (c) 2020</p>
* @author xx
* @date 2020年3月6日
* see_to_overridden
* @version 1.0
*/
public class BeforeDoOperationSample extends AbstractFormPlugin {
private final static String KEY_PAY = "pay";//按钮操作代码的操作编码名称
private final static String OPPARAM_AFTERCONFIRM = "afterconfirm";
/**
* <p>Title: </p>
* <p>
* Description:
* 执行操作前,触发此事件
* </p>
* <p>Copyright: Copyright (c) 2020</p>
* @author xx
* @date 2020年3月6日
* @param param the bare_field_name
* @param args
* @see kd.bos.form.plugin.AbstractFormPlugin#beforeDoOperation(kd.bos.form.events.BeforeDoOperationEventArgs)
* @version 1.0
*/
@Override
public void beforeDoOperation(BeforeDoOperationEventArgs args) {
super.beforeDoOperation(args);
FormOperate operate = (FormOperate)args.getSource();
if (StringUtils.equals(operate.getOperateKey(), KEY_PAY)){
// 付款操作
// 尝试读取操作自定义参数:判断是否确认后再次执行付款操作
RefObject<String> afterConfirm = new RefObject<>();
if (!operate.getOption().tryGetVariableValue(OPPARAM_AFTERCONFIRM, afterConfirm)){
// 自定义操作参数中,没有afterconfirm参数:说明是首次执行付款操作,需要提示用户确认
// 显示确认消息
ConfirmCallBackListener confirmCallBacks = new ConfirmCallBackListener(KEY_PAY, this);
String confirmTip = "您确认要付款给xxx?";
this.getView().showConfirm(confirmTip, MessageBoxOptions.YesNo, ConfirmTypes.Default, confirmCallBacks);
// 在没有确认之前,先取消本次操作
args.setCancel(true);
}
// 如下代码,演示如何增加自定义操作参数,由系统传递给操作服务及操作插件
// (仅供演示,与本案例需求无关)
operate.getOption().setVariableValue(OPPARAM_AFTERCONFIRM, "true");
}
}
/**
* <p>Title: </p>
* <p>
* Description:
* 用户确认了交互信息后,触发此事件
* </p>
* <p>Copyright: Copyright (c) 2020</p>
* @author xx
* @date 2020年3月6日
* @param param the bare_field_name
* @param messageBoxClosedEvent
* @see kd.bos.form.plugin.AbstractFormPlugin#confirmCallBack(kd.bos.form.events.MessageBoxClosedEvent)
* @version 1.0
*/
@Override
public void confirmCallBack(MessageBoxClosedEvent messageBoxClosedEvent) {
super.confirmCallBack(messageBoxClosedEvent);
if (StringUtils.equals(KEY_PAY, messageBoxClosedEvent.getCallBackId())){
// 付款确认
if (messageBoxClosedEvent.getResult() == MessageBoxResult.Yes){
// 确认执行付款操作
// 构建操作自定义参数,标志为确认后再次执行操作,避免重复显示交互提示
OperateOption operateOption = OperateOption.create();
operateOption.setVariableValue(OPPARAM_AFTERCONFIRM, "true");
// 执行付款操作,并传入自定义操作参数
this.getView().invokeOperation(KEY_PAY, operateOption);
}
}
}
}
- 重启服务后注册页面插件后预览测试
如下图所示则为测试成功
以上就是我关于 金蝶云苍穹动态表单插件beforeDoOperation事件案例 知识点整理与总结的全部内容,希望对你有帮助。。。。。。。
分割线
网友评论