-
新建模板单据
-
设置单据表名 t_bill_test1
- 新建高级面板,添加单据体,并设置分录操作代码,添加日期控件
- 再交新建高级面板,添加子单据体,设置子分录操作代码,添加日期控件
- 保存后管理员用户登录后授权后进行编码
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)));
}
}
}
}
- 重启服务后在保存按钮注册插件
- 预览测试
以上就是我关于 金蝶云苍穹左树右表单据列表插件onAddValidators事件案例 知识点整理与总结的全部内容,希望对你有帮助。。。。。。。
分割线
网友评论