powered by simpleCommunicator - 2.0.57     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / XAF - как описать вычисляемое поле
11 сообщений из 11, страница 1 из 1
XAF - как описать вычисляемое поле
    #38145671
Фотография defragmentator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
В табличке есть вычисляемое поле isCurrent
Код: sql
1.
(case when [dDateFrom]<=getdate() AND ([dDateTo] IS NULL OR getdate()<=[dDateTo]) then (1) else (0) end)



Хочу отобразить его в классе XAF. Пишу так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
        Boolean fisCurrent;
        [DisplayName("Текущий")]
        [Custom("AllowEdit", "False"), Custom("AllowAdd", "false")]
        public Boolean isCurrent
        {
            get { return fisCurrent; }
            set { SetPropertyValue<Boolean>("isCurrent", ref fisCurrent, value); }
        }



Отображает нормально. Однако, как только хочу добавить новую запись, выдаёт мне сообщение, что программа хочет сделать INSERT в БД значения в это поле. Но поле - то вычисляемое. В него нельзя вставлять. Перепробовал все варианты. Никак не могу подобрать правильный.
...
Рейтинг: 0 / 0
XAF - как описать вычисляемое поле
    #38145867
SerP1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Вычисляемое NonPersistent поле на клиенте
или
2) Подсунуть свой UnitOfWork, где переопределить GetPropertiesListForUpdateInsert
...
Рейтинг: 0 / 0
XAF - как описать вычисляемое поле
    #38146210
Фотография defragmentator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerP19831) Вычисляемое NonPersistent поле на клиенте
или
2) Подсунуть свой UnitOfWork, где переопределить GetPropertiesListForUpdateInsert

Пробовал вариант с NonPersistent, почему-то при этом значение поля перестаёт считываться из БД.
...
Рейтинг: 0 / 0
XAF - как описать вычисляемое поле
    #38146213
SerP1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так оно и не должно считываться из БД (на то оно и NonPersistent), пусть себе тихонько на клиенте вычисляется)))
...
Рейтинг: 0 / 0
XAF - как описать вычисляемое поле
    #38146220
Фотография defragmentator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerP1983Так оно и не должно считываться из БД (на то оно и NonPersistent), пусть себе тихонько на клиенте вычисляется)))
Понятно, значит, использовать БД-шное вычисляемое поле нельзя:)
...
Рейтинг: 0 / 0
XAF - как описать вычисляемое поле
    #38146239
SerP1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну почему нельзя, можно, если подсунуть свой UnitOfWork. Вы какой ObjectSpaceProvider пользуете? Если надо, как это сделать, скину.
И не по теме вопрос: как вам этот монстр xaf и почему решили на нем что-либо пробовать?
...
Рейтинг: 0 / 0
XAF - как описать вычисляемое поле
    #38146275
Фотография defragmentator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerP1983,

честно говоря, не знаю, какой ObjectSpaceProvider используется.
Я всего лишь мелкий участник проекта и меня им заставили заниматься только потому, что больше меня занять нечем:))
Ну а монстр, конечно, отвратителен, продуман плохо.
При загрузке приложения начинает проверять все связи объектов, что не есть гуд.
Лучше это делать при открытии объектов непосредственно и 1 раз.
Кроме того, настройки (модель) хранится в текстовых файлах (*.xafml), что создаёт существенные трудности при командной разработке. На мой взгляд, модель проще было пихнуть в служебные таблицы в БД.
...
Рейтинг: 0 / 0
XAF - как описать вычисляемое поле
    #38146339
SerP1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WinApplication.cs:
Код: c#
1.
2.
3.
4.
        protected override void CreateDefaultObjectSpaceProvider(CreateCustomObjectSpaceProviderEventArgs args)
        {
            args.ObjectSpaceProvider = new ???
        }
...
Рейтинг: 0 / 0
XAF - как описать вычисляемое поле
    #38146394
Фотография defragmentator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerP1983WinApplication.cs:
Код: c#
1.
2.
3.
4.
        protected override void CreateDefaultObjectSpaceProvider(CreateCustomObjectSpaceProviderEventArgs args)
        {
            args.ObjectSpaceProvider = new ???
        }



XPObjectSpaceProvider(args.ConnectionString, args.Connection);
...
Рейтинг: 0 / 0
XAF - как описать вычисляемое поле
    #38146449
SerP1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот как-то так через ж.. Мне повезло, у меня были исходники))
От версии к версии может и не работать.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
    public class MyObjectSpaceProvider : ObjectSpaceProvider
    {
        public MyObjectSpaceProvider(IXpoDataStoreProvider dataStoreProvider)
            : base(dataStoreProvider)
        {
        }

        protected override IObjectSpace CreateObjectSpaceCore(UnitOfWork unitOfWork, DevExpress.ExpressApp.DC.ITypesInfo typesInfo)
        {
            return base.CreateObjectSpaceCore(new MyUnitOfWork(unitOfWork.DataLayer), typesInfo);
        }
    }

    public class MyUnitOfWork : UnitOfWork
    {
        public MyUnitOfWork(IDataLayer layer, params IDisposable[] disposeOnDisconnect)
            : base(layer, disposeOnDisconnect)
        {
        }

        protected override MemberInfoCollection GetPropertiesListForUpdateInsert(object theObject, bool isUpdate)
        {
            var list = base.GetPropertiesListForUpdateInsert(theObject, isUpdate);

            for (int i = list.Count - 1; i >= 0; i--)
            {
                Func<Attribute, bool> customAttrWhere = x =>
                    x is CustomAttribute
                    && (x as CustomAttribute).Name == "AllowEdit"
                    && (x as CustomAttribute).Value == "false";

                var customAttr = list[i].Attributes.FirstOrDefault(customAttrWhere);

                if (customAttr != null)
                    list.RemoveAt(i);
            }

            return list;
        }
    }



Дальше подсовывайте MyObjectSpaceProvider в методе CreateDefaultObjectSpaceProvider.
...
Рейтинг: 0 / 0
XAF - как описать вычисляемое поле
    #38146597
Фотография defragmentator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerP1983,

спасибо, если будет вдохновение, попробую куда-нибудь подсунуть.
А так уже сделал, вычисляю поле прямо в клиенте.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / XAF - как описать вычисляемое поле
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]