[]
        
(Showing Draft Content)

自定义校验

当单元格的设置比较多时,用户的设置可能不总是正确的,可以通过自定义校验,实现单元格设置的校验逻辑。

例如,有一个单元格,有两个数字类型的属性,代码如下:

    [Designer("MyPlugin.Designer.MyPluginCellTypeDesigner, MyPlugin")]
    public class MyPluginCellType : CellType
    {
        public int MyProperty { get; set; }
        public int MyProperty1 { get; set; }
    }

如果校验逻辑要求,MyProperty 与 MyProperty1 的和必须大于100,如果小于100,应该给用户提出警告;如果小于10 ,则应该提出错误。这是一个相对复杂的校验逻辑,没有办法通过标注 Attribute 实现,只能通过代码逻辑来实现。实现的方式是让 CellTypeDesigner 实现 ICellTypeChecker接口。代码如下:

    public class MyPluginCellTypeDesigner : CellTypeDesigner<MyPluginCellType>, ICellTypeChecker
    {
        public IEnumerable<ForguncyErrorInfo> CheckCellTypeErrors(IBuilderContext context)
        {
            if (this.CellType.MyProperty + this.CellType.MyProperty1 <= 10)
            {
                yield return new ForguncyErrorInfo()
                {
                    ErrorType = ForguncyErrorType.Error,
                    Message = "MyProperty 与 MyProperty1 的和不能小于等于 10"
                };
            }
            else if (this.CellType.MyProperty + this.CellType.MyProperty1 < 100)
            {
                yield return new ForguncyErrorInfo()
                {
                    ErrorType = ForguncyErrorType.Warning,
                    Message = "MyProperty 与 MyProperty1 的和小于 100 的设置是不合理的,请考虑修改"
                };
            }
        }
    }

效果:

  • 当命令的设置为两个属性值的和大于等于 100 时,活字格不会报错;

  • 当命令的设置为两个属性值的和在 10 到 99 之间时,活字格在运行时会产生一个警告;

    image·

  • 命令的设置为两个属性值的和小于 10 时,活字格在运行时会产生一个错误,并且不会运行应用程序。

    image

type=note

校验逻辑会在每次活字格生成工程时都会被触发。开发者应该尽量保证校验逻辑高效进行,避免IO、网络访问、大量循环等慢操作,导致活字格生成效率降低。