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

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

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

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

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


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

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

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

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

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

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


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