Диалоговое окно: на какое событие повесить обработку?

Тема в разделе "Lotus - Программирование", создана пользователем Rosna, 21 сен 2011.

  1. Rosna

    Rosna Well-Known Member

    Регистрация:
    12 ноя 2003
    Сообщения:
    48
    Симпатии:
    0
    Есть диалоговое окно, которое вызывается из формы.

    @DialogBox("Window"; [AUTOHORZFIT] : [AUTOVERTFIT] : [NONEWFIELDS]; "Please select")

    Нужно не дать человеку назначить меньше 2 и больше 5 элементам списка определенное значение.

    Проблема:
    На какое событие повесить обработку, которая проверяет сколько элементов списка имет проверяемое значение, чтобы при нажатии ОК проверка проходила, а при нажатии Cancel проверка не делалась?
    Если я вешаю на Queryclose, то срабатывает проверка в двух случаях и при OK и при Cancel.
    На остальных событиях не срабатывает вообще...

    Лотус 7.0.1
     
  2. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Попробуйте в Queryclose анализировать свойство Source.DialogBoxCanceled
     
  3. Rosna

    Rosna Well-Known Member

    Регистрация:
    12 ноя 2003
    Сообщения:
    48
    Симпатии:
    0
    nvy, спасибо! Помогло.
     
  4. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    а чем валидатор поля не подходит?
     
  5. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.079
    Симпатии:
    300
    модальностью (глючно - вызов модального окна из модального)
     
  6. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Да и получается размазанность кода тонким слоем по полям, вместо централизации в одном месте.
     
  7. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.079
    Симпатии:
    300
    ну это как реализовать :unsure:
    я делаю так:
    соответ. errblank - CFD поле с текстом ошибки (о пустом поле)
    имена заголовков, для полей, динамически беруться из базы (при открытии формы):
    Добавлено: для ситуаций, когда валидатор, в базовом виде, нежелателен (из-за блокировок при рефреше и т.п.), меняеся на:
    и скрипт при кверисэйв:
    Код (LotusScript):
        Dim v As Variant
    v=curdoc.GetItemValue({notValid})
    'проверка валидности заполнения, для полей, валидация кот. невозможна "налету"
    If Isarray(v) Then
    Dim s As String
    Forall m In v
    If m<>"" Then s=s+Chr(10)+Strleft(m,{|})
    'Replace(Source.FieldGetText(m+"_title"),":","")
    End Forall
    If s<>"" Then
    Dim title As String
    title=curdoc.ParentDatabase.Title
    Msgbox Source.FieldGetText({notValid_header}) & s, 48, title
    Print "right:"+Strright(v(0),{:})
    Source.GotoField(Strright(v(0),{|
    }))
    Exit Sub
    End If
    End If
     
  8. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Ну, сам факт помещения кода проверки в поле, а не в ф-ию валидации, вызываемую на QS, уже является размазыванием кода.
    Я понимаю, что можно написать универсальную ф-ию, без хардкодинга имён полей и т.д., но, на мой взгляд, правильный путь - это вызыв ф-ии на QS в котором собраны все проверки.

    Открыв эту ф-ию ты сразу видишь, какие поля проверяются, какие условия и т.д.
    А открыв форму, у которой проверки натыканы на InputValidation'ы у полей, никакого общего впечатления о том, что тут проверятся - нету.
     
Загрузка...

Поделиться этой страницей