Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / метод сравнения объектов / 6 сообщений из 6, страница 1 из 1
23.09.2009, 12:36
    #36212326
Ivan.Kokov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метод сравнения объектов
Требуется сравнить два объекта одного класса. Класс заранее неизвестен.
Есть ли какой-нибудь метод сравнения объектов? Или придется использовать ClassDefinition?
...
Рейтинг: 0 / 0
23.09.2009, 13:29
    #36212479
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метод сравнения объектов
Ivan.Kokov , может речь про экземпляры одного класса?

Теоретически можно и так

Код: plaintext
w:<имя_глобала_класса>(id1)=<имя_глобала_класса>(id2) !,"Одинаковые"
...
Рейтинг: 0 / 0
23.09.2009, 13:39
    #36212500
Ivan.Kokov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метод сравнения объектов
krvsa Ivan.Kokov , может речь про экземпляры одного класса?

Теоретически можно и так

Код: plaintext
w:<имя_глобала_класса>(id1)=<имя_глобала_класса>(id2) !,"Одинаковые"


На простых классах, пожалуй, прокатит. А как быть с relationship'ами?
...
Рейтинг: 0 / 0
23.09.2009, 15:47
    #36212896
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метод сравнения объектов
Ivan.KokovА как быть с relationship'ами?

Так там равенство и не предполагается...
Значит как вариан можно:
- читать информацию о свойствах класса
- бать экземпляры
- крутить в цикле по всем "нужным" свойствам
- сравнивать значения из листбилда

Примерно такой алгоритм...
...
Рейтинг: 0 / 0
23.09.2009, 21:33
    #36213648
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метод сравнения объектов
Стандартного метода нет - и в терминах СУБД как то не ясно зачем он нужен.

Так что придется либо ClassDefinition крутить - либо в ввести базовый абстрактный класс с методом-генератором двух своих экземпляров.

Вот только задача сравнения всё равно мутная - вот вы релейшены упомянули....

А что делать если класс содержит ссылку на самого себя - для деревьев там или еще какой иерархии ?
...
Рейтинг: 0 / 0
24.09.2009, 02:40
    #36213895
kolesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
метод сравнения объектов
Ivan.Kokov,

мы как-то так делаем для записи изменений... правда сравнивается объект в памяти с самим собой в базе...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
		s result=##class(%ResultSet).%New("%DynamicQuery:SQL")
		s sc=result.Prepare("SELECT Name FROM %Dictionary.CompiledProperty WHERE parent->Name = '"_..%ClassName(1)_"' AND Storable=1")
		s sc=result.Execute()
		while result.Next(.sc) {
			s OldValue = $zobjmethod(%this,result.Data("Name")_"GetStored",..%Id())
			s NewValue = $zobjproperty(%this,result.Data("Name"))
			s:$ISOBJECT(NewValue) NewValue = NewValue.%Id()
			if OldValue'=NewValue {
				// Для каждого измененного хранимого свойства пишем историю
				s HistoryElement = ##class(admin.HistoryElement).%New()
				s HistoryElement.History = History
				s HistoryElement.PropertyName = result.Data("Name")
				s HistoryElement.OldValue = OldValue
				s HistoryElement.NewValue = NewValue
				d HistoryElement.%Save()
				d HistoryElement.%Close()
				k HistoryElement
			}
		}

...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / метод сравнения объектов / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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