Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
NO CURRENT OBJECT
|
|||
|---|---|---|---|
|
#18+
При создание класса командой CREATE TABLE и добавления в него следующего триггера: Class User.NewClass1 Extends (%Library.Persistent, %Populate) [ ClassType = persistent, SqlRowIdPrivate, StorageStrategy = ] { Property NAME As %Library.String(MAXLEN = 50); Trigger TBI1 [ Event = INSERT, Order = 4 ] { set {NAME} = ##class(%Dictionary.ClassDefinition).%OpenId(..%ClassName(1)).SqlTableName } } При срабатывании триггера ругается NO CURRENT OBJECT Ругается на любой точечный синтаксис вообще. Как это можно исправить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2006, 14:58 |
|
||
|
NO CURRENT OBJECT
|
|||
|---|---|---|---|
|
#18+
Попробуй так: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2006, 16:25 |
|
||
|
NO CURRENT OBJECT
|
|||
|---|---|---|---|
|
#18+
Дело в том что мне нужно именно так, здесь как мне кажется, проблема в описании класса или в STORAGE. Поскольку на классах в SAMPLES этот триггер нормально работает. Я пробовал сравнивать но ничего не нашол. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2006, 17:16 |
|
||
|
NO CURRENT OBJECT
|
|||
|---|---|---|---|
|
#18+
У меня сработало (версия 5.0.20), только нужно у класса прописать SqlTableName тогда {NAME} не будет пустым ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2006, 17:51 |
|
||
|
NO CURRENT OBJECT
|
|||
|---|---|---|---|
|
#18+
NO CURRENT OBJECT если я ничего не путаю появляеться из-за использования ..%ClassName(1) Это метод экземляра , а не метод класса. Мы для этих целей пишем на генераторе дополнительный класс метод. ClassMethod GetClassName() As %Library.String [ CodeMode = generator ] { s %code=0 $$$GENERATE(" q """_%class_"""") q $$$OK } Начиная с 5.0.10 кажеться в триггерах есть возможность обращаться через двуточечный синтаксис к методам класса. и тогда есть возможность писать set {P1}=$zojbclassmethod(..GetClassName(),"GetP1Value",{%%ID}). Далее уже 5.0.5, правда не по документации, в триггере доступно {%%CLASSNAME} - подставляет имя класса - но не как строку!!! и можно писать что то вроде : set {P1}=##class({%%CLASSNAME}).GetP1Value({%%ID}). В более поздних версиях есть так же: {%%CLASSNAMEQ} - тоже самое но в виде строки и даже помоему есть {%%TABLENAME} Так что поищите в документации по слову %%CLASSNAME - там будет и остальные возможности. Искать лучше в версиях > 5.0.15. В той же 5.0.5 нет никаких упоминаний из работает только {%%CLASSNAME} и{%%ID}. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 09:29 |
|
||
|
NO CURRENT OBJECT
|
|||
|---|---|---|---|
|
#18+
В этом случае: set {P1}=$zojbclassmethod(..GetClassName(),"GetP1Value",{%%ID}) тот же NO CURRENT OBJECT а в этом: set {P1}=##class({%%CLASSNAME}).GetP1Value({%%ID}) METOD DO NOT EXIST что за метод GetP1Value? Насчет {%%CLASSNAMEQ} {%%TABLENAME} вызывают ошибку компиляции, а {%%CLASSNAME} во время выполнения UNDIFINED. Возможно нужно менять версию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 14:51 |
|
||
|
NO CURRENT OBJECT
|
|||
|---|---|---|---|
|
#18+
Э-э В этом случае: set {P1}=$zojbclassmethod(..GetClassName(),"GetP1Value",{%%ID}) тот же NO CURRENT OBJECT Это работает только с 5.0.10. а в этом: set {P1}=##class({%%CLASSNAME}).GetP1Value({%%ID}) METOD DO NOT EXIST что за метод GetP1Value? Блин :) это метод для примера от балды - естественно у тебя его нет, но {%%CLASSNAME} работает - уже неплохо Насчет {%%CLASSNAMEQ} вызывают ошибку компиляции, а {%%CLASSNAME} во время выполнения UNDIFINED. В твоем примере ты вроде выясняешь имя таблицы - так вот вполне возможно хватить указания {%%TABLENAME} Возможно нужно менять версию. Явно нужно - свою можеш выяснить выполнив в терминалие >w $ZV ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 20:00 |
|
||
|
NO CURRENT OBJECT
|
|||
|---|---|---|---|
|
#18+
У меня 5.012 и есть 5.015 но не на одной из них не работает {%%TABLENAME} Может быть для нее нужно что то наследовать кроме Persistent? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 09:12 |
|
||
|
NO CURRENT OBJECT
|
|||
|---|---|---|---|
|
#18+
Получилось сделать так: ClassMethod GetClassName() As %Library.String [ CodeMode = generator ] { s %code=0 $$$GENERATE(" q """_%class_"""") q $$$OK } Trigger TAD1 [ Event = DELETE, Order = 1, Time = AFTER ] { set CL = ##class({%%CLASSNAME}).GetClassName() set SQLTN = ##class(%Dictionary.ClassDefinition).%OpenId(CL).SqlTableName if SQLTN '= "" {set TN = SQLTN } else {set TN = CL} Set result = ##class(%Library.ResultSet).%New() set sql = "UPDATE "_TN_" SET CCOUNT = CCOUNT - 1 WHERE ID = "_{PARENT*O} do result.Prepare(sql) do result.Execute() do result.Close() } Спасибо!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 15:40 |
|
||
|
|

start [/forum/topic.php?fid=39&msg=33751656&tid=1559564]: |
0ms |
get settings: |
9ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
25ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 326ms |

| 0 / 0 |
