Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
Я правильно понимаю, что при наследовании в расчетном свойстве имя класса можно узнать только так: Код: plaintext что-то использование %%CLASSNAME не помогает - в нем всегда имя суперкласса... Неужто нет более простого пути? Замысел в том, чтобы в предке определить свойство так: Код: plaintext 1. 2. 3. И еще тогда вопрос. Как "правильнее" обозвать метод - "GetIsAny" или "IsAnyGet"? Какие-то же должны быть соображения в пользу одного или другого варианта (вроде бы второй как бы конфликтует с темой геттера, но компилится без ошибок и работает, на первый взгляд, нормально). Тем более, что Каше не даст в наследнике определить это свойство, как не расчетное (хранимое, например). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2010, 11:09 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
По-прежнему прячете методы в параметр свойства... Но виноват и могу предложить такой способ: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Короче нуждается в доработке К тому же я столкнулся с ошибкой при получении {%%CLASSNAME}. В некоторых случаях, что-то происходит, и SQL так и возвращает "%CLASSNAME". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2010, 14:25 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
doublefint, %%CLASSNAME подставляется в момент компиляции и у всех унаследованных классов будет один вроде как.... если только не переписать метод для потомков, НО 1. select капитан from баржа и 2. select капитан from плавсредство в случае, если "капитан" - расчитывается например, для баржи на основании информации об отпусках - "Вася в отпуске, значит капитан - Петя" а для плавсредства там пустышка лежит ("У плавсредства не всегда есть капитан, например, у баржи есть, а у плотика - нету, потому рассчитывать конкретных капитанов поручено потомкам, среди которых и "баржа") Так вот - 2-й запрос вернет пусто для всех записей - в т.ч. и для барж. Задачка в том, чтобы при расчете свойства капитан в "плавсредстве" вызвать не пустой его метод, а выяснить для начала, что наше плавсредство - конкретно "баржа" и использовать метод расчета оттуда. Понятно, что есть соответствующий паттерн. Но Каше его не выполняет физически - он при работе через объект отработает верно, а при работе через скл "забудет" о наследовании... Всего-то дел, обойти ситуацию... Не увидел отличий в наших предложениях... Да, "всего лишь имя последнего класса"... т.е. класса, к которому реально относится мой экземпляр и метод которого нужно заставить вызвать нерадивого предка, который норовит вызвать свой метод... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2010, 16:07 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
Ну так и обойдите, зачем так упираться в рассчитываемые свойства. В родителе Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. В потомках Код: plaintext 1. 2. 3. 4. 5. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2010, 16:42 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
"всего-лишь имя последнего класса" - это я к тому, что могут быть проблемы с именами пакетов kolesov Не увидел отличий в наших предложениях Хм, определение имени класса не относится к функции класса предметной области и должно быть вынесено в отдельный класс (программу) и т.д. Но это я опять, о своем... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2010, 16:49 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
doublefint, Но ведь с классами-то как раз нет проблем - там все при наследовании схватывается хорошо. Определение имени класса действительно будет не здесь... Оно будет (и уже есть ;) на самом верху наследования - у того класса, от которого я наследую все хранимые классы своей системы... Реальный код выглядит так: Код: plaintext 1. 2. Код: plaintext 1. 2. А излишнее поклонение идолу, с названием "Домэин Моудел", кстати, часто превращает код в совершенно нечитаемый набор "постоянных вызовов неизвестно чего неизвестно откуда" ;) Я склонен с сомнением относиться к фразе про то, что в методе должно быть 5-10 строк... Нужно взвешивать еще и читабельность кода... пусть она даже будет и в ущерб принципам распределения обязанностей в модели предметной области... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2010, 17:10 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
Ну вот... бяка была вот в чем: <METHOD DOES NOT EXIST>%0AmBr7^CacheSql9 *IsConfirmNeededGet Эта ошибка произошла в связи с тем, что у потомка не был переопределен наш метод расчета свойства.... Т.е. если зайти с той стороны, откуда попытался зайти я, снова упираемся в то, что скл слабо разбирается в наследовании... Итого получается, что даже если метод расчета есть в предке, в потомке я его должен все равно написать, чтобы иметь к расчетному свойству нормальный доступ через скл. Или использовать хранимку... но это мне не очень симпатично - громоздко выглядит ее вызов в коде ;( Или идти по старому пути - в родительском методе обсчитывать свойство исходя из того, какого класса объект выбран... это-то точно работает ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2010, 17:23 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
kolesovчто в методе должно быть 5-10 строк не более чем рекомендация. [quote kolesov]обсчитывать свойство исходя из того, какого класса объект выбран... это-то точно работает[quote] но как "идеологически" неправильно :), наследование как раз для этого. Лучше хранимку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2010, 17:31 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
Вообще с расчетными свойствами что-то не так, суть есть оболочка над методами класса (что с точки зрения SQL = хранимая процедура). Имхо, надо использовать только в самых простых случаях Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2010, 17:42 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
kolesovОно будет (и уже есть ;) на самом верху наследования Хм, как-то сомневаюсь я. У меня вообще в программе $$getName^class(bclass,xclass). На крайний случай в класс с утилитами. kolesovА излишнее поклонение идолу, с названием "Домэин Моудел" ... "постоянных вызовов неизвестно чего неизвестно откуда" "Шо занадта, то не здрово". Излишнее поклонение чему угодно, приводит к печальным последствиям. Код: plaintext Проблемы? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2010, 17:51 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
doublefintИ то лишь из за компактности. И тоже, имхо, но зачем Вы их так активно используете? По многим причинам... навскидку: - архитектура системы становится легкой и понятной; - каше позволяет (2 млн. таких свойств расчитывается за 30 сек, а если в выборке есть ограничения, например по интервалу дат, где есть индексы, то расчет - меньше секунды) - ZEN располагает к их использованию (вместо сложностей с colExpression в таблице могу просто указать colName и не заботиться о том, как по таким полям сортировать и фильтровать) - совместно с "->", и наследованием, на мой взгляд, является основным преимуществом перед обычным скл, где я писал и вызывал хранимки (ведь и сейчас можно по-честному джойнить таблицы... Вы это делаете? я - нет...) - если в хранимую процедуру передается только ID - она первый кандидат в вычисляемое свойство, потому что хранимки в каше, имхо, нужны для более сложных вещей (вычислить значение на дату или для конкретного юзера...) - это работает. 2 года. и не было пока ни одного случая, чтобы при падении производительности ее нельзя было вырастить в 100 или 100 000 (и такое бывало ;) раз. - ... МастХэв, в опчем ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2010, 18:03 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
kolesovЯ правильно понимаю, что при наследовании в расчетном свойстве имя класса можно узнать только так: Код: plaintext что-то использование %%CLASSNAME не помогает - в нем всегда имя суперкласса... Неужто нет более простого пути? Свойство {x__classname} не всегда бывает определено, т.е. вышеприведенный код может вернуть пустую строку (с последующей ошибкой "класс не существует" в $zobjclassmethod()). Есть метод %ClassName(), который возвращает имя класса открытого объекта: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2010, 18:08 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
Как вариант: Код: plaintext 1. 2. 3. 4. Если знаете английский, то здесь есть более правильное решение Вашей проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2010, 18:17 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
doublefint Код: plaintext 1. Ну вот опять!? Это НЕ РАБОТАЕТ!!! Вернее работает, но неправильно... зато очень прикольно характеризует движок, я рыдал: Код: plaintext 1. 2. Код: plaintext Результат приводить не буду... но поверьте, он печальный... Вывод - хранимки и каше еще менее совместимы, чем расчетные поля и каше ;( Во всяком случае, при наследовании... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2010, 18:18 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
TurkСвойство {x__classname} не всегда бывает определено Опаньки, а КОГДА оно бывает неопределено? Я думаю, я бы об этом знал... пользователи позвонили бы ;) TurkЕсть метод %ClassName(), который возвращает имя класса открытого объекта: Код: plaintext 1. 2. 3. У меня одна сотрудница, по неопытности, и давно, что-то подобное сделала... Хорошо, вовремя заметили.... На миллионах записей такой код положит сервер... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2010, 18:22 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
kolesovПо многим причинам... навскидку: Итого - Zen, все остальное прекрасно существует без Calculated свойств. Которые как мы помним kolesovТам с этими расчетными свойствами вообще-то песня и неприятностей много (не программу пишешь, а по болоту по кочкам прыгаешь) :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2010, 18:33 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
doublefint, Я и ко всему Каше примерно так отношусь... что с того... Он куплен, и никуда я с подводной лодки не денусь ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2010, 18:38 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
servit дал ссылку на надежное решение (блин, можно было бы и самому дойти) в родительском классе Код: plaintext 1. 2. 3. 4. 5. "Select ID,ParentClass_GCN(ID) From ChildrenClass" - работает' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2010, 19:32 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
kolesov и не было пока ни одного случая, чтобы при падении производительности ее нельзя было вырастить в 100 или 100 000 (и такое бывало ;) раз. Можно я ссылку на это в разделе "Сравнения СУБД" запощу :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2010, 19:38 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
kolesovTurkСвойство {x__classname} не всегда бывает определено Опаньки, а КОГДА оно бывает неопределено? Я думаю, я бы об этом знал... пользователи позвонили бы ;) Цитата : Код: plaintext Для проверки выполните в области SAMPLES: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2010, 19:43 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
doublefintProperty ClassName as %String[InitialExpression={..%ClassName(1)},ReadOnly]; Да, я как раз вчера об этом и думал вечером - как мне это свойство установить у примерно 3 млн. объектов в работающей системе. Нет соображений? С учетом того, что у меня нет уверенности, что часть объектов БД даст себя сохранить (при наступлении определенных условий изменения некоторых объектов запрещены ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2010, 05:07 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
kolesov, Когда-то давно столкнулись с такой проблемой и сразу же завели такое свойство в родителе: Код: plaintext 1. Заапдейтить поле не проблема ручками через SQL, если таблиц немного.. Код: plaintext Только не забудьте снять ReadOnly со свойства перед этим... Вычисляем свойства так: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2010, 06:21 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
kolesovTurkСвойство {x__classname} не всегда бывает определено Опаньки, а КОГДА оно бывает неопределено? Я думаю, я бы об этом знал... пользователи позвонили бы ;) Например, так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. kolesov TurkЕсть метод %ClassName(), который возвращает имя класса открытого объекта: Код: plaintext 1. 2. 3. У меня одна сотрудница, по неопытности, и давно, что-то подобное сделала... Хорошо, вовремя заметили.... На миллионах записей такой код положит сервер... Если не закрывать открытый объект ( kill, не %Close()! ), то да - рано или поздно Cache "встанет". Можно также передать открытый объект в вызываемый метод вместо ID (если конечно ID внутри медота используется для открытия объекта) и лишь после этого закрывать этот объект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2010, 08:58 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
kolesov, Если сложная логика, вернитесь (осторожно!!! - не забываем про пакеты и пустые значения) к использованию служебного свойства x__classname, у меня работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2010, 09:07 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
Подытоживая, могу сказать одно. Попытка действовать вне правила "решение должно быть тупое... если можно сделать решение еще тупее, то немедленно так и делаем", приводит к неприятностям, во всяком случае, с Каше. Хорошо, что там, где мне нужно, x__classname всегда работает (отдельно хранить то, что и так хранится, м.б. и стоит, но я так все-же делать не стану ;) Вызвать при расчете свойства метод реального потомка не получится (так устроена скл-проекция, как я понял). При попытке такого вызова система (по непонятным причинам) не обратит внимания на то, был ли унаследован искомый метод, и, если в наследнике он отдельно не определен, обломит с ошибкой "метод не найден". Заниматься проставлением во всех наследниках заглушек на все методы предков - махровый ононизм, как мне кажется... Итого - проблема неразрешима в рамках текущей модели скл-доступа. И использовать я все же буду самое первоначальное и неубиваемое решение: расчетом свойств всех потомков будет заниматься их предок. Это тупо, дебильно, зато работает.... За то время, что я пытался (в очередной раз) придумать нечто красивое на Каше, мог бы написать гору тупого кода, и сейчас бы пиво пил, а не работал ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2010, 09:20 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2010, 12:24 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
kolesov, Что-то я так и не понял. Итого у Вас есть (надежным или ненадежным способом) правильное (с учетом иерархии наследования) имя класса и ID объекта. Кто мешает Вам делать $zobjclassmethod(classname,"methodname",ID) где угодно? Причем делать это "однажды и только однажды" и избегать многочиcленных if (classname="childclassA") { ... } else if (...) {...}, которые вы будете править каждый раз, когда будет появляться очередной потомок, рискуя занести туда ошибку (с Вашим-то объемом данных и сложной бизнес-логикой). P.S. Если это не получается именно у Вас, не говорите, что это "проблема неразрешима в рамках текущей модели скл-доступа." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2010, 13:03 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
Пока возмущался, вы уже все нашли. Вот бы теперь, такие же объемные и эмоциональные извинения в адрес Каше... :) Рассказали бы как она помогает Вам в работе, позволяет экономить время, зарабатывать на достойную жизнь... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2010, 13:07 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
doublefintПока возмущался, вы уже все нашли. Вот бы теперь, такие же объемные и эмоциональные извинения в адрес Каше... :) Рассказали бы как она помогает Вам в работе, позволяет экономить время, зарабатывать на достойную жизнь... :) Прошу прощения, но делать этого я не буду. Хорошего я все равно ничего не скажу, а высказав свои сомнения о Каше, навлеку на себя праведный гнев его апологетов. Но пару шпилек вставлю, так и быть: 1. Каше - для тех, кто может быть "первым парнем" только "на деревне" (город - оракл, сравните количество постов здесь и в соседнем форуме ;). Я нескольких таких людей знаю лично. Теплое болото для профанов. Не умаляя, конечно, заслуг людей, которых действительно можно назвать классными программистами, профессионалами в лучшем смысле слова и просто энтузиастами Каше. 2. Каше - для скупцов. В 21 веке настолько прятать знания друг от друга могут только "особенные" люди и компании. На том же ВРЦ нет возможности указать, что и проблему, и ее решение могут видеть все желающие. В этом смысле "ВРЦ" - фикция. Нужно было ее обозвать "Ю энд Онли Ю РЦ". Не говоря уже о наличии хоть какого-то живого стека готовых механизмов и решений. Посмотрите на "самплсы" ИС с этой точки зрения - по моему, весьма показательно. 3. Каше по-принципу обременена проблемой оттока кадров. Более того, по двум приведенным выше причинам, селекция кадров приводит, на мой взгляд к тому, что с Каше остаются или энтузиасты (1 из 20) или "специалисты", попадающие под пп.1,2 или "прочие" (взрослые, связанные с Каше десятилетиями; девчонки, которым "в декрет"; ценящие "место работы" выше профессионального роста и т.п.). Остановлюсь, пожалуй... на хорошую взбучку со стороны сообщества я уже и так наговорил ;) Еще раз повторюсь - если бы мне завтра пришли и сказали, что дадут деньги на все, что я захочу "по работе", второе, что я бы сделал - выбрал бы не Каше в качестве платформы разработки. Про первое - не спрашивайте (все равно не скажу ;). Это сугубо личное, субъективное мнение. Заранее приношу извинения всем людям и компаниям, которые сочтут мои слова оскорбительными. Исключения, в конце концов, подтверждают правила. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2010, 05:59 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
Однако, злой Вы kolesov, злой. Как надо, так и "в 100 000" раз быстрее, как настроение испортилось, так "неразрешима в рамках текущей модели". Огромное количество постов в соседнем топике ведь может означать и огромное количество проблем, не так ли? Ваши же посты не про успехи? Скучаете по бизнес-логике на TSQL с "прозрачными" джойнами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2010, 11:18 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
doublefintОднако, злой Вы kolesov, злой. Как надо, так и "в 100 000" раз быстрее, как настроение испортилось, так "неразрешима в рамках текущей модели". Огромное количество постов в соседнем топике ведь может означать и огромное количество проблем, не так ли? Ваши же посты не про успехи? Скучаете по бизнес-логике на TSQL с "прозрачными" джойнами? Связавшись 2 года назад с Каше серьезно (раньше работал с ним за з/п и бил шару... как понимаете, совсем не на Каше), могу отметить одно - сильно скучаю по той ситуации, когда за полчаса в сети можно было найти десяток готовых, обкатанных решений своей проблемы, которые обходят все неприятности платформы и используется тысячами людей. С Каше каждый из нас дует в свою дуду... И менеджеры ИС этого то-ли не понимают, то-ли культивируют. Ведь платформа, окажись она чуть более открыта, на самом-то деле довольно интересна. И, как это ни странно, даже в режиме волков-одиночек, дает людям и компаниям довольно эффективные инструменты. Но... куда деваться... будем работать ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2010, 12:17 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
kolesov, Вот все из Вас выпытывать надо. Итого: "интересная", "и даже в 100 000 раз быстрее", и, " как это ни странно , даже в режиме волков-одиночек, дает людям и компаниям довольно эффективные инструменты". Сразу так написать нельзя было? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2010, 12:36 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
Продолжу темку... Собрался так же поэксперементировать с расчётными свойствами... Создал абстрактный класс /// fio Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. А данные хранятся в хранимом классе + наследование от этого. При компиляции получаю автор 5524 Invalid {Field} reference in %2: '%1' И не совсем понимаю что именно я неправильно указал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2012, 08:48 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
Нет поля ID в просто классе. Есть несколько вариантов решения: 1) сделать класс наследником от %RegisteredObject; 2) вместо {ID} использовать {%%ID} ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2012, 14:29 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
servitНет поля ID в просто классе. Вона чего... Это потому что он абстрактный? Т.е. ход мысли у меня правильный был для хранимого класса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2012, 15:02 |
|
||
|
Имя класса в расчетном свойстве при наследовании
|
|||
|---|---|---|---|
|
#18+
krvsaВона чего... Это потому что он абстрактный?Это потому что он сам по себе, то есть ни от кого не наследуется. В терминах Caché - незарегистрированный . Когда Вы создаёте в .NET/Java пустой класс, Вы же не надеетесь там найти уже готовое свойство ID, или Surname, или Age. Здесь аналогично. krvsaТ.е. ход мысли у меня правильный был для хранимого класса?Не знаю. Посмотрите сгенерированный INT-код в классах наследниках от Вашего абстрактного класса: то ли это, что Вы хотите получить. PS: если у Вас значение вычисляемого поля одинаковое для объектного/реляционного доступа, то достаточно кода в SQLCOMPUTECODE : Methods Supporting SQLCOMPUTECODE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2012, 16:42 |
|
||
|
|

start [/forum/topic.php?all=1&fid=39&tid=1557552]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
51ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 353ms |

| 0 / 0 |
