美文网首页
金蝶云苍穹动态表单插件beforeDoOperation事件案例

金蝶云苍穹动态表单插件beforeDoOperation事件案例

作者: 涎涎 | 来源:发表于2020-09-01 00:01 被阅读0次
  1. 新建空白动态表单

  2. 添加一个按钮

  3. 为其添加事件后保存

以关闭事件为例,将其操作代码项更改为pay

  1. 编码
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);
            }
        }
    }
}
  1. 重启服务后注册页面插件后预览测试

如下图所示则为测试成功

以上就是我关于 金蝶云苍穹动态表单插件beforeDoOperation事件案例 知识点整理与总结的全部内容,希望对你有帮助。。。。。。。


分割线

相关文章

网友评论

      本文标题:金蝶云苍穹动态表单插件beforeDoOperation事件案例

      本文链接:https://www.haomeiwen.com/subject/fqrmsktx.html