В версии XAF 13.2 появилась возможность добавлять к объектам и доменным компонентам вычисляемые поля используя ModelEditor.

Но не все разработчики знают о возможностях выражений, а именно о возможности использования произвольного соединения объектов незадекларированного разработчиком в C#.

Для этих целей в XAF используется базовый функционал вычислятора Free Join

Рассмотрим на примере XCRM

Добавим в сущность "Контакт" два поля:

  1. Поле «test2-status» - количество контактов с совпадающим статусом
  2. Поле «test2-b» - количество контактов возраст которых больше текущего

Стоит в начале заметить что функционал Free Join не совсем корректно работает с доменными компонентами, а вернее в формулах не работает. Так в формулах приходится использовать имена классов под которыми зарегистрированы документные компоненты. Тут конечно небольшое упущение текущей версии XAF, т.к. без наличия исходного кода (используя только Model Editor) нельзя выяснить имя класса под которым зарегистрирован в приложении доменный компонент.

>>    очень полезно в будущих версиях XAF получить подобный узел, в котором можно было бы увидеть все зарегистрированные классы с возможностью отобразить все их поля, в том числе с учетом иерархии наследования

Но для написания формул нам необходимо выяснить регистрацию, поэтому открываем файл XCRMModule.cs в нем находим строку регистрации доменного компонента ICRMContact

XafTypesInfo.Instance.RegisterEntity("Contact", typeof(ICRMContact));

В выражениях нам придется использовать тип Contact, а вычисляемые поля будем добавлять в узел BOM ICRMContact

Открываем редактор модели и добавляем два поля

Указываем у обоих тип Int32 и соответствующий редактор

Записываем две формулы:

  1. test2-status    = [<Contact>][^.[Birthday] <=[Birthday]].Count()
  2. test2-b        = [<Contact>][^.[Status]=[Status]].Count()

Для простоты тут использована всего одна функция Count(), но можно использовать и другие доступные (Sum, Min, Avg и пр.)

Сохраняем изменения и проверяем – Все замечательно работает!

Подобный фантастический функционал вычисляемых выражений делает систему поистине очень гибкой и расширяемой.