Альтернатива Try-Catch в Navision 6.0 (CC) [вызов участника не удался]

При попытке распечатать документ в Navision мы получаем ошибку: Предоставлено сообщение об ошибке

Перевод: Это сообщение предназначено для программистов C/AL: Ошибка при вызове участника ActivePrinter. Microsoft Word вернул следующее сообщение: Ошибка принтера.

Ошибка возникает в этой строке:

wrdApp.ActivePrinter := InteractLogEntry."Printer Name";

InteractLogEntry — это список, который заполняется каждым принтером, установленным в локальной системе.

Мой вопрос: как я могу обработать это исключение (Navision не поддерживает обработку исключений с помощью try-catch)

Могу ли я использовать оператор if-else для решения этой проблемы?


person Daniel Abou Chleih    schedule 09.01.2013    source источник


Ответы (2)


Лучшей рабочей заменой try/catch в классическом клиенте является размещение кода сбоя в части OnRun отдельного кода.

Затем вы можете вызвать код из другого объекта (codeunit, форма, отчет и т. д.) с условием if

IF NOT MyCrashyCodeunit.RUN THEN BEGIN
  // Errror handling here
END
person 576i    schedule 30.04.2013

Начиная с Dynamics NAV 2016 существует альтернатива вызову Codeunit и оценке его возвращаемого значения.

Были введены пробные функции (см. Свойства функции), и их можно установить для любой функции. При вызове этой функции и (!) оценке ее логического возвращаемого значения ошибки подавляются, и поэтому возвращается false.

Дополнительные сведения: https://docs.microsoft.com/en-us/dynamics-nav/handling-errors-by-using-try-functions

Важная информация:

Поскольку изменения, внесенные в базу данных функцией try, не откатываются, вы не должны включать транзакции записи базы данных в функцию try. По умолчанию конфигурация сервера Microsoft Dynamics NAV запрещает вам это делать. Если функция try содержит транзакцию записи в базу данных, возникает ошибка времени выполнения.

person Daniel Abou Chleih    schedule 27.07.2020