• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Решено Можно ли перехватить Cannot locate field?

S

Shandrik

Функция контролирует заполненность полей. Если есть не заполненные, то посылает курсор в такое последнее.
Проблема со скрытым полем. По кнопке выбираю базу, FilePath которой в списке обязательных, но он скрыт. Юзеру выводится только Computed Text.
Включаю игнорирование ошибок перед этой строкой
On Error Resume Next
Call nuid.GotoField(nd.GetItemValue(FILL_CONTROL_FIELD_NAME)(i))
On Error Goto errh
, но всё-равно получаю "Cannot locate field". Видимо, сообщение выводится в самом методе GotoField, а перед выходом из него делают Resume. Можно это как-то победить?
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
типа уишные действия не ловятся обработчиком?
 
S

Shandrik

Не уверен, что правильно понял вопрос.
Уишные действия выполняет код. Ошибка должна игнорироваться, но не игнорируется. Есть подозрения, что ошибки нет, а есть только мессаджбокс "Cannot locate field".
 

garrick

Lotus Team
26.10.2009
1 342
150
BIT
128
Уберите Resume Next, а в errh добавьте
Код:
MessageBox "Error" & Str(Err) & ": " & Error$
И проверьте что текст ошибки соответствует тому, что вы написали выше. Запомните номер ошибки (Err). Исправьте обработчик ошибки следующим образом:

Код:
if err = ВАШ_КОД_ОШИБКИ then
    resume next
else
    MessageBox "Error" & Str(Err) & ": " & Error$
end if
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 927
608
BIT
150
я направляю в "мертвый" блок: If false Then
вместо Next
 

garrick

Lotus Team
26.10.2009
1 342
150
BIT
128
@lmike Ну, да. Так тоже можно. Можно ещё
Код:
if err <> ВАШ_КОД_ОШИБКИ then
    MessageBox "Error" & Str(Err) & ": " & Error$
end if
 
S

Shandrik

Уберите Resume Next, а в errh добавьте
Код:
MessageBox "Error" & Str(Err) & ": " & Error$
И проверьте что текст ошибки соответствует тому, что вы написали выше. Запомните номер ошибки (Err). Исправьте обработчик ошибки следующим образом:

Код:
if err = ВАШ_КОД_ОШИБКИ then
    resume next
else
    MessageBox "Error" & Str(Err) & ": " & Error$
end if

И получу в точности тот же сценарий, что и с on error resume next, только в 6 строк вместо одной.

Разумеется, я знаю, что gotofield не работает по нескрытым и присутствующим полям, но в данном случае я не могу дать юзеру возможность ручками вводить критически важное поле.

Кстати, исправляюсь - ошибка всё-таки генерится (Notes Error - Cannot locate field(4412)), но сообщение Cannot locate field избежать не удаётся. :(
 

garrick

Lotus Team
26.10.2009
1 342
150
BIT
128
И получу в точности тот же сценарий, что и с on error resume next, только в 6 строк вместо одной.
А вы уже попробовали?

Сам попробовал, ошибка действительно не перехватывается и всё равно выводится.
 
Последнее редактирование:

garrick

Lotus Team
26.10.2009
1 342
150
BIT
128
Я думаю, что LS NotesUIDocument.GotoField() каким-то образом вызывает собачий @GotoField, который и выплёвывает это окно с ошибкой, которое скриптом не перехватывается. А потом уже в скрипте появляется своя ошибка, которую можно перехватить стандартным On Error GoTo.
 
S

Shandrik

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

Domino-Designer

Людям надо поморгать!
Lotus Team
06.12.2011
616
223
BIT
9
хм...
Кнопка на форме, режим редактирования
Код:
Sub Click(Source As Button)
    Dim uiws As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    
    Set uidoc = uiws.CurrentDocument
    On Error Goto err1
    Call uidoc.GotoField("fld99978777") ' такого поля нет
    
    Exit Sub
err1:
    Print "Error" & Str(Err) & ": " & Error$
End Sub

Ничего выше обсуждаемого не наблюдаю. Выходит по Exit Sub, фокус пропадает из поля по умолчанию.
Notes Release 9.0
Revision 20121208.0805 (Build V90_CD6_12072012)
 
  • Нравится
Реакции: Shandrik
R

romych2004

хм...
Кнопка на форме, режим редактирования
Код:
Sub Click(Source As Button)
    Dim uiws As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
   
    Set uidoc = uiws.CurrentDocument
    On Error Goto err1
    Call uidoc.GotoField("fld99978777") ' такого поля нет
   
    Exit Sub
err1:
    Print "Error" & Str(Err) & ": " & Error$
End Sub

Ничего выше обсуждаемого не наблюдаю. Выходит по Exit Sub, фокус пропадает из поля по умолчанию.
Notes Release 9.0
Revision 20121208.0805 (Build V90_CD6_12072012)
добавь это поле на форму и скрой
 
  • Нравится
Реакции: Shandrik

garrick

Lotus Team
26.10.2009
1 342
150
BIT
128
Аналогичный код на Release 9.0.1 Revision 20131022.1138 (Release 9.0.1) выплёвывает окно с ошибкой на строке Call uidoc.GotoField, потом второе окно на строке Print "Error" & Str(Err) & ": " & Error$
добавь это поле на форму и скрой
Вот именно! Поле должно быть и должно быть скрыто.
[doublepost=1495017782,1495017618][/doublepost]
Да, похоже на то. А может другой отдел метод писал...
Не-е-е-е. Такой же индус, но из другой деревни. У них в каждой деревне свой индусский язык, они друг-друга не понимают. Не договорились... :(
 
  • Нравится
Реакции: Мыш и Shandrik
S

Shandrik

Вот именно! Поле должно быть и должно быть скрыто.
Ааа!!! Спасибо! Победили - просто удалил поле с формы. Надо поэкспериметировать с Evaluate
[doublepost=1495019304,1495019102][/doublepost]Не вижу - где кнопка "Проблема решена"?
[doublepost=1495019838][/doublepost]Проверил:
v=Evaluate({@Command( [EditGotoField] ;"myfield")})
не выдаёт ошибку при скрытии поля и при его отсутствии. Более того, он даже не выполняет это gotoField, если поле открыто и редактируемое.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!