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

涎涎原创约 1124 字大约 4 分钟...KingdeeKingdee

84-金蝶云苍穹单据操作插件onAddValidators事件案例.mdopen in new window

注意

本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。

  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. 预览测试

分割线


相关信息

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

上次编辑于:
贡献者: 涎涎
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.4