电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

二开插件 - 动态调用必录校验器的方法

来源:金蝶云社区作者:金蝶2024-09-238

二开插件 - 动态调用必录校验器的方法

客户需求: 目前操作可以配置校验器,如果校验失败可以终止操作。但是操作的校验器需要在元数据中配置后才会执行,能不能根据需要动态调用校验器呢?


解决方法:

1. 通过T_MDL_FORMVALIDATIONTYPE / T_MDL_FORMVALIDATIONTYPE_L查看校验器Id。

可知必录校验器的FTYPEID=1014


2. 通过元数据,查看校验器的表达式。

可知格式为 单据体Key + 冒号 + 字段 + 分号,同一单据体的字段可以列多个。 

不同单据体的字段需要创建不同的校验器。


3. 调用必录校验器的代码如下,可以动态增加必录字段。


/// <summary>
/// 为每个实体的必录字段创建必录校验器
/// </summary>
/// <param name="ctx"></param>
/// <param name="bizInfo">单据元数据</param>
/// <param name="dataEntities">数据包</param>
/// <param name="dic">多个必录校验的表达式。Key=EntityKey,Value=Express</param>
/// <param name="option">可以为null</param>
/// <returns></returns>
private static List<ValidationErrorInfo> ValidateMustInput(Context ctx, BusinessInfo bizInfo, DynamicObject[] dataEntities, Dictionary<string, string> dic, OperateOption option)
{
    var lstValidation = GetMustInputValidations(dic);
    var validateContext = CreateValidateContext(ctx, bizInfo, "Save", true);
    validateContext.Option = option;
    var validationService = CreateValidationService(ctx);
    validationService.Validators = lstValidation;
    //执行校验服务
    List<ValidationErrorInfo> errorInfo;
    validationService.TryValidate(dataEntities, validateContext, out errorInfo);
    var billNoField=bizInfo.GetBillNoField();
    if (!errorInfo.IsEmpty() && billNoField != null && dataEntities[0].DynamicObjectType.Properties.ContainsKey(billNoField.PropertyName))
    {
        List<ValidationErrorInfo> errorInfoNo = new List<ValidationErrorInfo>();
        for (int i = 0, j = 0; i < dataEntities.Length; i++)
        {
            var dyn = dataEntities[i];
            string id = ObjectUtils.Object2String(dyn["Id"]);
            var lstTmp = errorInfo.Where(m => m.BillPKID == id).ToList();
            if (lstTmp.IsEmpty()) continue;
            string title = Kingdee.BOS.Resource.ResManager.LoadKDString("单据编号", "0025669000008480", Kingdee.BOS.Resource.SubSystemType.BOS) + dyn[billNoField.PropertyName];
            foreach (var itemError in lstTmp)
            {
                errorInfoNo.Add(new ValidationErrorInfo(itemError.DisplayToFieldKey, itemError.BillPKID, i, j++, itemError.Id, itemError.Message, title));
            }
        }
        return errorInfoNo;
    }           
    return errorInfo

二开插件 - 动态调用必录校验器的方法

客户需求: 目前操作可以配置校验器,如果校验失败可以终止操作。但是操作的校验器需要在元数据中配置后才会执行,能不能根据需要动态调用...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信