AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.11.2007, 14:28   #1  
by_HT is offline
by_HT
Участник
 
195 / 10 (1) +
Регистрация: 12.10.2007
Такая ситуация:
Имметься форма, на форме имеются кнопки.!
При нажатие на одну из кнопок, в событие OnPush уменя сразу идет обращения к кодеюниту!
В кодеюните производяться различные операции...
Как мне допустим выйти из кодеюнита обратно в событие OnPush,не проходя весь код кодеюнита!
Старый 09.11.2007, 14:35   #2  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от by_HT Посмотреть сообщение
Как мне допустим выйти из кодеюнита обратно в событие OnPush,не проходя весь код кодеюнита!
По-английски. EXIT.
Старый 09.11.2007, 15:20   #3  
by_HT is offline
by_HT
Участник
 
195 / 10 (1) +
Регистрация: 12.10.2007
хорошо..копаем глубже... =)
В кодеюните я вызываю ошибку:
// Если поле не заполнено...
// Комитом, я останавливаю все действия и вызываю ошибку!
IF Setup."Pattern Name" = '' THEN
BEGIN
COMMIT;
ERROR(Text1);
END;
// Как мне в это случае В Этом Условие выйти из кодеюнита обратно в событие!
Старый 09.11.2007, 15:39   #4  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от by_HT Посмотреть сообщение
// Как мне в это случае В Этом Условие выйти из кодеюнита обратно в событие!
Гхм.. Вообще ERROR() используется в навижене для отката транзакции. Это гарантирует, что при критичной ошибке все действия по модификации данных в различных объектах будут корректно откачены назад. Что гарантирует корректную работу системы в целом. Коммитом вы не останавливаете все действия. Вы закрепляете в БД все изменения, которые сделал написанный до КОММИТА код. Вообще этот оператор нужно использовать очень осторожно. Когда вы полностью уверены в том, что хотите сделать и что делаете. А действия по остановке всех действий и корректному откату вызовет как раз оператор ERROR(). Этого будет достаточно для остановки. И еще. Применительно к вашему примеру .. Есть стандартный оператор TESTFIELD(). Использовать его вместо ERROR предпочтительно, потому что сообщение об ошибке более информативное и главное стандартное. Приучайте пользователей к адекватному восприятию СТАНДАРТНЫХ ситуаций, возникающих в системе.

Код:
Setup.TESTFIELD("Pattern Name");
Старый 09.11.2007, 15:53   #5  
Corleone is offline
Corleone
Участник
 
355 / 10 (1) +
Регистрация: 27.05.2004
Адрес: London
Цитата:
Сообщение от romeo Посмотреть сообщение
Использовать его вместо ERROR предпочтительно, потому что сообщение об ошибке более информативное и главное стандартное.

Код:
Setup.TESTFIELD("Pattern Name");
Ага, и сообщение будет типа Определите поле "Pattern Name" в таблице Setup, что для юзера то же самое что "Программа выполнила недопустимую операцию и будет закрыта".
Старый 09.11.2007, 15:57   #6  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от Gmc Посмотреть сообщение
Ага, и сообщение будет типа Определите поле "Pattern Name" в таблице Setup, что для юзера то же самое что "Программа выполнила недопустимую операцию и будет закрыта".
Именно так. Только так. И пользователь программы Навижен должен привыкать ИМЕННО к этому, к такой реации системы. Этот оператор ОДНОЗНАЧНО определяет ключ записи и поле, значение в котором вызвало ошибку. К тому же сообщение об ошибке, присланное юзером разработчику даст последнему более исчерпывающую информацию и возможно сразу подскажет, в каком месте копать..

Цитата:
Сообщение от TRIgor Посмотреть сообщение
В том то и дело, что время дорого . А что касается MESSEGE. То я так понял человеку нужно дальше выполнение кода. Вот и предложил вариант, иначе написал, что при ERROR идет откат всех выполненных действий до него.
Подобные проверки (на заполненность критичных полей) нужно делать ДО, а не после выполнения основного алгоритма.
Старый 09.11.2007, 16:09   #7  
Corleone is offline
Corleone
Участник
 
355 / 10 (1) +
Регистрация: 27.05.2004
Адрес: London
Цитата:
Сообщение от romeo Посмотреть сообщение
Именно так. Только так. И пользователь программы Навижен должен привыкать ИМЕННО к этому, к такой реации системы. Этот оператор ОДНОЗНАЧНО определяет ключ записи и поле, значение в котором вызвало ошибку. К тому же сообщение об ошибке, присланное юзером разработчику даст последнему более исчерпывающую информацию и возможно сразу подскажет, в каком месте копать..
Это не user friendly. Это сообщение для прораммистов C\AL как говорится... Юзеру наду указать на его ошибку, а так любой юзер считает что ошибка вызвана системой. Просто ты принимаешь действительность такой какая она есть. Есть Navi какашка, пусть и привыкают.
Старый 09.11.2007, 15:41   #8  
TRIgor is offline
TRIgor
Участник
 
45 / 10 (1) +
Регистрация: 19.10.2007
Это из хелпа про ERROR
Use this function to display an error message and end the execution of C/AL code.

Думаю тут надо использовать MESSAGE() а в тексте написать "Ошибка: бла-бла-бла".
Старый 09.11.2007, 15:45   #9  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от TRIgor Посмотреть сообщение
Думаю тут надо использовать MESSAGE() а в тексте написать "Ошибка: бла-бла-бла".
Никогда так не делайте.. Иначе дебагер (о котором вы сами упомянули в теме чуть раньше) никогда не выйдет на эту ошибку.. Если вы хотите потратить в несколько раз больше времени для локализации ошибки - не используйте комбинацию MESSAGE() EXIT(). А то придется искать в одном или нескольких объектах по тексту "Ошибка: бла-бла-бла" вместо того, чтобы активизировать дебаггер и запустить код на выполнение.
Старый 09.11.2007, 15:55   #10  
TRIgor is offline
TRIgor
Участник
 
45 / 10 (1) +
Регистрация: 19.10.2007
Цитата:
Сообщение от romeo Посмотреть сообщение
Если вы хотите потратить в несколько раз больше времени для локализации ошибки - не используйте комбинацию MESSAGE() EXIT().
В том то и дело, что время дорого . А что касается MESSEGE. То я так понял человеку нужно дальше выполнение кода. Вот и предложил вариант, иначе написал, что при ERROR идет откат всех выполненных действий до него.
Старый 09.11.2007, 17:24   #11  
Fordewind is offline
Fordewind
Участник
 
1,134 / 10 (3) +
Регистрация: 01.12.2005
Цитата:
Сообщение от by_HT Посмотреть сообщение
Такая ситуация:
Имметься форма, на форме имеются кнопки.!
При нажатие на одну из кнопок, в событие OnPush уменя сразу идет обращения к кодеюниту!
В кодеюните производяться различные операции...
Как мне допустим выйти из кодеюнита обратно в событие OnPush,не проходя весь код кодеюнита!
на кнопке пишем, например, так:
IF CODEUNIT.RUN(MyNumber) THEN;

а выход из кодеюнита:
ERROR(''); если нужно с откатом
EXIT; если без отката
Старый 09.11.2007, 17:44   #12  
Fordewind is offline
Fordewind
Участник
 
1,134 / 10 (3) +
Регистрация: 01.12.2005
2 GMC

Слова "Насчет отмены это отдельная история, практика показывает что она в наших условиях нужна. " тербуют пояснения, как слова человека из Лондона

2 romeo и GMC

Думаю все же, истина как всегда где-то посередине.
С одной стороны Nav выдает сообщения совершенно безграмотные с точки зрения русского языка (хотя, я конечно не филолог). И думаю, уместно писать сообщения для пользователей об их ошибках на нормальном русском языке.
С другой сторононы подгонять систему под нежелание пользователей делать нормальные корректирующие документы считаю крайне вредным делом.
Старый 09.11.2007, 17:54   #13  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от Fordewind Посмотреть сообщение
2 romeo и GMC
Конечно все решается на месте, в зависимости от задачи.. Просто давая совет на форуме человеку, который в навижене не очень давно (я имею в виду автора топика) я не хочу чтобы он видел все возможные варианты.. Иначе не совсем хорошо зная возможности системы и функционал он закрепит для себя шаблоны использования операторов, такие как MESSAGE() EXIT() (у нас в компании писалось такое года 4 назад, до сих пор вызывает раздражение когда наталкиваемся), поймет, что использовать COMMIT очень даже удобно (почему нет? никаких дурацких блокировок), будет включать в текст ошибок слова "Уважаемый " + USERID() ... (кому не приятно вспомнить свой логин) и тд. Я хочу, чтобы он сразу знал, что имеет система для борьбы с частовозникающими ситуациями в работе. К тому же TESTFIELD() это собственно не ошибка. Это бескомпромиссное предупреждение о том, что пользователь плохо делает дело, за которое ему платят бабки (посмотрите юниты учета.. думаю неуместно будет в ряд стандартных тестфилдов пихать свою мессагу об ошибке с дружественным интерфейсом).
Лирика ..
Старый 12.11.2007, 14:50   #14  
Fordewind is offline
Fordewind
Участник
 
1,134 / 10 (3) +
Регистрация: 01.12.2005
Цитата:
Сообщение от romeo Посмотреть сообщение
Конечно все решается на месте, в зависимости от задачи.. Просто давая совет на форуме человеку, который в навижене не очень давно (я имею в виду автора топика) я не хочу чтобы он видел все возможные варианты.. Иначе не совсем хорошо зная возможности системы и функционал он закрепит для себя шаблоны использования операторов, такие как MESSAGE() EXIT() (у нас в компании писалось такое года 4 назад, до сих пор вызывает раздражение когда наталкиваемся), поймет, что использовать COMMIT очень даже удобно (почему нет? никаких дурацких блокировок), будет включать в текст ошибок слова "Уважаемый " + USERID() ... (кому не приятно вспомнить свой логин) и тд. Я хочу, чтобы он сразу знал, что имеет система для борьбы с частовозникающими ситуациями в работе. К тому же TESTFIELD() это собственно не ошибка. Это бескомпромиссное предупреждение о том, что пользователь плохо делает дело, за которое ему платят бабки (посмотрите юниты учета.. думаю неуместно будет в ряд стандартных тестфилдов пихать свою мессагу об ошибке с дружественным интерфейсом).
Лирика ..
С частью о наставлении на пусть истинный новых программистов полностью согласен.
С TESTFIELD не совсем. Пердставте, что вам вместо кресла за компьютером предложат сидеть на табурете, как на стандартном средстве работы .
Не логично и не удобно. Чем юзер хуже?

P.S. А вобще можно выделить нужные места цветом, и сказать, что это обязательно для заполнения. Тогда каждый юзер получив сообщение об ошибке и ничего в нем не поняв будет просто перепроверять ввденную информацию с идентификацией по цвету
Старый 13.11.2007, 09:02   #15  
by_HT is offline
by_HT
Участник
 
195 / 10 (1) +
Регистрация: 12.10.2007
Цитата:
Сообщение от Fordewind Посмотреть сообщение
С частью о наставлении на пусть истинный новых программистов полностью согласен.
С TESTFIELD не совсем. Пердставте, что вам вместо кресла за компьютером предложат сидеть на табурете, как на стандартном средстве работы .
Не логично и не удобно. Чем юзер хуже?

P.S. А вобще можно выделить нужные места цветом, и сказать, что это обязательно для заполнения. Тогда каждый юзер получив сообщение об ошибке и ничего в нем не поняв будет просто перепроверять ввденную информацию с идентификацией по цвету
Интересный вариант!
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 05:01.