Как проверить, существует ли поле в документе пользовательского интерфейса или скрыть сообщение об ошибке Notes об этом - PullRequest
0 голосов
/ 23 января 2020

Я пишу агента, который проверяет каждое поле в списке, если оно пустое или нет. Поля могут быть любого типа, включая RichText. Поля расширенного текста могут содержать текст или вложение. Агент должен быть запущен в UIDocument, поскольку пользователю не разрешено сохранять, если обязательное поле пусто.

У нас есть существующий агент, но он иногда возвращает (5 или 6 раз в день) ошибки "4602: L ' Операция DOM Parser a échoué "(я думаю, что это должно быть что-то вроде" Операция DOM Parser fail "в engli sh) в этой строке:

Call DXLExporter.process

На Inte rnet я обнаружил, что это сервер проблема у меня нет руки на это. Я нахожу что-то интересное, чтобы заменить существующий агент:

' source is the NotesUIDocument, send to the agent in parameter
' champSource is a string : the name of the field

On Error GoTo ErrorHandler

Call source.GoToField(ChampSource)
Call source.SelectAll
Call source.DeselectAll

Exit Function
ErrorHandler:
    Select Case Err
        Case 4407 ' empty field
            Print "champ vide : " & ChampSource
        Case 4412 ' non-existent field
            Print "champ non trouvé : " & ChampSource
        Case Else
                Print LSI_Info(2) & " - " & Error & " - " & Err & " - " & Erl
        End Select
    Exit Function

И это работает, «source.DeselectAll» генерирует ошибку 4407, если поле пустое, и никакой ошибки, если оно содержит что-либо.

Проблема в том, что это форма с полями "когда скрыто". Когда одно из этих полей проверяется, если оно скрыто, я получаю всплывающее окно Notes «Impossible de localiser ce champ» (это должно быть что-то вроде «невозможно найти это поле» в engli sh) в этой строке:

Call source.GoToField(ChampSource)

И только после этого всплывающего окна скрипт переходит к ErrorHandler.

Я пытаюсь добавить условие до:

If source.Document.HasItem(ChampSource) Then
    Call source.GoToField(ChampSource)
    Call source.SelectAll
    Call source.DeselectAll
End If

Но элемент существует в документ, несмотря на то, что поле не существует в пользовательском интерфейсе.

Я ищу решение, чтобы скрыть всплывающее окно Notes и позволить моему ErrorHandler выполнить свою работу или проверить, существует ли поле в Пользовательский интерфейс.

Заранее спасибо за ответ.

PS: извините за мой бедный английский sh, я француз.

Ответы [ 2 ]

0 голосов
/ 28 января 2020

Вместо того, чтобы тестировать source.Document.HasItem(ChampSource), вам действительно нужно взглянуть на форму и определить, какова формула для скрытия когда. Затем вы можете написать код, который выглядит следующим образом:

if Evaluate("The hide-when-formula goes here", source.Document) = true then
   ' the field is hidden; so do what you want for that case
else
    Call source.GoToField(ChampSource)
    Call source.SelectAll
    Call source.DeselectAll
end if
0 голосов
/ 24 января 2020

Относительно ошибки парсера dom. У меня такая же ошибка на моем сервере. И я нашел два решения, которые работают (большую часть времени).

  1. Повторите попытку несколько раз. Это если ошибка 4602, попробуйте еще раз. Установите максимальное количество попыток в 10-20 раз. Я все еще вижу ошибки в этом подходе, но не так часто, как раньше.
  2. Не проверять. Установите InputValidationOption для анализатора DOM на VALIDATE_NEVER.

https://www.ibm.com/support/knowledgecenter/SSVRGU_8.5.3/com.ibm.designer.domino.main.doc/H_INPUTVALIDATIONOPTION_PROPERTY_IMPORTER.html

...