Гость
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Вывод текста ошибки / 9 сообщений из 9, страница 1 из 1
11.12.2012, 07:54
    #38073506
EvLaUy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод текста ошибки
Уважаемые коллеги
Уже много лет использую следующий паттерн кода при сохранении объекта:
s sc=obj.%Save()
if sc'=1 w $System.OBJ.DisplayError(sc)

Ну вместо write могу еще что-нибудь с этим текстом делать, но суть не в этом. В Cache2012 это неожиданно перестало работать. Вызов w $System.OBJ.DisplayError(sc) почему-то вместо диагностики ошибки возвращает 1, если объект не сохраняется. Кто-нибудь может что-то посоветовать? Я делал полнотекстовый поиск по форуму, увидел, что servit пишет
$system.OBJ.DisplayError(sc) (с маленькой буквы), правда сам еще не пробовал. В этом всё дело?
...
Рейтинг: 0 / 0
11.12.2012, 09:58
    #38073606
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод текста ошибки
Код: plaintext
w $system.OBJ.DisplayError(sc)
$system регистронезависимый, так что можно написать и $SYSTEM
а такой вывод и правильно должен выводить 1, так как согласно документации
авторDecode and display an object error message to the console. If err is omitted, display the last generated object error.
означает, что данная команда декодирует переданную ошибку, и выводит в стандартный поток в консоль, если ошибку не передали то он возбмет последнюю объектную ошибку т.е. из переменной %objlasterror
а вот 1 это статус выполнения этой команды
соответвенно нужно либо выполнять так
Код: plaintext
do $system.OBJ.DisplayError(sc)
либо если нужен текст ошибки, получать его так
Код: plaintext
s err=$system.Status.GetErrorText(sc)
либо любым понравившимся методом из класса %SYSTEM.Status
...
Рейтинг: 0 / 0
11.12.2012, 10:04
    #38073622
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод текста ошибки
EvLaUyЯ делал полнотекстовый поиск по форуму, увидел, что servit пишет $system.OBJ.DisplayError(sc) (с маленькой буквы), правда сам еще не пробовал. В этом всё дело?Нет, дело не в маленькой букве.

Можно ссылку, где я пишу w $System.OBJ.DisplayError(sc), а не d $System.OBJ.DisplayError(sc)?

В Вашем случае достаточно do $System.OBJ.DisplayError(obj.%Save()).

PS: для проверки статуса всё же лучше использовать вполне документированные макросы ISERR(sc)/ISOK(sc) .
...
Рейтинг: 0 / 0
11.12.2012, 10:28
    #38073671
EvLaUy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод текста ошибки
Нет, нет, servit, что Вы, Вы везде вызываете этот метод через do. Я просто до сих пор не знал, что для этого метода разница стала принципиальна. Я пользовался им для вывода текста ошибки года эдак с 2003, и всё работало как часы. А вчера часов около 2 ночи обнаружил вот такую неприятность (видимо, до этого в Cache2012 у меня все объекты сохранялись без ошибок). Ну расстроился, конечно, а покопаться в Class Reference уже не было сил. Спасибо за помощь обоим откликнувшимся участникам. Значится, для вывода текста ошибки этот метод уже бесполезен.
...
Рейтинг: 0 / 0
11.12.2012, 10:32
    #38073677
EvLaUy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод текста ошибки
Виноват, не для вывода, а для сохранения в переменной. А то попаду под огонь критики.
...
Рейтинг: 0 / 0
11.12.2012, 10:45
    #38073699
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод текста ошибки
EvLaUyЯ просто до сих пор не знал, что для этого метода разница стала принципиальна.Метод работает абсолютно одинаково что в версии 5.0.x, что в версии 2012.2 и ничего в нём не менялось.

Проверил на версии 5.0.21:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
USER>set sc=$system.Status.Error(5651)
 
USER>do $System.OBJ.DisplayError(sc)
 
ERROR #5651: Cannot do property
USER>write $System.OBJ.DisplayError(sc)
 
ERROR #5651: Cannot do property1
USER>do $System.OBJ.DisplayError("")
 
USER>write $System.OBJ.DisplayError("")
1
USER>
...
Рейтинг: 0 / 0
11.12.2012, 10:46
    #38073701
doublefint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод текста ошибки
EvLaUyЯ просто до сих пор не знал, что для этого метода разница стала принципиальна. Я пользовался им для вывода текста ошибки года эдак с 2003, и всё работало как часы. Значится, для вывода текста ошибки этот метод уже бесполезен.
Огня вам не миновать. Любой метод что-нибудь делает и возвращает результат. DisplayError продолжает работать, как работал и предназначен для (вы не поверите) вывода ошибки.
Все остальное можно списать на ваше состояние в два часа ночи.
...
Рейтинг: 0 / 0
11.12.2012, 11:38
    #38073788
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод текста ошибки
EvLaUy,

Код: php
1.
$SYSTEM.Status.GetErrorText(sc)
...
Рейтинг: 0 / 0
11.12.2012, 11:47
    #38073811
EvLaUy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод текста ошибки
doublefint,
авторDisplayError продолжает работать, как работал и предназначен для (вы не поверите) вывода ошибки.

Ну непреодолимое желание у некоторых людей обязательно "вставить шпильку". Что-то с логикой у Вас не так. Сначала я ошибочно написал, что метод бесполезен для вывода ошибки. Потом сам же поправился, т.е. моя поправка как раз означала, что для вывода ошибки он ПРЕДНАЗНАЧЕН, а не предназначен для сохранения текста ошибки в переменной. Я поблагодарил людей за помощь и посчитал проблему закрытой. Вы же ломитесь в открытую дверь, вторично заявляя, что метод предназначен для вывода ошибки, припиисывая мне, что я это якобы отрицаю. Где Вы увидели повод поязвить? У Вас, наверное, всегда всё работает с первого раза, и Вы никогда не ошибаетесь.
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Вывод текста ошибки / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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