powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Имя класса в расчетном свойстве при наследовании
37 сообщений из 37, показаны все 2 страниц
Имя класса в расчетном свойстве при наследовании
    #36476930
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я правильно понимаю, что при наследовании в расчетном свойстве имя класса можно узнать только так:
Код: plaintext
s className=$p({x__classname},"~",$l({x__classname},"~")- 1 )
?
что-то использование %%CLASSNAME не помогает - в нем всегда имя суперкласса...

Неужто нет более простого пути?

Замысел в том, чтобы в предке определить свойство так:
Код: plaintext
1.
2.
3.
Property IsAny As %Boolean [ Calculated, SqlComputeCode = {
		s className=$p({x__classname},"~",$l({x__classname},"~")- 1 )
		s {IsAny}=$zobjclassmethod(className,"GetIsAny",{ID})
	}, SqlComputed ];
И расчет свойства описать и в предке, и в потомках. Тогда SQL и объектный доступы должны давать идентичный результат.

И еще тогда вопрос. Как "правильнее" обозвать метод - "GetIsAny" или "IsAnyGet"? Какие-то же должны быть соображения в пользу одного или другого варианта (вроде бы второй как бы конфликтует с темой геттера, но компилится без ошибок и работает, на первый взгляд, нормально).
Тем более, что Каше не даст в наследнике определить это свойство, как не расчетное (хранимое, например).
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36477682
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-прежнему прячете методы в параметр свойства...
Но виноват и могу предложить такой способ:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
///<var>bclass</var> - {%%CLASSNAME}, базовый класс
///<var>xclass</var> - {x__classname}, классы расширения
ClassMethod GetClassName(bclass as %String="", xclass as %String="") as %String [SqlProc]{
 Q:xclass="" bclass
 s dm="~", len=$l(xclass,dm) 
 Q $P(xclass,dm,len- 1 ) ; !!! всего-лишь имя последнего класса
}
На самом деле не все так просто. Такая реализация метода не универсальна и будет неправильно работать при наследовании из разных пакетов, использования имени пакета по умолчанию и т.д.
Короче нуждается в доработке
К тому же я столкнулся с ошибкой при получении {%%CLASSNAME}. В некоторых случаях, что-то происходит, и SQL так и возвращает "%CLASSNAME".
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36478032
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefint,

%%CLASSNAME подставляется в момент компиляции и у всех унаследованных классов будет один вроде как.... если только не переписать метод для потомков, НО

1. select капитан from баржа
и
2. select капитан from плавсредство

в случае, если "капитан" - расчитывается

например, для баржи на основании информации об отпусках - "Вася в отпуске, значит капитан - Петя"

а для плавсредства там пустышка лежит ("У плавсредства не всегда есть капитан, например, у баржи есть, а у плотика - нету, потому рассчитывать конкретных капитанов поручено потомкам, среди которых и "баржа")

Так вот - 2-й запрос вернет пусто для всех записей - в т.ч. и для барж.
Задачка в том, чтобы при расчете свойства капитан в "плавсредстве" вызвать не пустой его метод, а выяснить для начала, что наше плавсредство - конкретно "баржа" и использовать метод расчета оттуда.

Понятно, что есть соответствующий паттерн. Но Каше его не выполняет физически - он при работе через объект отработает верно, а при работе через скл "забудет" о наследовании... Всего-то дел, обойти ситуацию...

Не увидел отличий в наших предложениях... Да, "всего лишь имя последнего класса"... т.е. класса, к которому реально относится мой экземпляр и метод которого нужно заставить вызвать нерадивого предка, который норовит вызвать свой метод...
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36478140
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так и обойдите, зачем так упираться в рассчитываемые свойства.
В родителе
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 ///для переопределения в наследниках
 ClassMethod GetCaptainName(ID as %String) as %String [Private] {
   q "" ;заглушка
 }
 ///Общий интерфейс для всех наследников 
 СlassMethod GCN(ID as %String) as %String[SqlProc] {
  q ..GetCaptainName(ID)
 } 

В потомках
Код: plaintext
1.
2.
3.
4.
5.
 ///Переопределяем если надо
 ClassMethod GetCapitainName(ID as %String) as %String [Private] {
  ;например  
  q ..captainNameGetStorage(id) ; или что-нить еще
 }
В коде
Код: plaintext
1.
 s sql="Select ID,ParentClass_GCN(ID) From ChildrenClass"
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36478160
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"всего-лишь имя последнего класса" - это я к тому, что могут быть проблемы с именами пакетов
kolesov Не увидел отличий в наших предложениях
Хм, определение имени класса не относится к функции класса предметной области и должно быть вынесено в отдельный класс (программу) и т.д. Но это я опять, о своем... :)
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36478223
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefint,

Но ведь с классами-то как раз нет проблем - там все при наследовании схватывается хорошо.
Определение имени класса действительно будет не здесь... Оно будет (и уже есть ;) на самом верху наследования - у того класса, от которого я наследую все хранимые классы своей системы...
Реальный код выглядит так:

Код: plaintext
1.
2.
Property IsConfirmNeeded As %Boolean [ Calculated, SqlComputeCode = {
		s {IsConfirmNeeded}=$zobjclassmethod({SqlClassName},"IsConfirmNeededGet",{ID})
	}, SqlComputed ];
Где SqlClassName теперь расчитывается для всех классов... И тут он мало чем отличается от
Код: plaintext
1.
2.
Property IsConfirmNeeded As %Boolean [ Calculated, SqlComputeCode = {
		s {IsConfirmNeeded}=##class({%%CLASSNAME}).IsConfirmNeededGet({ID})
	}, SqlComputed ];
Вопрос-то в другом - почему-то нет дефолтового способа вытащить имя класса конкретного экземпляра в контексте именно скл... М.б. это неспроста? Бывает, что нечто не придумано до тебя потому, что это нечто и не стоит придумывать ;)

А излишнее поклонение идолу, с названием "Домэин Моудел", кстати, часто превращает код в совершенно нечитаемый набор "постоянных вызовов неизвестно чего неизвестно откуда" ;) Я склонен с сомнением относиться к фразе про то, что в методе должно быть 5-10 строк... Нужно взвешивать еще и читабельность кода... пусть она даже будет и в ущерб принципам распределения обязанностей в модели предметной области...
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36478269
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот... бяка была вот в чем:

<METHOD DOES NOT EXIST>%0AmBr7^CacheSql9 *IsConfirmNeededGet

Эта ошибка произошла в связи с тем, что у потомка не был переопределен наш метод расчета свойства....

Т.е. если зайти с той стороны, откуда попытался зайти я, снова упираемся в то, что скл слабо разбирается в наследовании...

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

Или использовать хранимку... но это мне не очень симпатично - громоздко выглядит ее вызов в коде ;(

Или идти по старому пути - в родительском методе обсчитывать свойство исходя из того, какого класса объект выбран... это-то точно работает ;)
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36478299
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovчто в методе должно быть 5-10 строк не более чем рекомендация.
[quote kolesov]обсчитывать свойство исходя из того, какого класса объект выбран... это-то точно работает[quote] но как "идеологически" неправильно :), наследование как раз для этого. Лучше хранимку
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36478326
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще с расчетными свойствами что-то не так, суть есть оболочка над методами класса (что с точки зрения SQL = хранимая процедура). Имхо, надо использовать только в самых простых случаях
Код: plaintext
 s {A}={B}+{C} 
И то лишь из за компактности. И тоже, имхо, но зачем Вы их так активно используете?
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36478367
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovОно будет (и уже есть ;) на самом верху наследования
Хм, как-то сомневаюсь я. У меня вообще в программе $$getName^class(bclass,xclass). На крайний случай в класс с утилитами.
kolesovА излишнее поклонение идолу, с названием "Домэин Моудел" ... "постоянных вызовов неизвестно чего неизвестно откуда"
"Шо занадта, то не здрово". Излишнее поклонение чему угодно, приводит к печальным последствиям.
Код: plaintext
 s cn=##class(ClassUtilites).GetClassName(bclass,xclass)

Проблемы? :)
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36478403
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintИ то лишь из за компактности. И тоже, имхо, но зачем Вы их так активно используете?

По многим причинам... навскидку:
- архитектура системы становится легкой и понятной;
- каше позволяет (2 млн. таких свойств расчитывается за 30 сек, а если в выборке есть ограничения, например по интервалу дат, где есть индексы, то расчет - меньше секунды)
- ZEN располагает к их использованию (вместо сложностей с colExpression в таблице могу просто указать colName и не заботиться о том, как по таким полям сортировать и фильтровать)
- совместно с "->", и наследованием, на мой взгляд, является основным преимуществом перед обычным скл, где я писал и вызывал хранимки (ведь и сейчас можно по-честному джойнить таблицы... Вы это делаете? я - нет...)
- если в хранимую процедуру передается только ID - она первый кандидат в вычисляемое свойство, потому что хранимки в каше, имхо, нужны для более сложных вещей (вычислить значение на дату или для конкретного юзера...)
- это работает. 2 года. и не было пока ни одного случая, чтобы при падении производительности ее нельзя было вырастить в 100 или 100 000 (и такое бывало ;) раз.
- ...
МастХэв, в опчем ;)
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36478422
Turk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kolesovЯ правильно понимаю, что при наследовании в расчетном свойстве имя класса можно узнать только так:
Код: plaintext
s className=$p({x__classname},"~",$l({x__classname},"~")- 1 )
?
что-то использование %%CLASSNAME не помогает - в нем всегда имя суперкласса...

Неужто нет более простого пути?

Свойство {x__classname} не всегда бывает определено, т.е. вышеприведенный код может вернуть пустую строку (с последующей ошибкой "класс не существует" в $zobjclassmethod()).
Есть метод %ClassName(), который возвращает имя класса открытого объекта:
Код: plaintext
1.
2.
3.
set obj=##class({%%CLASSNAME}).%OpenId({%%ID})
set className=obj.%ClassName( 1 )
kill obj
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36478444
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант:
Код: plaintext
1.
2.
3.
4.
Property IsAny As %Boolean [ Calculated, SqlComputeCode = {
		s className=##class({%%CLASSNAME}).%OpenId({ID}).%ClassName( 1 )
		s {*}=$zobjclassmethod(className,"GetIsAny",{ID})
	}, SqlComputed ];
Но я его Вам не рекомендую.

Если знаете английский, то здесь есть более правильное решение Вашей проблемы.
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36478446
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefint
Код: plaintext
1.
 s sql="Select ID,ParentClass_GCN(ID) From ChildrenClass"


Ну вот опять!?

Это НЕ РАБОТАЕТ!!! Вернее работает, но неправильно... зато очень прикольно характеризует движок, я рыдал:

Код: plaintext
1.
2.
select superClass_IsConfirmNeededProc(ID) from superClass
select subClass01_IsConfirmNeededProc(ID) from subClass01
select superClass_IsConfirmNeededProc(ID) from subClass01
и апофеоз:
Код: plaintext
select subClass01_IsConfirmNeededProc(ID) from subClass02

Результат приводить не буду... но поверьте, он печальный...
Вывод - хранимки и каше еще менее совместимы, чем расчетные поля и каше ;(
Во всяком случае, при наследовании...
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36478457
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TurkСвойство {x__classname} не всегда бывает определено
Опаньки, а КОГДА оно бывает неопределено? Я думаю, я бы об этом знал... пользователи позвонили бы ;)
TurkЕсть метод %ClassName(), который возвращает имя класса открытого объекта:
Код: plaintext
1.
2.
3.
set obj=##class({%%CLASSNAME}).%OpenId({%%ID})
set className=obj.%ClassName( 1 )
kill obj

У меня одна сотрудница, по неопытности, и давно, что-то подобное сделала... Хорошо, вовремя заметили.... На миллионах записей такой код положит сервер...
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36478481
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovПо многим причинам... навскидку: Итого - Zen, все остальное прекрасно существует без Calculated свойств. Которые как мы помним kolesovТам с этими расчетными свойствами вообще-то песня и неприятностей много (не программу пишешь, а по болоту по кочкам прыгаешь) :)
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36478492
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefint,

Я и ко всему Каше примерно так отношусь... что с того... Он куплен, и никуда я с подводной лодки не денусь ;)
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36478602
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit дал ссылку на надежное решение (блин, можно было бы и самому дойти)
в родительском классе
Код: plaintext
1.
2.
3.
4.
5.
  Property ClassName as %String[InitialExpression={..%ClassName( 1 )},ReadOnly];
  ClassMethod GCN(ID) as %String[SqlProc]{
    q:'..%ExistsId(ID) "Unknown"
    q ..ClassNameGetStored(ID)
  }
 

"Select ID,ParentClass_GCN(ID) From ChildrenClass" - работает'
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36478610
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesov
и не было пока ни одного случая, чтобы при падении производительности ее нельзя было вырастить в 100 или 100 000 (и такое бывало ;) раз.

Можно я ссылку на это в разделе "Сравнения СУБД" запощу :)
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36478625
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovTurkСвойство {x__classname} не всегда бывает определено
Опаньки, а КОГДА оно бывает неопределено? Я думаю, я бы об этом знал... пользователи позвонили бы ;)
Цитата :
Код: plaintext
For the root class of an extent, this value is always empty.

Для проверки выполните в области SAMPLES:
Код: plaintext
select x__classname from Cinema.Film
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36479026
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintProperty ClassName as %String[InitialExpression={..%ClassName(1)},ReadOnly];

Да, я как раз вчера об этом и думал вечером - как мне это свойство установить у примерно 3 млн. объектов в работающей системе. Нет соображений?

С учетом того, что у меня нет уверенности, что часть объектов БД даст себя сохранить (при наступлении определенных условий изменения некоторых объектов запрещены ;)
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36479038
Socratdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kolesov,

Когда-то давно столкнулись с такой проблемой и сразу же завели такое свойство в родителе:
Код: plaintext
1.
Property class As %String(MAXLEN =  2000 ) [ Final, InitialExpression = {$S($G(%this):$zobjclass(%this), 1 :"")}, ReadOnly ];

Заапдейтить поле не проблема ручками через SQL, если таблиц немного..
Код: plaintext
&sql(UPDATE Sample.Person SET class = 'Sample.Person')

Только не забудьте снять ReadOnly со свойства перед этим...

Вычисляем свойства так:
Код: plaintext
1.
Property name As %String [ Calculated, SqlComputeCode = {s {*}=$zobjclassmethod({class},"getName",{%%ID})}, SqlComputed ];
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36479143
Turk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kolesovTurkСвойство {x__classname} не всегда бывает определено
Опаньки, а КОГДА оно бывает неопределено? Я думаю, я бы об этом знал... пользователи позвонили бы ;)
Например, так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    <Data name="TestClassDefaultCN">
        <Attribute>%%CLASSNAME</Attribute>
        <Structure>node</Structure>
        <Subscript> 0 </Subscript>
    </Data>
    <Data name="TestClassDefaultData">
        <Value name="1">
            <Value>поле1</Value>
        </Value>
        ...
        <Value name="N">
            <Value>полеN</Value>
        </Value>
    </Data>
    <DefaultData>TestClassDefaultData</DefaultData>

kolesov
TurkЕсть метод %ClassName(), который возвращает имя класса открытого объекта:
Код: plaintext
1.
2.
3.
set obj=##class({%%CLASSNAME}).%OpenId({%%ID})
set className=obj.%ClassName( 1 )
kill obj

У меня одна сотрудница, по неопытности, и давно, что-то подобное сделала... Хорошо, вовремя заметили.... На миллионах записей такой код положит сервер...
Если не закрывать открытый объект ( kill, не %Close()! ), то да - рано или поздно Cache "встанет".
Можно также передать открытый объект в вызываемый метод вместо ID (если конечно ID внутри медота используется для открытия объекта) и лишь после этого закрывать этот объект.
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36479158
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesov,
Если сложная логика, вернитесь (осторожно!!! - не забываем про пакеты и пустые значения) к использованию служебного свойства x__classname, у меня работает
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36481834
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подытоживая, могу сказать одно. Попытка действовать вне правила "решение должно быть тупое... если можно сделать решение еще тупее, то немедленно так и делаем", приводит к неприятностям, во всяком случае, с Каше.

Хорошо, что там, где мне нужно, x__classname всегда работает (отдельно хранить то, что и так хранится, м.б. и стоит, но я так все-же делать не стану ;)

Вызвать при расчете свойства метод реального потомка не получится (так устроена скл-проекция, как я понял). При попытке такого вызова система (по непонятным причинам) не обратит внимания на то, был ли унаследован искомый метод, и, если в наследнике он отдельно не определен, обломит с ошибкой "метод не найден".

Заниматься проставлением во всех наследниках заглушек на все методы предков - махровый ононизм, как мне кажется...

Итого - проблема неразрешима в рамках текущей модели скл-доступа. И использовать я все же буду самое первоначальное и неубиваемое решение: расчетом свойств всех потомков будет заниматься их предок. Это тупо, дебильно, зато работает.... За то время, что я пытался (в очередной раз) придумать нечто красивое на Каше, мог бы написать гору тупого кода, и сейчас бы пиво пил, а не работал ;)
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36481919
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovНу вот... бяка была вот в чем:

<METHOD DOES NOT EXIST>%0AmBr7^CacheSql9 *IsConfirmNeededGet

Эта ошибка произошла в связи с тем, что у потомка не был переопределен наш метод расчета свойства....

Бяка была в моих кривых ручках - там наследников много... один из них не был скомпилирован... метода, соответственно, не было....

Саппорту спасибо еще раз - пока готовил пример для них, сам нашел ошибку...

Вот так вроде должно работать:

Код: plaintext
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.
Class test.c0 Extends %Persistent
{

Property Computed As %String [ Calculated, SqlComputeCode = {
		s classname = $s({x__classname}'="":$p({x__classname},"~",$l({x__classname},"~")- 1 ), 1 :{%%CLASSNAMEQ})
		s {Computed}=$zobjclassmethod(classname,"ComputedGet",{ID},classname)
	}, SqlComputed ];

ClassMethod ComputedGet(objId,classname As %String) As %String
{
	q "c0: "_classname 
}

Property p As %String;

}


Class test.c1 Extends test.c0
{

Property p2 As %String;

}


Class test.c2 Extends test.c1
{

ClassMethod ComputedGet(objId,classname As %String) As %String
{
	q "c2: "_classname 
}

}
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36481955
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesov,
Что-то я так и не понял. Итого у Вас есть (надежным или ненадежным способом) правильное (с учетом иерархии наследования) имя класса и ID объекта. Кто мешает Вам делать $zobjclassmethod(classname,"methodname",ID) где угодно?

Причем делать это "однажды и только однажды" и избегать многочиcленных if (classname="childclassA") { ... } else if (...) {...}, которые вы будете править каждый раз, когда будет появляться очередной потомок, рискуя занести туда ошибку (с Вашим-то объемом данных и сложной бизнес-логикой).

P.S. Если это не получается именно у Вас, не говорите, что это "проблема неразрешима в рамках текущей модели скл-доступа."
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36481959
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока возмущался, вы уже все нашли. Вот бы теперь, такие же объемные и эмоциональные извинения в адрес Каше... :) Рассказали бы как она помогает Вам в работе, позволяет экономить время, зарабатывать на достойную жизнь... :)
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36482529
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintПока возмущался, вы уже все нашли. Вот бы теперь, такие же объемные и эмоциональные извинения в адрес Каше... :) Рассказали бы как она помогает Вам в работе, позволяет экономить время, зарабатывать на достойную жизнь... :)

Прошу прощения, но делать этого я не буду. Хорошего я все равно ничего не скажу, а высказав свои сомнения о Каше, навлеку на себя праведный гнев его апологетов.

Но пару шпилек вставлю, так и быть:

1. Каше - для тех, кто может быть "первым парнем" только "на деревне" (город - оракл, сравните количество постов здесь и в соседнем форуме ;). Я нескольких таких людей знаю лично. Теплое болото для профанов. Не умаляя, конечно, заслуг людей, которых действительно можно назвать классными программистами, профессионалами в лучшем смысле слова и просто энтузиастами Каше.

2. Каше - для скупцов. В 21 веке настолько прятать знания друг от друга могут только "особенные" люди и компании. На том же ВРЦ нет возможности указать, что и проблему, и ее решение могут видеть все желающие. В этом смысле "ВРЦ" - фикция. Нужно было ее обозвать "Ю энд Онли Ю РЦ". Не говоря уже о наличии хоть какого-то живого стека готовых механизмов и решений. Посмотрите на "самплсы" ИС с этой точки зрения - по моему, весьма показательно.

3. Каше по-принципу обременена проблемой оттока кадров. Более того, по двум приведенным выше причинам, селекция кадров приводит, на мой взгляд к тому, что с Каше остаются или энтузиасты (1 из 20) или "специалисты", попадающие под пп.1,2 или "прочие" (взрослые, связанные с Каше десятилетиями; девчонки, которым "в декрет"; ценящие "место работы" выше профессионального роста и т.п.).

Остановлюсь, пожалуй... на хорошую взбучку со стороны сообщества я уже и так наговорил ;)

Еще раз повторюсь - если бы мне завтра пришли и сказали, что дадут деньги на все, что я захочу "по работе", второе, что я бы сделал - выбрал бы не Каше в качестве платформы разработки. Про первое - не спрашивайте (все равно не скажу ;).

Это сугубо личное, субъективное мнение. Заранее приношу извинения всем людям и компаниям, которые сочтут мои слова оскорбительными. Исключения, в конце концов, подтверждают правила.
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36482675
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Однако, злой Вы kolesov, злой. Как надо, так и "в 100 000" раз быстрее, как настроение испортилось, так "неразрешима в рамках текущей модели". Огромное количество постов в соседнем топике ведь может означать и огромное количество проблем, не так ли? Ваши же посты не про успехи?
Скучаете по бизнес-логике на TSQL с "прозрачными" джойнами?
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36482766
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintОднако, злой Вы kolesov, злой. Как надо, так и "в 100 000" раз быстрее, как настроение испортилось, так "неразрешима в рамках текущей модели". Огромное количество постов в соседнем топике ведь может означать и огромное количество проблем, не так ли? Ваши же посты не про успехи?
Скучаете по бизнес-логике на TSQL с "прозрачными" джойнами?

Связавшись 2 года назад с Каше серьезно (раньше работал с ним за з/п и бил шару... как понимаете, совсем не на Каше), могу отметить одно - сильно скучаю по той ситуации, когда за полчаса в сети можно было найти десяток готовых, обкатанных решений своей проблемы, которые обходят все неприятности платформы и используется тысячами людей.

С Каше каждый из нас дует в свою дуду... И менеджеры ИС этого то-ли не понимают, то-ли культивируют. Ведь платформа, окажись она чуть более открыта, на самом-то деле довольно интересна. И, как это ни странно, даже в режиме волков-одиночек, дает людям и компаниям довольно эффективные инструменты.

Но... куда деваться... будем работать ;)
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #36482801
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesov,
Вот все из Вас выпытывать надо. Итого: "интересная", "и даже в 100 000 раз быстрее", и, " как это ни странно , даже в режиме волков-одиночек, дает людям и компаниям довольно эффективные инструменты". Сразу так написать нельзя было? :)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Имя класса в расчетном свойстве при наследовании
    #37637656
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Продолжу темку...

Собрался так же поэксперементировать с расчётными свойствами... Создал абстрактный класс

/// fio
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Class soi.sys.cls.soiszn.fio [ Abstract ]
{

/// fam
Property fam As %String [ 
	Calculated, 
	SqlComputeCode = {
		s {fam}=##class({%%CLASSNAME}).%OpenId({ID}).famGet()
	}, 
	SqlComputed
];

/// famGet
Method famGet() As %String
{
	q $$Fld^ASYS("FAM",,..urn,"KU")
}

}



А данные хранятся в хранимом классе + наследование от этого.
При компиляции получаю
автор 5524 Invalid {Field} reference in %2: '%1'
И не совсем понимаю что именно я неправильно указал?
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #37638238
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет поля ID в просто классе.

Есть несколько вариантов решения:
1) сделать класс наследником от %RegisteredObject;
2) вместо {ID} использовать {%%ID}
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #37638295
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitНет поля ID в просто классе.
Вона чего... Это потому что он абстрактный?
Т.е. ход мысли у меня правильный был для хранимого класса?
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #37638562
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaВона чего... Это потому что он абстрактный?Это потому что он сам по себе, то есть ни от кого не наследуется. В терминах Caché - незарегистрированный .
Когда Вы создаёте в .NET/Java пустой класс, Вы же не надеетесь там найти уже готовое свойство ID, или Surname, или Age. Здесь аналогично.
krvsaТ.е. ход мысли у меня правильный был для хранимого класса?Не знаю.
Посмотрите сгенерированный INT-код в классах наследниках от Вашего абстрактного класса: то ли это, что Вы хотите получить.

PS: если у Вас значение вычисляемого поля одинаковое для объектного/реляционного доступа, то достаточно кода в SQLCOMPUTECODE :
Methods Supporting SQLCOMPUTECODE
...
Рейтинг: 0 / 0
Имя класса в расчетном свойстве при наследовании
    #37638955
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitесли у Вас значение вычисляемого поля одинаковое для объектного/реляционного доступа, то достаточно кода в SQLCOMPUTECODE
Ясно, оно одинаковое.
...
Рейтинг: 0 / 0
37 сообщений из 37, показаны все 2 страниц
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Имя класса в расчетном свойстве при наследовании
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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