Click or drag to resize
CalculationWorks Logo
Accessing Validator Results
Accessing Validator Results

This example shows three different ways to access validator results.

Create a c# console application named "ConsoleApplication1" and paste the code in Program.cs. Add a reference to CalculationWorks.FreeEdition.BusinessModel library (available on NuGet).

using System;
using System.Linq;
using CalculationWorks.FreeEdition.BusinessModel;
using CalculationWorks.FreeEdition.BusinessModel.Behaviors;
using CalculationWorks.FreeEdition.BusinessModel.Design;

namespace ConsoleApplication1 {
    public class GreaterThanValidator : BcfValidatorBase {

        [BcfMandatory]
        public int GreaterValue { get; set; }

        [BcfMandatory]
        public int LessValue { get; set; }

        public override BcfValidatorMessage Validate() {
            if (GreaterValue > LessValue) return null;
            return new BcfValidatorMessage("{0} is not greater then {1}", GreaterValue, LessValue);
        }
    }

    public class LessThan3Validator : BcfValidatorBase {

        [BcfMandatory]
        public int Value { get; set; }

        public override BcfValidatorMessage Validate() {
            if (Value < 3) return null;
            return new BcfValidatorMessage("{0} is not less then 3", Value);
        }
    }

    class Program {
        static void Main(string[] args) {
            Console.Title = "Accessing Validator Results";

            var dss = CreateTestDataSetSetup();

            var ds = new BcfDataSet(dss);
            var table1 = ds.Tables[0];
            var row1 = table1.AddNewRow();
            var cell1 = row1[0];
            var cell2 = row1[1];
            cell1.Value = 1;
            cell2.Value = 5;

            Console.WriteLine("Content of: ds.ValidationResults collection");
            foreach (var validationResult in ds.ValidationResults) {
                Console.WriteLine("Validator: {0}, Row: {1}, CellsTagged: {2}\n   Message: \"{3}\""
                    , validationResult.CellContent.ValidatorCell.Validator.GetType().Name
                    , validationResult.CellContent.ValidatorCell.ValidatingRow.GetHashCode()
                    , validationResult.GetCellsTagged().Count()
                    , string.Format(validationResult.CellContent.Message.FormatString, validationResult.CellContent.Message.FormatParameters));
            }
            Console.WriteLine();

            Console.WriteLine("Content of: row1.GetValidationTags()");
            foreach (var tag in row1.GetValidationTags()) {
                Console.WriteLine("Validator: {0}, Message: \"{1}\"", tag.ValidatorCell.Validator.GetType().Name, string.Format(tag.Message.FormatString, tag.Message.FormatParameters));
            }
            Console.WriteLine();

            Console.WriteLine("Content of: row1.GetValidationTags(cell1)");
            foreach (var tag in row1.GetValidationTags(cell1)) {
                Console.WriteLine("Validator: {0}, Message: \"{1}\"", tag.ValidatorCell.Validator.GetType().Name, string.Format(tag.Message.FormatString, tag.Message.FormatParameters));
            }
            Console.WriteLine();

            Console.WriteLine("Content of: row1.GetValidationTags(cell2)");
            foreach (var tag in row1.GetValidationTags(cell2)) {
                Console.WriteLine("Validator: {0}, Message: \"{1}\"", tag.ValidatorCell.Validator.GetType().Name, string.Format(tag.Message.FormatString, tag.Message.FormatParameters));
            }
            Console.WriteLine();

            Console.ReadKey();
        }

        private static BcfDataSetSetup CreateTestDataSetSetup() {
            var dss = new BcfDataSetSetup("Test");
            // Table1
            BcfTableSetup table1Table = dss.AddTable("Table1");
            // Table1.Column1
            BcfColumnSetup table1TableColumn1Column = table1Table.AddColumn("Column1");
            table1TableColumn1Column.BehaviorItems.Add(new BcfColumnValueSetter());
            table1TableColumn1Column.BehaviorItems.Add(new BcfColumnType(typeof(int)));
            table1TableColumn1Column.BehaviorItems.Add(new BcfColumnTypeConstraint<int>());
            table1TableColumn1Column.BehaviorItems.Add(new BcfColumnNotNullConstraint());
            table1TableColumn1Column.BehaviorItems.Add(new BcfColumnDefaultValueSource<int>());
            // Table1.Column2
            BcfColumnSetup table1TableColumn2Column = table1Table.AddColumn("Column2");
            table1TableColumn2Column.BehaviorItems.Add(new BcfColumnValueSetter());
            table1TableColumn2Column.BehaviorItems.Add(new BcfColumnType(typeof(int)));
            table1TableColumn2Column.BehaviorItems.Add(new BcfColumnTypeConstraint<int>());
            table1TableColumn2Column.BehaviorItems.Add(new BcfColumnNotNullConstraint());
            table1TableColumn2Column.BehaviorItems.Add(new BcfColumnDefaultValueSource<int>());
            {
                // Table1.Validator[1]
                BcfValidatorSetup v = table1Table.AddValidator<GreaterThanValidator>();
                v.AllowExecuteParallel = false;
                BcfParameterSetup p1 = v.AddParameter("GreaterValue", "Column1", true);
                p1.BehaviorItems.Add(new BcfParameterValueSetter<GreaterThanValidator, int>((fn, value) => fn.GreaterValue = value));
                BcfParameterSetup p2 = v.AddParameter("LessValue", "Column2", true);
                p2.BehaviorItems.Add(new BcfParameterValueSetter<GreaterThanValidator, int>((fn, value) => fn.LessValue = value));
            }
            {
                // Table1.Validator[2]
                BcfValidatorSetup v = table1Table.AddValidator<LessThan3Validator>();
                v.AllowExecuteParallel = false;
                BcfParameterSetup p1 = v.AddParameter("Value", "Column1", true);
                p1.BehaviorItems.Add(new BcfParameterValueSetter<LessThan3Validator, int>((fn, value) => fn.Value = value));
            }
            {
                // Table1.Validator[3]
                BcfValidatorSetup v = table1Table.AddValidator<LessThan3Validator>();
                v.AllowExecuteParallel = false;
                BcfParameterSetup p1 = v.AddParameter("Value", "Column2", true);
                p1.BehaviorItems.Add(new BcfParameterValueSetter<LessThan3Validator, int>((fn, value) => fn.Value = value));
            }
            return dss;
        }
    }
}

The sample generated output:

Validator Output