powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Насколько разумно создать LogicalToDisplay() для объектов?
4 сообщений из 4, страница 1 из 1
Насколько разумно создать LogicalToDisplay() для объектов?
    #38549602
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Часто в системе нужно получить объект в виде строки, и не задумываться при этом о том, из чего эта строка собирается.

Раньше использовал метод, скажем Logical2Display() и соответствующее sqlCompute свойство DisplayValue.
Метод был определен в предке всех хранимых классов. И возвращал ID если не переопределен. В противном случае возвращал то, что интересует обывателя - ФИО, Название, Номера и т.п.

Но тут встал вопрос о том, чтобы получить значение свойства объекта, заранее не зная скаляр это или другой объект.

Для любого скалярного свойства "propName" типа "propType" прекрасно работает

$classmethod(propertyType,"LogicalToDisplay",value)

(value - значение свойства для конкретного экземпляра)

Но если propertyType это "my.dear.CacheClass", то Каше выдаст ошибку.

ВОПРОС:

Насколько корректно в хранимом суперклассе создать метод LogicalToDisplay()?
(я так и сделал, честно говоря, но теперь боюсь, что могут быть неприятности).

ЗЫ. Пример удобства - перебор значений свойств объекта, когда вместо ID объектных свойств я получу конкретные ФИО, Адреса, Названия и т.п.:
  s sql = "SELECT Name,Type FROM %Dictionary.CompiledProperty WHERE parent->Name = ?"
  s rs = ##class(%ResultSet.SQL).%Prepare(.sql,.err,"",anyObj.%ClassName(1))
  if '$ISOBJECT(err) {
    while rs.%Next() {
      w $classmethod(rs.%Get("Type"),"LogicalToDisplay",$property(anyObj,rs.%Get("Name")))
    }
  }
...
Рейтинг: 0 / 0
Насколько разумно создать LogicalToDisplay() для объектов?
    #38549767
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего ничего страшного произойти не должно, и думаю можно смело использовать такой метод.
...
Рейтинг: 0 / 0
Насколько разумно создать LogicalToDisplay() для объектов?
    #38556552
logist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле напрямую использовать

$classmethod(propertyType,"LogicalToDisplay",value)

для скалярных свойств не совсем корректно, т.к. большинство этих методов - генераторы, зависящие от параметров свойства. Правильнее

$classmethod(className,propertyName_"LogicalToDisplay",value)

Но с методом LogicalToDisplay у хранимых классов никаких проблем не должно быть.

Я бы сделал какой нибудь метод GetDisplay(obj,propertyName) и в нем бы уже разруливал в зависимости от типа свойства что вызывать
...
Рейтинг: 0 / 0
Насколько разумно создать LogicalToDisplay() для объектов?
    #38559459
rstr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kolesov, я бы рекомендовал использовать вычисляемые поля. Тогда SQL будет красивее и меньше кода.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Насколько разумно создать LogicalToDisplay() для объектов?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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