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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.12.2005, 12:15   #1  
Dolter_imported is offline
Dolter_imported
Участник
 
47 / 10 (1) +
Регистрация: 23.09.2004
В принципе весь вопрос в теме...
Возможно ли вызвать свой обработчик ошибок?
А то вываливается по ошибке и весь остальной код не фурычит... :-(
__________________
YEP! тел. (905) 561-94-00
Старый 27.12.2005, 12:41   #2  
Yuriy is offline
Yuriy
Участник
 
150 / 10 (1) +
Регистрация: 25.02.2003
Адрес: Москва
Если речь идет о Navision, то можно писать функции в кодеюнитах, где делать вызов необходимых процедур, форм, отчетов, датапортов и там перехватывать их выполнение.
__________________
Вот такие, брат, дела!
Старый 27.12.2005, 13:02   #3  
Dolter_imported is offline
Dolter_imported
Участник
 
47 / 10 (1) +
Регистрация: 23.09.2004
Ok!
Делаю так:
1. создаю кодеюнит с единственной глобальной типа атомэшн (ADO.Connect) и с одной функцией:
Код:
Init(InConnectionString : Text[1000]) Ok : Boolean
  // используем строку соединения по умолчанию, если передано пустое значение
  IF InConnectionString = '' THEN
	InConnectionString := ConnectionString;

  CREATE(Conn);
  Conn.Open(InConnectionString);
  EXIT(TRUE);
2. Создаю второй кодеюнит для теста, где переменнаю первый кодеюнит и вызов ее функции:
Код:
OnRun()
  MESSAGE(FORMAT(Conn.Init('')));
  MESSAGE('далее...');
Создаю заведомо ошибочную строку коннекта и... месседжи мои уже не отрабатывают, только окно вываливается с ошибкой соединения...

ЧТО ДЕЛАТЬ?

З.Ы. Читаю "Средства интеграции Navision":

Цитата:
п.5.5.
...
Ограничения
...
* Обработка исключений (Exeption Handling). Среда C/SIDE не
позволяет извлекать информацию об исключениях... (и т.д.)
... Имеются пути обхода данного ограничения.
ЗДОРОВО! что они (пути обхода) есть. Но где они описаны? :-)
__________________
YEP! тел. (905) 561-94-00
Старый 27.12.2005, 13:28   #4  
Fordewind is offline
Fordewind
Участник
 
1,134 / 10 (3) +
Регистрация: 01.12.2005
А если написать
Код:
CREATE(Conn);
  IF Conn.Open(InConnectionString) THEN
	EXIT(TRUE);
  EXIT(FALSE);
?
Старый 27.12.2005, 13:32   #5  
Dolter_imported is offline
Dolter_imported
Участник
 
47 / 10 (1) +
Регистрация: 23.09.2004
Цитата:
Сообщение от Fordewind Посмотреть сообщение
А если написать
Код:
CREATE(Conn);
  IF Conn.Open(InConnectionString) THEN
	EXIT(TRUE);
  EXIT(FALSE);
?
C удовольствием бы так написал, но метод Open у объекта ADO.Connection не возвращает ничего... VOID однако...
__________________
YEP! тел. (905) 561-94-00
Старый 27.12.2005, 13:49   #6  
Fordewind is offline
Fordewind
Участник
 
1,134 / 10 (3) +
Регистрация: 01.12.2005
Эххх... а так хотелось верить.
Дествительно интересно что же тут делать...

А что за InConnectionString? может его сначала проверить на правильность?
Старый 27.12.2005, 14:07   #7  
Dolter_imported is offline
Dolter_imported
Участник
 
47 / 10 (1) +
Регистрация: 23.09.2004
Цитата:
Сообщение от Fordewind Посмотреть сообщение
Эххх... а так хотелось верить.
Дествительно интересно что же тут делать...

А что за InConnectionString? может его сначала проверить на правильность?
Проверил :-)
Я ввел ЗАВЕДОМО неправильную строку соединения! :-)
Обошел пока эту проблему... Т.к. мне нужен один коннект на все время сессии, то сделал проще:
В триггер LogInStart (в самый конец его, чтобы все остальное отработало) вставил переменную ConnADO с типом кодеюнит ConnADO, где уже 2 переменные Conn (тип ADO.Connection) и IsConnected (Boolean) и 2 метода Init и Connected
Код:
Init(InConnectionString : Text[1024]) Ok : Boolean
CLEAR(Conn);
IsConnected := FALSE;

// используем строку соединения по умолчанию, если передано пустое значение
IF InConnectionString = '' THEN
  InConnectionString := ConnectionString;

// в случае ошибки при соединении IsConnected так и останется FALSE
CREATE(Conn);
Conn.Open(InConnectionString);
IsConnected := TRUE;

Connected() Ok : Boolean
EXIT(IsConnected);
В итоге теперь при ошибочном соединении выдается ошибка ADO, но в дальнейшем мы уже не инициализируя сам коннект, можем просто проверить а есть ли он!

З.Ы. SingleInstance у кодеюнита ConnADO стоит в <Yes> дабы не переконнекчиваться каждый раз для получения данных из внешней базы... Время оно не резиновое :-)
__________________
YEP! тел. (905) 561-94-00
Старый 27.12.2005, 14:15   #8  
Константин! is offline
Константин!
Участник
 
180 / 10 (1) +
Регистрация: 13.04.2005
Адрес: Казань
Может так:
Код:
OnRun()
  if Conn.Init('') then
	MESSAGE('Да');
  MESSAGE('далее...');
Старый 27.12.2005, 14:20   #9  
Dolter_imported is offline
Dolter_imported
Участник
 
47 / 10 (1) +
Регистрация: 23.09.2004
Цитата:
Сообщение от Константин! Посмотреть сообщение
Может так:
Код:
OnRun()
  if Conn.Init('') then
	MESSAGE('Да');
  MESSAGE('далее...');
Пробовал... даже MESSAGE('Да') уже не выполняется...
__________________
YEP! тел. (905) 561-94-00
Старый 27.12.2005, 14:28   #10  
Константин! is offline
Константин!
Участник
 
180 / 10 (1) +
Регистрация: 13.04.2005
Адрес: Казань
блин глючу
вот так
CU 50000
OnRun()
Conn.Init('');
в любом месте например в другом CU

if cu50000.run then;
MESSAGE('далее...');

Параметр строки соединения можеш закидавать через доп ф-ю котрая будет устанавливать глобальную переменную.
Старый 27.12.2005, 15:31   #11  
Dolter_imported is offline
Dolter_imported
Участник
 
47 / 10 (1) +
Регистрация: 23.09.2004
Цитата:
Сообщение от Константин! Посмотреть сообщение
блин глючу
вот так
CU 50000
OnRun()
Conn.Init('');
в любом месте например в другом CU

if cu50000.run then;
MESSAGE('далее...');

Параметр строки соединения можеш закидавать через доп ф-ю котрая будет устанавливать глобальную переменную.
СУПЕР! Спасибо большое! Работает... :-)
__________________
YEP! тел. (905) 561-94-00
 


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

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

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