美文网首页
金蝶云苍穹单据操作插件onAddValidators事件案例

金蝶云苍穹单据操作插件onAddValidators事件案例

作者: 涎涎 | 来源:发表于2020-08-23 00:01 被阅读0次
    1. 新建模板单据

    2. 设置单据表名 t_bill_test1

    1. 新建高级面板,添加单据体,并设置分录操作代码,添加日期控件
    1. 再交新建高级面板,添加子单据体,设置子分录操作代码,添加日期控件
    1. 保存后管理员用户登录后授权后进行编码
    package kd.bos.billoperation.plugin;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import kd.bos.entity.ExtendedDataEntity;
    import kd.bos.entity.formula.RowDataModel;
    import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
    import kd.bos.entity.plugin.AddValidatorsEventArgs;
    import kd.bos.entity.plugin.PreparePropertysEventArgs;
    import kd.bos.entity.validate.AbstractValidator;
    
    /**
     * <p>Title: </p>
     * <p>
     *    Description:
     *    试验成功
     * </p>
     * <p>Copyright: Copyright (c) 2020</p>
     * @author xx
     * @date 2020年3月16日
     * @version 1.0
     */
    public class OnAddValidatorsSample extends AbstractOperationServicePlugIn {
        /**
         * <p>Title: </p>
         * <p>
         *    Description:
         * 操作执行前,准备加载单据数据之前,触发此事件
         * @remark
         * 插件可以在此事件中,指定需要加载的字段
         * </p>
         * <p>Copyright: Copyright (c) 2020</p>
         * @author xx
         * @date 2020年3月16日
         * @param param the bare_field_name
         * @param e
         * @see kd.bos.entity.plugin.IOperationServicePlugIn#onPreparePropertys(kd.bos.entity.plugin.PreparePropertysEventArgs)
         * @version 1.0
         */
        @Override
        public void onPreparePropertys(PreparePropertysEventArgs e) {
            // 要求加载预计送货日期、最迟送货日期字段
            e.getFieldKeys().add(DelivaryDateValidator.KEY_DELIVERYDATE);
            e.getFieldKeys().add(DelivaryDateValidator.KEY_LASTDATE);
        }
    
        /**
         * <p>Title: </p>
         * <p>
         *    Description:
         * 执行操作校验前,触发此事件
         * @remark
         * 插件可以在此事件,调整预置的操作校验器;或者增加自定义操作校验器
         * </p>
         * <p>Copyright: Copyright (c) 2020</p>
         * @author xx
         * @date 2020年3月16日
         * @param param the bare_field_name
         * @param e
         * @see kd.bos.entity.plugin.IOperationServicePlugIn#onAddValidators(kd.bos.entity.plugin.AddValidatorsEventArgs)
         * @version 1.0
         */
        @Override
        public void onAddValidators(AddValidatorsEventArgs e) {
            // 添加自定义的校验器:送货日期校验器
            e.addValidator(new DelivaryDateValidator());
        }
    }
    
    /**
     * 
     * <p>Title: </p>
     * <p>
     *    Description:
     * 自定义操作校验器:校验送货日期
     * </p>
     * <p>Copyright: Copyright (c) 2020</p>
     * @author xx
     * @date 2020年3月16日
     * see_to_overridden
     * @version 1.0
     */
    class DelivaryDateValidator extends AbstractValidator {
    
        /** 预计送货日期字段标识 */
        public final static String KEY_DELIVERYDATE = "deliverydate";
        /** 最迟送货日期字段标识 */
        public final static String KEY_LASTDATE = "lastdate";
        /**
         * <p>Title: </p>
         * <p>
         *    Description:
         * 返回校验器的主实体:系统将自动对此实体数据,逐行进行校验
         * </p>
         * <p>Copyright: Copyright (c) 2020</p>
         * @author xx
         * @date 2020年3月16日
         * @param param the bare_field_name
         * @return
         * @see kd.bos.entity.validate.AbstractValidator#getEntityKey()
         * @version 1.0
         */
        @Override
        public String getEntityKey() {
            return this.entityKey;
        }
        /**
         * <p>Title: </p>
         * <p>
         *    Description:
         * 给校验器传入上下文环境及单据数据包之后,调用此方法;
         * @remark
         * 自定义校验器,可以在此事件进行本地变量初始化:如确认需要校验的主实体
         * </p>
         * <p>Copyright: Copyright (c) 2020</p>
         * @author xx
         * @date 2020年3月16日
         * @param param the bare_field_name
         * @see kd.bos.entity.validate.AbstractValidator#initializeConfiguration()
         * @version 1.0
         */
        @Override
        public void initializeConfiguration() {
            super.initializeConfiguration();
            // 在此方法中,确认校验器检验的主实体:送货子单据体
            // 需要对送货子单据体行,逐行判断预计送货日期
            this.entityKey = "subentryentity";      
        }
    
        /**
         * <p>Title: </p>
         * <p>
         *    Description:
         * 校验器初始化完毕,从单据数据包中,提取出了主实体数据行,开始校验前,调用此方法;
         * @remark
         * 此方法,比initializeConfiguration更晚调用;
         * 在此方法调用this.getDataEntities(),可以获取到需校验的主实体数据行
         * 不能在本方法中,确认需要校验的主实体
         * </p>
         * <p>Copyright: Copyright (c) 2020</p>
         * @author xx
         * @date 2020年3月16日
         * @param param the bare_field_name
         * @see kd.bos.entity.validate.AbstractValidator#initialize()
         * @version 1.0
         */
        @Override
        public void initialize() {
            super.initialize();
        }
    
        /**
         * <p>Title: </p>
         * <p>
         *    Description:
         * 执行自定义校验
         * </p>
         * <p>Copyright: Copyright (c) 2020</p>
         * @author xx
         * @date 2020年3月16日
         * @param param the bare_field_name
         * @see kd.bos.entity.validate.AbstractValidator#validate()
         * @version 1.0
         */
        @Override
        public void validate() {
            
            // 定义一个行数据存取模型:用于方便的读取本实体、及父实体、单据头上的字段
            RowDataModel rowDataModel = new RowDataModel(this.entityKey, this.getValidateContext().getSubEntityType());
            SimpleDateFormat timesdf = new SimpleDateFormat("yyyy-MM-dd");
            
            // 逐行校验预计送货
            for(ExtendedDataEntity rowDataEntity : this.getDataEntities()){
                rowDataModel.setRowContext(rowDataEntity.getDataEntity());
                Date deliveryDate = (Date)rowDataModel.getValue(KEY_DELIVERYDATE);
                Date lastDate = (Date)rowDataModel.getValue(KEY_LASTDATE);
                
                if (deliveryDate.compareTo(lastDate) > 0 ){
                    // 校验不通过,输出一条错误提示
                    this.addErrorMessage(rowDataEntity, 
                            String.format("预计送货日期(%s),不能晚于最迟送货日期(%s)!", 
                                    timesdf.format(deliveryDate), timesdf.format(lastDate)));
                }
            }
        }
    }
    
    1. 重启服务后在保存按钮注册插件
    1. 预览测试

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


    分割线

    相关文章

      网友评论

          本文标题:金蝶云苍穹单据操作插件onAddValidators事件案例

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