2014-11-16 3 views
0

У меня есть приложение в Lotus Notes, где я получаю постоянную ошибку при отладке, но не останавливается там, потому что ошибка не связана с каким-либо конкретным действием. Всякий раз, когда я открываю базу данных приложений и нажимаю на Debug Lotusscript, а затем при нажатии на любое содержимое определенного вида, я получаю сообщение об ошибке несоответствия типа MAILDOC! Я просмотрел этот конкретный вид, но не могу точно определить, где происходит несоответствие типов. Я проверил с типом MAILDOC и объявлен как NotesDocument. Может ли кто-нибудь помочь мне с этим?Ошибка Lotus Notes «Ошибка несоответствия типа MAILDOC» при отладке

+1

Вы проверили код, связанный с формами? Если панель предварительного просмотра открыта, даже показывая только один пиксель, тогда щелчок по документу в представлении вызовет код, связанный с событиями в форме. –

+0

Код, вызывающий ошибку, также может быть в представлении «Regiondoubleclick» или «Onselect» – poisonedYouth

+0

Большинство событий имеют дело с NotesUIDocument, а не Notesdocument - это может быть источником несоответствия типа. Однако главное - найти место, где это происходит - как говорит @Andre Guirard, вам нужно переключить отладчик лотосов, прежде чем открывать представление, чтобы он запускал сценарий в режиме отладки с самого начала. Альтернативой является размещение сообщений (всплывающее сообщение) или операторов печати (которые появятся в строке состояния в нижней части экрана), чтобы рассказать вам, как далеко он упал до того, как он упал. – user2808054

ответ

0

Для отладки кода, связанного с представлением, необходимо включить отладчик до, открыв представление. Мне нужно задаться вопросом, если вы не можете отлаживать, чтобы найти строку, как вы знаете, что ошибка относится к MAILDOC. Похоже, что у вас уже есть код в приложении, чтобы уловить ошибку и отобразить дополнительную информацию, но функция, которая ловут ошибку, не отображает достаточную информацию для поиска проблемы - например, он не отображает имя функции или номер строки.

Также обратите внимание, что если вы полагаетесь на отладчик LotusScript, чтобы автоматически останавливаться на строке ошибки, это не происходит, если ваш код перехватывает ошибку и отображает сообщение. Вам нужно будет пройти через код, чтобы найти строку ошибки.

Я настоятельно рекомендую вам поместить код захвата ошибок во все ваши модули LotusScript. Это включает в себя вставке определенных строк в начале и в конце каждого модуля, а именно:

' FUNCTION IN A CLASS 
    On Error Goto oops 
    ' ... 
    Exit Function 
oops: 
    Error Err, Error & { //} & TypeName(Me) & {.} & GetThreadInfo(1) & {:} & Erl & (Erl-Getthreadinfo(0)) 

' SUB IN A CLASS 
    On Error Goto oops 
    ' ... 
    Exit Sub 
oops: 
    Error Err, Error & { //} & TypeName(Me) & {.} & GetThreadInfo(1) & {:} & Erl & (Erl-Getthreadinfo(0)) 

' CLASS PROPERTY 
    On Error Goto oops 
    ' ... 
    Exit Property 
oops: 
    Error Err, Error & { //} & TypeName(Me) & {.} & GetThreadInfo(1) & {:} & Erl & (Erl-Getthreadinfo(0)) 

' SIMPLE SUB 
    On Error Goto oops 
    ' ... 
    Exit Sub 
oops: 
    Error Err, Error & { //}& GetThreadInfo(1) & {:} & Erl 

' SIMPLE FUNCTION 
    On Error Goto oops 
    ' ... 
    Exit Function 
oops: 
    Error Err, Error & { //}& GetThreadInfo(1) & {:} & Erl 

Если вы не используете объектно-ориентированный LotusScript, вам просто нужно два последние для простых функций и переходников. «...» - это место, где вы бы поместили существующий код функции. Так, например, если ваша функция:

Function Invert(x) As Long 
    Invert = -x 
End Function 

то вместо этого вы должны написать:

Function Invert(x) As Long 
    On Error Goto oops 
    Invert = -x 
    Exit Function 
oops: 
    Error Err, Error & { //}& GetThreadInfo(1) & {:} & Erl 
End Function 

Если вы сделаете это последовательно, то в любое время вы получите сообщение об ошибке, сообщение будет включать в себя полный стек ошибок с именами функций и номерами строк, что должно упростить поиск проблемы.

0

Иногда, когда у меня есть ошибка, которую очень сложно найти, я создаю «Design Sinopsys» из всех элементов дизайна. Тогда поиск слова «MAILDOC» (и строка, которая генерирует ошибку) очень проста.