实现点击提交时校验信息并弹出确认提示框是否继续原创
金蝶云社区-lilinpo
lilinpo
5人赞赏了该文章 2,773次浏览 未经作者许可,禁止转载编辑于2023年07月01日 19:49:08

1、场景介绍:

    在提交时,校验表单中的一些信息,如果不符合条件就需要弹出确认提示框,让其决定是否取消该次操作。

2、思路

    1、通过操作插件实现:通过操作插件实现方式在最底部。

    2、通过表单插件实现:可通过 beforeDoOperation 进行校验, 通过view弹出确认框。

3、实现

    表单、列表分别需要一个插件

表单:

@Override
public void beforeDoOperation(BeforeDoOperationEventArgs args) {
    super.beforeDoOperation(args);
    FormOperate opreate = (FormOperate) args.getSource();
    switch (opreate.getOperateKey()) {
        case "submit":
            boolean isExceed = false;
            // 在此添加处理逻辑
            
            // 判断是否处理过
            String isDealed = this.getView().getPageCache().get("isDealed");
            if (isExceed && !"true".equals(isDealed)) {
                // 取消原来的操作
                args.setCancel(true);
                // 在用户点击确认框上的按钮后,系统会调用confirmCallBack方法
                ConfirmCallBackListener confirmCallBackListener = new ConfirmCallBackListener("isExceed", this);
                // 设置页面确认框,参数为:标题,选项框类型,回调监听
                this.getView().showConfirm("加班餐费超标,是否提交?", MessageBoxOptions.YesNo, confirmCallBackListener);
                // 只执行一次
                this.getView().getPageCache().put("isDealed", "true");
            }
            break;
        default:
            break;
    }
}

@Override
public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) {
    super.afterDoOperation(afterDoOperationEventArgs);
    this.getView().getPageCache().remove("isDealed");
}

@Override
public void confirmCallBack(MessageBoxClosedEvent messageBoxClosedEvent) {
    //判断回调参数id
    if ("isExceed".equals(messageBoxClosedEvent.getCallBackId())) {
        if (MessageBoxResult.Yes.equals(messageBoxClosedEvent.getResult())) {
            this.getView().invokeOperation("submit");
        } else if (MessageBoxResult.No.equals(messageBoxClosedEvent.getResult())) {
            // 点击否也清除
            this.getView().getPageCache().remove("isDealed");
        }
    }
}

列表:

@Override
public void beforeDoOperation(BeforeDoOperationEventArgs args) {
    super.beforeDoOperation(args);
    FormOperate opreate = (FormOperate) args.getSource();
    switch (opreate.getOperateKey()) {
        case "submit":
            ListSelectedRowCollection selectCols = args.getListSelectedData();
            boolean isExceed = false;
            StringBuffer exceedMsg = new StringBuffer();
            for (ListSelectedRow selectCol : selectCols) {
                // 在此添加处理逻辑
            }
            String isDealed = this.getView().getPageCache().get("isDealed");
            if (isExceed && !"true".equals(isDealed)) {
                exceedMsg.append("加班餐费超标,是否提交?");
                // 取消原来的操作
                args.setCancel(true);
                // 在用户点击确认框上的按钮后,系统会调用confirmCallBack方法
                ConfirmCallBackListener confirmCallBackListener = new ConfirmCallBackListener("isExceed", this);
                // 设置页面确认框,参数为:标题,选项框类型,回调监听
                this.getView().showConfirm(exceedMsg.toString(), MessageBoxOptions.YesNo, confirmCallBackListener);
                // 只执行一次
                this.getView().getPageCache().put("isDealed", "true");
            }
            break;
        default:
            break;
    }
}

@Override
public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) {
    super.afterDoOperation(afterDoOperationEventArgs);
    // 清除
    this.getView().getPageCache().remove("isDealed");
}

@Override
public void confirmCallBack(MessageBoxClosedEvent messageBoxClosedEvent) {
    //判断回调参数id
    if ("isExceed".equals(messageBoxClosedEvent.getCallBackId())) {
        if (MessageBoxResult.Yes.equals(messageBoxClosedEvent.getResult())) {
            this.getView().invokeOperation("submit");
        } else if (MessageBoxResult.No.equals(messageBoxClosedEvent.getResult())) {
            // 点击否也清除
            this.getView().getPageCache().remove("isDealed");
        }
    }
}



实际可在操作插件中做确认提醒

public void onAddValidators(AddValidatorsEventArgs e) {
    super.onAddValidators(e);
    e.addValidator(new AbstractValidator() {
        public void validate() {
            ExtendedDataEntity[] dataEntities = this.getDataEntities();
            this.addWarningMessage(dataEntities[0], json.getString("message"));
        }
    });
}


赞 5