вопрос по Dialgbox

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

  1. NeoSimvolist

    NeoSimvolist Гость

    В общем, ситуация такая:
    - Вызываю диалог:
    if ws.DialogBox("dlgCreateUser",True,True,True,False,False,False,"Реквизиты пользователя",dDlgCreateUser,True,True) then
    end if
    - На форме dlgCreateUser есть две кнопочки с типом "OK", "Cancel".

    Я хочу:
    Кнопочку типа "OK" сделать типа "Normal".
    И хочу написать код на эту кнопочку. Н-р поля на форме заполненные корректно то кнопочка срабатывает как OK, если не корректно заполнены, то кнопка не срабатывает.
    Вопрос:
    Как в контексте диалога симулировать нажатие OK на LS?
     
  2. nayke

    nayke Well-Known Member

    Регистрация:
    4 авг 2010
    Сообщения:
    310
    Симпатии:
    0
    Может я вас неправильно понял и вы хотите использовать именно свои кнопки. Но вообще в dialogBox есть стандартные Ок и Cancel, чтобы их отобразить нужно поставить свойство noOkCancel в false при вызове dialogbox.

    flag = notesUIWorkspace.DialogBox( form$ , [autoHorzFit] , [autoVertFit] , [noCancel] , [noNewFields] , [noFieldUpdate] , [readOnly] , [title$] , [notesDocument] , [sizeToTable] , [noOkCancel] , [okCancelAtBottom] )

    при этом код после нажания ОК необходимо описывать между if и then.
     
  3. NeoSimvolist

    NeoSimvolist Гость

    нет. Я нарочно скрыл стандартные кнопки. Мне нужно именно то что я написал.
    Например в Delphi можно форме вернуть ModalResult = mrOK.
    Можно ли на LS сделать также?
     
  4. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Почитай про notesUIWorkspace.RefreshParentNote()
     
  5. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Не знаю.. я пользуюсь стандартными кнопками DialogBox'a
    И весь нужный код пишу в событиях формы или после вызова диалога.
    Причем диалог можно вызвать только с кнопкой Ok. Делов-то
     
  6. NeoSimvolist

    NeoSimvolist Гость

    при чем здесь notesUIWorkspace.RefreshParentNote
    <_<
     
  7. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Чтобы кнопочка типа "Normal" сработала как кнопочка типа "ОK" и DialogBox вернул True нужно сделать notesUIWorkspace.RefreshParentNote.
    Хотя не понятно, почему не поставить кнопке тип "OK".
     
  8. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    Я думаю имелось ввиду Source.DialogBoxCanceled

    Код (LotusScript):
    Sub Queryclose(Source As Notesuidocument, Continue As Variant)
    If Not Source.DialogBoxCanceled Then Continue = QSCorrect_DIALOG(Source.Document)
    End Sub
    В функции QSCorrect_DIALOG делай проверку на корректность заполнения формы)
     
  9. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.082
    Симпатии:
    300
    на JS проверять и жать нужную кнопку... (например)
     
  10. NeoSimvolist

    NeoSimvolist Гость

    То что доктор прописал. Спасибо большое.
    Тема закрыта!
     
  11. Eugen

    Eugen Well-Known Member

    Регистрация:
    22 мар 2012
    Сообщения:
    172
    Симпатии:
    0
    Добрый день.

    Дабы не плодить тем, спрошу тут:
    есть ли у dialoxbox`a еще свойства, кроме DIALOGBOXCANCELED?

    мне нужно, чтобы моя кнопка в dialogbox`e отрабатывала как ОК, Ок и Cancel я скрыл, и чтобы крестиком его закрыть тоже нельзя было. На кнопке висит такой код:
    @SetEnvironment("ClientType"; "Зарплатный клиент");
    FIELD ClientType:="Зарплатный клиент";
    @Command( [RefreshParentNote]);
    @Command([FileCloseWindow])

    На Queryclose поставил заглушку:
    Код (LotusScript):
        If source.DIALOGBOXCANCELED Then
    Continue=False
    End If
    В итоге получается, что нажатие моей кнопки отрабатывает как cancel, а dialogbox обязательно надо зыкрыть. Подскажите, может его модно закрыть как то по другому?
     
  12. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    На моей кнопке "ОК" висит только:
    @Command([RefreshParentNote]);
    @Command([FileCloseWindow])

    DialogBox при этом возвращает True.

    вызов на LS делаю:
    Код (LotusScript):
        res = ws.DialogBox(tmpDoc.GetItemValue("Form")(0),True,True,True,False,False,False,"Выберите сотрудников",tmpDoc,True,True)
    If Not res Then Goto endh
     
  13. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Т.е. Ок и Cancel/крестик должны выполнять одно и то же?
    В параметрах вызова диалогбокса можно оставить одну кнопку и весь код написать на Queryclose.
     
  14. Eugen

    Eugen Well-Known Member

    Регистрация:
    22 мар 2012
    Сообщения:
    172
    Симпатии:
    0
    Нет. У меня [NoCancel] и [NoOkCancel] стоит True. Крестик не должен работать, а моя кнопка должна писать переменную в notes.ini, закрывать dialogbox и возвращать True.
     
  15. Eugen

    Eugen Well-Known Member

    Регистрация:
    22 мар 2012
    Сообщения:
    172
    Симпатии:
    0
    а кроме @Command([FileCloseWindow]), еще как то можно закрыть dialoxbox?

    Добавлено:
    Сейчас сделал так:
    На кнопке:
    FIELD ClientType:="Зарплатный клиент";
    @Command( [RefreshParentNote]);
    @Command([FileCloseWindow])
    На Queryclose:
    Код (LotusScript):
    Sub Queryclose(Source As Notesuidocument, Continue As Variant)
    If source.DIALOGBOXCANCELED Then
    Messagebox("Сработало как отмена!")
    'Continue=False
    End If
    End Sub
    каждый раз моя кнопка почему то отрабатывает как Cancel. :mellow:
     
  16. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Eugen
    Не валяйте дурака, укажите в параметрах диалога отображать стандартную кнопку Ok, а на QC диалога:
    <!--shcode--><pre><code class='ls'>Sub Queryclose(Source As Notesuidocument, Continue As Variant)
    If Source.DialogboxCanceled Then
    Continue = False
    Exit Sub
    End If

    'Ваш код, который должен срабатывать по Ok
    Const IN_CLIENTTYPE = "ClientType"
    Const IV_CLIENTTYPE = "Зарплатный клиент"

    Dim ns As New NotesSession
    Call ns.SetEnvironmentVar(IN_CLIENTTYPE, IV_CLIENTTYPE)

    Call Source.Document.ReplaceItemValue(IN_CLIENTTYPE, IV_CLIENTTYPE)

    'правда зачем эта ерунда нужна непонятно
    Dim nuiws As New NotesUIWorkspace
    Call nuiws.RefreshParentNote()
    End Sub[/CODE]Код запишет переменную в notes.ini и поле "ClientType" в tmpDoc вызывающего скрипта.
     
  17. Eugen

    Eugen Well-Known Member

    Регистрация:
    22 мар 2012
    Сообщения:
    172
    Симпатии:
    0
    Сделал по другому:
    Код (LotusScript):
    Sub Queryclose(Source As Notesuidocument, Continue As Variant)
    If source.document.ClientType(0)="" Then
    If source.DIALOGBOXCANCELED Then
    Messagebox("Укажите тип клиента!")
    continue=False
    End If  
    End If
    End Sub
     
  18. beloff

    beloff Well-Known Member

    Регистрация:
    24 июл 2012
    Сообщения:
    103
    Симпатии:
    0
    так то же самое можно было прописать и в коде на dialogbox

    step1:
    flag = dialogbox ..
    if flag = false then exit sub нажат канцел

    потом проверку уже в документе утсроить если какое то поле не заполнено goto step1

    или я чего то недопонял?
     
  19. Eugen

    Eugen Well-Known Member

    Регистрация:
    22 мар 2012
    Сообщения:
    172
    Симпатии:
    0
    Я это и сделал на форме, которая подкладывается в dialogbox
     
  20. Anonimous

    Anonimous Well-Known Member

    Регистрация:
    15 июн 2012
    Сообщения:
    120
    Симпатии:
    0
    Также, чтоб не плодить тем. Кто обновлялся до версии Лотуса 8.5.3 ?
    У меня вот тоже вопрос по dialogbox, но несколько другого рода.
    В документе есть кнопка, которая вызывает dialogbox заданной формы. В диалоге Чекбоксы, значения которых добавляются из значений поля основной формы. Мы должны выбрать в диалоге одно или несколько значений, чтоб создать новый документ в другой базе и вставить их в него
    Код кнопки

    Dim session As New NotesSession
    Dim ws As New NotesUIWorkspace

    'БД, в которой создадим новый документ на основе значений, выбираемых в диалоге
    Dim eval As Variant
    eval = Evaluate({v := @DbLookup ("":"" ; @Environment("INTSwitch" + "S":"F");"DBLookup";"INTIncomingAccounts";"Address"); @If(@IsError(v); ""; v);})
    If eval(1) = "" Then Msgbox {Список недоступен.}: Exit Sub
    Set dbIncomingAccount = session.GetDatabase(eval(0), eval(1))


    ' Документ диалога
    Dim docTemp As NotesDocument

    Set docTemp = session.CurrentDatabase.CreateDocument

    ' Берем поле NameMTR из основной формы, которое имеет множественное значение. Импортируем его значения в поле Results диалога, типа Checkbox - для выбора в нем значений и создания нового документа

    docTemp.ReplaceItemValue "NameMTR", docCur.GetItemValue("NameMTR")

    If ws.DialogBox("DialogChooseComp",True ,True ,, , , , "", docTemp, True, , True) Then

    'Если в диалоге не нажали Cancel, создаем новый документ в другой БД
    Dim docIncomingAccount As New NotesDocument (dbIncomingAccount)

    With docIncomingAccount
    .ReplaceItemValue "Form", "IncomingAccount"
    ...
    .ReplaceItemValue "NameMTR", docTemp.GetItemValue("SelectMTR")

    End With

    ws.CurrentDocument.Save

    ws.CurrentDocument.Close True
    'Конец - Открываем на редактирование созданный документ, в котором будут значения, выбранные в диалоге
    '-----------------------------------------------------------------------------------------------------------------------------
    ws.EditDocument True, docIncomingAccount
    End If

    End Sub

    В самом диалоге поле только одно - чекбокс Results , в котором выбираем значения. Используем для них формулу

    @Word(NameMTR;"|";2), где значения NameMTR мы добавили из основной формы при вызове диалога

    В событии QueryClose диалога код такой

    If Source.DialogboxCanceled Then Exit Sub
    Dim ws As New NotesUIWorkspace
    Dim session As New NotesSession
    Dim docCur As NotesDocument
    Set docCur=ws.CurrentDocument.Document
    If docCur.GetItemValue("Results")(0)="" Then
    Msgbox {Пожалуйста, выберите хотя бы одно значение.}
    Continue=False
    End If

    vNameMTR = Evaluate({@Trim(Results)},docCur)


    docCur.ReplaceItemValue "SelectMTR", Fulltrim(vNameMTR)

    End Sub

    Далее открывается созданный новый документ с выбранными значениями.
    В версии 8.5.2 было все нормально. А вот в версии 8.5.3 открываю этот диалог, выбираю некоторые значения - а в созданном документе они все отображаются!
    С помощью msgbox-в понял, что при закрытии диалога событие QueryClose формы диалога не срабатывает, как и событие ее поля onChange (я пихал код туда). События диалоговой формы вообще не срабатывают! У кого-то бывал такой глюк? Заранее спасибо
     
Загрузка...
Похожие Темы - вопрос по Dialgbox
  1. ApplePen
    Ответов:
    0
    Просмотров:
    76
  2. gURaBA_N
    Ответов:
    3
    Просмотров:
    94
  3. kartaman
    Ответов:
    0
    Просмотров:
    128
  4. Peter
    Ответов:
    4
    Просмотров:
    524
  5. di0d_
    Ответов:
    1
    Просмотров:
    441

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