Работает ли Notestimer в Dialogbox?

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

Статус темы:
Закрыта.
  1. Гость

    Пытаюсь запустить хелповый примерчик по NotesTimer - не хочет работать таймер. :(
    Кто работал с таймерами подскажите можно ли их заставить работать в DialogBox? Есть ли еще способы запускать выполнение какой-либо функции через определенное время?

    Что делаю:
    В форме в Глобал пишу:
    Код (Text):
    %INCLUDE "lsconst.lss"
    Dim elapsedTime As Integer
    Dim elapsedTimer As NotesTimer
    В Postopen формы:
    Код (Text):
    Sub Postopen(Source As Notesuidocument)
    Set elapsedTimer = New NotesTimer(1, "Elapsed time since opening document")
    elapsedTime = 0
    Msgbox "Сделали!"
    On Event Alarm From elapsedTimer Call elapsedTimerHandler
    elapsedTimer.Enabled = True
    End Sub
    Добавляю функцию в Глобал:
    Код (Text):
    Sub elapsedTimerHandler(Source As NotesTimer)
    elapsedTime = elapsedTime + 1
    End Sub
    На форму кидаю кнопку:
    Код (Text):
    Sub Click(Source As Button)
    If elapsedTimer.Enabled Then
    If Messagebox _
    ("Do you want to disable the timer?", _
    MB_YESNO + MB_ICONQUESTION, _
    "Elapsed timer is enabled") = IDYES Then
    elapsedTimer.Enabled = False
    End If
    Else
    If Messagebox _
    ("Do you want to enable the timer?", _
    MB_YESNO + MB_ICONQUESTION, _
    "Elapsed timer is disabled") = IDYES Then
    elapsedTimer.Enabled = True
    End If
    End If
    End Sub
    Вызываю форму:
    Код (Text):
    Set dlgDoc = Db.CreateDocument
    Call WS.DialogBox( "SearchDlg" , True, True, True, True, True, False, "Search", dlgDoc)
    Причем если вызвать форму так, то таймер нормально работает:
    Код (Text):
        dlgDoc.form = "SearchDlg"
    Call WS.EditDocument( True, dlgDoc )
     
  2. Axel

    Axel Гость

    Этот вопрос уже подымался на форуме в другой ветке (немного в другом контексте).

    Было определено, что с диалог-боксами таймер однозначно не работает.

    Судя по всему с любыми модальными окнами таймер работать не будет.
     
  3. Гость

    Спасибо.
    Жаль, что так нельзя сделать. :(

    Вообще мне нужно, чтобы пользователь вводил числовое значение, а форма проверяла состояние поля и если символов больше или равно заданному числу (15), то... выполнялись дальнейшие действия (поиск дока).

    Попробовала через JS (onKeyPress), но он только под Web похоже, а у меня клиентское приложение.

    Как еще можно это реализовать?
    Может есть возможность вывести не модальное окно или вызвать обработчик еще каким хитрым способом?
     
  4. Axel

    Axel Гость

    <!--QuoteBegin-Юлия+29:08:2006, 15:15 -->
    <span class="vbquote">(Юлия @ 29:08:2006, 15:15 )</span><!--QuoteEBegin-->Может есть возможность вывести не модальное окно или вызвать обработчик еще каким хитрым способом?
    [snapback]42868" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Можно вывести не модальным окном через ws.EditDocument
    но тогда надо будет писать свои кнопки типа OK, Cancel и т.п.

    Кроме того модальности тогда не будет.
     
  5. Andre

    Andre Well-Known Member

    Регистрация:
    29 июл 2004
    Сообщения:
    108
    Симпатии:
    0
    Как вариант можно попробовать в диалоге в качестве поля для ввода использовать comboBox с установленными галками allow values not in list на второй закладке свойств поля и Run Exiting/OnChange Events after value change на третьей и обработчиком события OnChange для поля.
    Красоты особой в combobox нету, но реализовать задуманное вполне можно
     
  6. Andre

    Andre Well-Known Member

    Регистрация:
    29 июл 2004
    Сообщения:
    108
    Симпатии:
    0
    Да,еще вариант.
    Timer можно прикрутить даже к диалоговому модальному окну. Но java script'овый. Кликнуть кнопку с lotus script тоже можно. Вот и получится желаемый эффект
     
  7. Гость

    Спасибо! Сделала вариант Andre, но с DialogList.
    Возникла другая проблема.
    Мне нужно по введенному номеру найти документ и открыть его, не кликая на кнопке ОК. Документ находится на ура, но из модального окна я не могу вызвать ws.EditDocument.

    Как можно автоматически закрыть диалоговое окно из Postrecalc формы?
    Как не потерять введенное значение?

    Диалог вызывается из вьюшки.
    Других документов кроме того модального окна открывать нельзя. :)

    Буду очень признательна за любую подсказку.
     
  8. Andre

    Andre Well-Known Member

    Регистрация:
    29 июл 2004
    Сообщения:
    108
    Симпатии:
    0
    Вызвать в зависимости от условий (насколько я представляю - это нахождение документа) в событии Postrecalc Source.Close или если есть глобальный объект класса UIDocument то можно вызвать close для него.

    Не совсем только понятно зачем вызывать PostRecalc постоянным обновлением документа, но это частности

    Найденный документ можно попробовать объявить как глобальный объект и при нахождении документа инициализировать его. На событии QueryClose он еще будет существовать и там можно попробовать дернуть ws.EditDocument. Правда есть сомнения, что сработает, этот вариант не проверял, сорри.

    Показать найденный документ по условиям задачи в еще одном диалоговом окне не подойдет ?

    Вариант который сработает однозначно - это положить на форму диалога поле, в которое записывать найденный UniversalID документа, после закрытия документа диалога проверять, что вернул диалог - OK или Cancel и в случае если вернул OK - проверять еще заполнение поля хранящего UniversalID найденного документа, далее db.getDocumentByUNID и ws.EditDocument

    Сложность может возникнуть с тем, что возвращает диалог при закрытии. Возможно есть смысл отказаться от стандартных кнопок OK, Cancel и сделать свои (смотреть в сторону DialogBoxCanceled и RefreshParentNote - подробнее по созданию custom диалогов можно посмотреть тут создание custom диалога)
     
Загрузка...
Статус темы:
Закрыта.

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