Разработчик бизнес-приложения может реализовать собственные функции и расширить ими набор встроенных функций, доступных в редакторе выражений. Под пользовательской функцией понимается класс, который реализует интерфейс ICustomFunctionOperatorBrowsable. Реализованная функция должна быть зарегистрирована с помощью статического метода CriteriaOperator.RegisterCustomFunction.

Рассмотрим пример реализации и регистрации функции AddNumbersFunction, которая возвращает сумму двух чисел, переданных в качестве параметров.

Реализация:

 

  public class AddNumbersFunction : ICustomFunctionOperatorBrowsable

   {

      public Type ResultType(params Type[] operands)

       {

          return typeof (int);

       }

 

      public object Evaluate(params object[] operands)

       {

          return ((int) operands[0]) + ((int) operands[1]);

       }

 

      public string Name { get { return "AddNumbers"; } }

      public bool IsValidOperandCount(int count)

       {

          return count == 2;

       }

 

      public bool IsValidOperandType(int operandIndex, int operandCount, Type type)

       {

          if (operandCount != 2)

           {

              return false;

           }

          return ((operandIndex == 0) || ((operandIndex == 1) && (type == typeof(int))));

       }

 

      public int MinOperandCount { get { return 2; } }

      public int MaxOperandCount { get { return 2; } }

      public string Description { get { return CaptionHelper.GetLocalizedText("Texts", "AddNumberFunction"); } }

      public FunctionCategory Category { get { return FunctionCategory.All; } }

   }

 

Регистрация в Module.cs:

 

    public override void Setup(XafApplication application)

     {

 

      ...

           var customFunction = new AddNumbersFunction();

        if (CriteriaOperator.GetCustomFunction(customFunction.Name) == null)

            CriteriaOperator.RegisterCustomFunction(customFunction);

           ...

     }

 

Использованный в этой статье код можно найти в файлах AddNumbersFunction.cs и Module.cs демо-приложения Feature Center, установленного вместе с Xafari.