Форум НПФ  

Вернуться   Форум НПФ "ТОПОМАТИК" > Программные продукты "Топоматик Robur" на платформе "Robur AP3" > Средства разработки Топоматик Robur > Вопросы и ответы
Ник
Пароль
Регистрация FAQ Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06-21-2018, 9:12
Gavrishuk_IM Gavrishuk_IM вне форума
Новичок
 
Регистрация: Feb 2012
Адрес: Иркутск
Сообщения: 21
По умолчанию Хранение пользовательских данных

И снова здравствуйте!
Для примера, в моем модуле есть два простейших класса: ProjectInfoClass содержит текстовые поля с общей дополнительной информацей о проекте - имя заказчика, номер контракта и пр.; и RoadInfoClass содержит дополнительную информацию о конкретном подобъекте (как правило, это автомобильная дорога) - кадастровый номер участка, год постройки и пр.
Соответственно, RoadInfoClass должен сохранить свои данные в хранилище конкретного подобъекта (например в файле "подъезд.roadx"), а ProjectInfoClass - в каком-то глобальном хранилище (если такое у проекта вообще есть :-D).
Помогите пожалуйста разобраться с принципами хранения содержимого пользовательских классов в проекте. Пробовал переопределять методы SaveToStg и LoadFromStg, которые есть у класса Module, вроде данные записываются при закрытии и загружаются при открытии проекта, но все равно нет понимания, в какие файлы все это в итоге записывается, и правильно ли я вообще действую.
Ответить с цитированием
  #2  
Старый 06-21-2018, 12:35
Василий Гончаров Василий Гончаров вне форума
Разработчик Robur
 
Регистрация: Oct 2016
Сообщения: 27
По умолчанию

Добрый день!

Возможны три способа хранения настроек. Для всех трех случаев Ваш объект должен поддерживать интерфейс IStgSerializable. Дальше на уровне Вашего модуля вы можете сделать следующее:

1. Сохранить информацию в настройках приложения Робур, тогда она сохранится при закрытии приложения, а загрузится при открытии.
Код:
protected override void OnCreateApplication(object sender, CreateApplicationEventArgs e) { base.OnCreateApplication(sender, e); ApplicationHost.Current.Settings["<Ключ>"] = <IStgSerializable>; }


2. Сохранить информацию в настройках проекта Робур, тогда она сохраниться при закрытии проекта, а загрузится при открытии проекта.
Код:
protected override void OnCreateProject(object sender, CreateProjectEventArgs e) { base.OnCreateProject(sender, e); var project = e.Project as ICoreProject; if (project != null) { project.UserSettings["<Ключ>"] = <IStgSerializable>; } }

3. Сохранить информацию на уровне модели подобъекта, тогда он загрузится при загрузке подобъекта, а сохранится при его сохранении.
Код:
protected override void OnHandleEvent(object sender, RaiseMessageEventArgs e) { base.OnHandleEvent(sender, e); var evnt = e as AfterCreateCoreCollectionItemEventArgs; if (evnt != null) { var container = evnt.Item.WrappedObject as IAlignmentContainer; if (container != null) { var alignment = container.Alignment; if (alignment != null) { if (!alignment.Plugins.Contains("<Ключ>")) { alignment.Plugins.Add("<Ключ>", <IStgSerializable>); } } } } }


Кроме того, у Вас есть возможность добавлять Ваши собственные настройки как к настройкам подобъекта, так и к настройкам приложения. Для этого необходимо поддерживать интерфйес IUserSettingsProvider.

Прикладываю Вам во вложении пример модуля. Он добавляет два класса ProjectInfo и RouteInfo и хранит данные соответственно на уровне проекта и подобъекта. Кроме того они добавляют панели для ввода данных - RouteInfo в настройках подобъекта - пункт в дереве "Информация о объекте". ProjectInfo - в меню Сервис-Настройки - пункт в дереве "Информация о проекте".
Вложения
Тип файла: zip ProjectAndAlignmentSettingsExample.zip (97.1 Кбайт, 15 просмотров)
Ответить с цитированием
  #3  
Старый 06-27-2018, 10:01
Gavrishuk_IM Gavrishuk_IM вне форума
Новичок
 
Регистрация: Feb 2012
Адрес: Иркутск
Сообщения: 21
По умолчанию

Спасибо, в целом разобрался.
Пробую сохранить информацию на уровне модели подобъекта, и возник попутный вопрос: как уведомить подобъект, что в мои данные были внесены изменения? Если пользователь ничего кроме моего модуля в подобъекте не трогал, робур думает что изменений не было и при закрытии ничего не сохраняет(
Ответить с цитированием
  #4  
Старый 06-27-2018, 13:54
Василий Гончаров Василий Гончаров вне форума
Разработчик Robur
 
Регистрация: Oct 2016
Сообщения: 27
По умолчанию

Добрый день!

Вы можете либо установить у подобъекта свойство Modified в true. Либо, если Вы хотите чтобы Ваши данные имели возможность работать с Undo и Redo то наследовать поля от TransactableField<T> и поддерживать цепочку наследования через интерфейс IItem. В первом примере, который решает задачу с добавлением таблицы в структуру подобъекта этот вопрос рассматривается. Если вы храните данные на уровне проекта, то интерфейс ICoreProject тоже поддерживает свойство Modified.
Ответить с цитированием
Ответ


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 1:55.

Навигация по основному сайту
Главная Каталог продуктов и услуг Где купить Сопровождение
Вакансии О компании Обзоры Канал на YouTube

vBulletin v3.0.7 , Copyright ©2000-2018, Jelsoft Enterprises Ltd.
Copyright © 2003-2018, НПФ "ТОПОМАТИК".