Форум программистов, компьютерный форум, киберфорум
Наши страницы

Lotus Notes/Domino: Программирование

Войти
Регистрация
Восстановить пароль
 
 
okupoko
0 / 0 / 0
Регистрация: 04.10.2007
Сообщений: 2,977
#1

Обработка ошибок - Lotus

30.05.2010, 11:58. Просмотров 74288. Ответов 64
Метки нет (Все метки)

Всем привет.

Пытаюсь тут наваять принципы обработки ошибок и обработчики поинтереснее придумать под LS.
Возник вопрос, а можно ли определить, что ошибка возникла в текущей процедуре, а не в вызванной из нее?
Понятно, что можно для каждой вызываемой процедуры объявить свой обработчик, ну, а без такового можно?

Кому интересно, из практики:
- результат функции не инициализируется, если в ней возникла необработанная исключительная ситуация, даже, если перед ее возникновением этот результат был назначен.
Т.е.:

LotusScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Function F1() As Variant
F1 = False
Error 1000, "Some error"
End Function
 
Sub Initialize()
так использовать нельзя
On Error Resume Next
If F1() Then
Msgbox "F1 returned True"
End If
 
так лучше
Dim F1Res as Variant
On Error Resume Next
F1Res = F1()
If F1Res Then
Msgbox "F1 returned True"
End If
 
причем, если F1Res используется для возврата значений нескольких функций, то перед вызовом функции ее (F1Res) необходимо сбрасывать!
Dim F2Res as Variant
On Error Resume Next
F2Res = True
F2Res = F1()  F1() не вернула результат, но и не сбросила состояние F2Res!!! F2Res == True из предыдущего состояния
If F2Res Then
ЭТОТ код выполнится ошибочно
Msgbox "F1 returned True"
End If
End Sub
Для решения этой проблемы, нужно иметь в функции обязательный обработчик, в котором происходит инициализация возвращаемого значения, при этом, ошибку необходимо передавать либо в результате, либо в иной структуре (возвращаемый параметр, глобальная переменная/объект).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2010, 11:58
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Обработка ошибок (Lotus):

Обработка ошибок! - Lotus
Доброго времени суток! Подскажите плз, есть ли в LotusScript механизм обработки ошибок.При чем не просто OnError goto, а на уровне :...

Обработка ошибок! - Lotus
Где можна взять номера ошибок в лотус скрипт? и еще вопросик: пытаюсь испольховать в качестве лейбла имя подпрограымы , но не знаю...

Отработать Onerror глобально, обработка ошибок - Lotus
Что бы не писать в множествах "Действия", "Агенты", "Процедуры и функции" <!--shcode--><pre><code class=vb script>OnError goto lable ...

Обработка ошибок, логгирование, трейсинг и юнит-тестинг - Lotus
Хочу поделиться библиотеками для обработки ошибок, логгирования, отслеживания выполнения кода и тестирования компонентов (unit testing)....

В чем причина возникающих критических ошибок - Lotus
Постоянно возникают эти гнусные ошибки при открытии документа на редактирование

Обработка ошибок - VB
используй erl() только если в строке с ошибкой нету номера строки erl() возвращает 0

64
mvyush
0 / 0 / 0
Регистрация: 19.04.2009
Сообщений: 2,219
17.08.2010, 15:28 #61
Цитата Сообщение от Morpheus
на сколько я знаю - нет, не сброситься
Создайте и выполните агента с нижеприведённым кодом. Первая функция сбрасывает ошибку, вторая — нет.
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Код агента</div></div><div class="sp-body"><div class="sp-content">

LotusScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Sub Initialize
On Error Goto ErrorMsg
Print "" & Getthreadinfo(1) & " line " & Getthreadinfo(0) & " Err = " & Err & " Error = " & Error
Call testErr1
Print "" & Getthreadinfo(1) & " line " & Getthreadinfo(0) & " Err = " & Err & " Error = " & Error
Call testErr2
Print "" & Getthreadinfo(1) & " line " & Getthreadinfo(0) & " Err = " & Err & " Error = " & Error
Exit Sub
ErrorMsg:
Msgbox Error
Print "" & Getthreadinfo(1) & " line " & Getthreadinfo(0) & " Err = " & Err & " Error = " & Error
Exit Sub
End Sub
Sub testErr1
On Error Goto ErrorMsg
Print "" & Getthreadinfo(1) & " line " & Getthreadinfo(0) & " Err = " & Err & " Error = " & Error
Error 1000, "Some error"
ExitSub:
Print "" & Getthreadinfo(1) & " line " & Getthreadinfo(0) & " Err = " & Err & " Error = " & Error
Exit Sub
ErrorMsg:
Msgbox Error
Print "" & Getthreadinfo(1) & " line " & Getthreadinfo(0) & " Err = " & Err & " Error = " & Error
Resume ExitSub
End Sub
Sub testErr2
On Error Goto ErrorMsg
Print "" & Getthreadinfo(1) & " line " & Getthreadinfo(0) & " Err = " & Err & " Error = " & Error
Error 1000, "Some error"
ExitSub:
Print "" & Getthreadinfo(1) & " line " & Getthreadinfo(0) & " Err = " & Err & " Error = " & Error
Exit Sub
ErrorMsg:
Msgbox Error
Print "" & Getthreadinfo(1) & " line " & Getthreadinfo(0) & " Err = " & Err & " Error = " & Error
Exit Sub
End Sub
0
otyk86
0 / 0 / 0
Регистрация: 17.12.2008
Сообщений: 420
17.08.2010, 15:50 #62
Resume statement
Syntax
Resume [ 0 | Next | label ]
Elements
Usage
The Resume statement resets the values of the Err, Erl, and Error functions.

Выходит если я делаю Resume Next, то Err = 0 не надо...
0
Mydyvys
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
17.08.2010, 15:55 #63
On Error [ errNumber ] { GoTo label | Resume Next | GoTo 0 }
Resume Next

Specifies that when the error occurs, execution continues with the statement following the statement which caused the error. No error-handling routine is executed. The values of the Err, Erl, and Error functions are not reset. (Note that a Resume statement does reset these values.) The error is considered handled.
0
otyk86
0 / 0 / 0
Регистрация: 17.12.2008
Сообщений: 420
17.08.2010, 16:02 #64
Medevic, а Вы не про On Error Resume Next пишете?
В 8.5 хелпе про On Error Resume Next и про Resume statement разные разделы пишут.
0
mvyush
0 / 0 / 0
Регистрация: 19.04.2009
Сообщений: 2,219
17.08.2010, 16:03 #65
On Error Resume Next не сбрасывает ошибку, а

LotusScript
1
2
3
4
On Error Goto Errh
...
Errh:
Resume Next
сбрасывает. Подтверждение:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Код агента</div></div><div class="sp-body"><div class="sp-content">

LotusScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Sub Initialize
On Error Goto ErrorMsg
Print "" & Getthreadinfo(1) & " line " & Getthreadinfo(0) & " Err = " & Err & " Error = " & Error
Call testErr3
Print "" & Getthreadinfo(1) & " line " & Getthreadinfo(0) & " Err = " & Err & " Error = " & Error
Call testErr4
Print "" & Getthreadinfo(1) & " line " & Getthreadinfo(0) & " Err = " & Err & " Error = " & Error
Exit Sub
ErrorMsg:
Msgbox Error
Print "" & Getthreadinfo(1) & " line " & Getthreadinfo(0) & " Err = " & Err & " Error = " & Error
Exit Sub
End Sub
Sub testErr3
On Error Goto ErrorMsg
Print "" & Getthreadinfo(1) & " line " & Getthreadinfo(0) & " Err = " & Err & " Error = " & Error
Error 1000, "Some error"
ExitSub:
Print "" & Getthreadinfo(1) & " line " & Getthreadinfo(0) & " Err = " & Err & " Error = " & Error
Exit Sub
ErrorMsg:
Msgbox Error
Print "" & Getthreadinfo(1) & " line " & Getthreadinfo(0) & " Err = " & Err & " Error = " & Error
Resume Next
Sub testErr4
On Error Resume Next
Print "" & Getthreadinfo(1) & " line " & Getthreadinfo(0) & " Err = " & Err & " Error = " & Error
Error 1000, "Some error"
ExitSub:
Print "" & Getthreadinfo(1) & " line " & Getthreadinfo(0) & " Err = " & Err & " Error = " & Error
Exit Sub
ErrorMsg:
Msgbox Error
Print "" & Getthreadinfo(1) & " line " & Getthreadinfo(0) & " Err = " & Err & " Error = " & Error
Resume ExitSub
End Sub
0
17.08.2010, 16:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2010, 16:03
Привет! Вот еще темы с ответами:

обработка ошибок - C++
Есть класс треугольника, нужно, чтобы при вводе в конструктор нулей или минусовых значений вместо сторон, выдавало ошибку,получается...

Обработка ошибок - VBA
Можно в одной процедуре использовать 2 раза On Error GoToсоответственно для одной части кода и для другой части кода? Если можно, то...

Обработка ошибок - Delphi
Почему все таки возникают иногда ошибки при обработке: Stream := TIdMultipartFormDataStream.Create; //поток для веб try ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
65
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru