Войти
 
 
   
 
  
Новости Notes.ру Библиотека Биржа труда Вопрос - ответ Форум Регистрация Поиск О проекте
Разделы
О Notes
Советы
Шаблоны и примеры
Литература
Презентации
 
Всё о задаче AdminP. Часть вторая   Во второй части мы завершаем рассмотрение AdminP. В ней рассмотрены запросы междоменного администрирования и способы управления функциями AdminP с помощью настроек документа сервера, команд консоли сервера, файла Notes.ini и интервалов очистки базы данных. В этой статье предполагается, что вы опытный администратор Domino и прочитали первую часть
О Notes Читать статью
 
Всё о задаче AdminP. Proxy-действия в R5 и Domino 6   Приложение к статье об административном процессе
О Notes Читать статью
 
Всё о задаче AdminP. Часть первая   Перевод классической статьи 2003-его года о задаче административного процесса (AdminP). Очень полезна для понимания работы механизма этой задачи. В первой части статьи описаны компоненты задачи AdminP, как они работают, и как их использование помогает сделать работу администратора Domino проще. Задача AdminP (сакращённо от Administration Process, Административный процесс) работает с базой административных запросов (Administration Requests, admin4.nsf)
О Notes Читать статью
 


Советы

Главная   Библиотека   Советы

Создание диалогового окна

Николай Норкин,
Вятские Информационные Технологии, Киров
Открытие диалоговых окон
Для вызова диалоговых окон, использующих форму, задаваемую разработчиком, применяются формула @-языка @DialogBox и метод класса notesUIWorkspace DialogBox
Автор редко использует формулу @-языка, предпочитая ей работу с кодом LotusScript по двум причинам:
- возможность открыть диалоговое окно не только с текущим документом, но и с любым, чаще даже не сохраняемым в базе - временным, документом
- возможность более гибкой обработки как предваряющей открытие диалога, так и оперирующей с его результатами

Вот пример стандартного кода, предшествующего открытию окна
Sub Click(Source As Button)
' Объявление и инициализация объектов, если эти объекты не были объявлены и инициализированы глобально
' Объекты классов пользовательского интерфейса (UI)
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = workspace.CurrentDocument

' Объекты back-end классов
Dim session As NotesSession
Dim curdb As NotesDatabase
Dim curdoc As NotesDocument

Set session = New NotesSession
Set curdb = session.CurrentDatabase
Set curdoc = uidoc.Document

' объект временного документа, открываемого в диалоговом окне
Dim tempdoc As NotesDocument
Set tempdoc = curdb.CreateDocument
' передача в документ необходимых значений
' списка для выбора
Set item = tempdoc.ReplaceItemValue("List1", list1)
' списка ранее выбранных значений
Set item = tempdoc.ReplaceItemValue("List2", list2)
...........


Вызов метода DialogBox, открывающего диалог
Call workspace.DialogBox("forDialog", True, True, True, False, False, False, "Выбрать", tempdoc, True, True)

Для придания диалогу более презентабельного, с точки зрения автора, дизайна, метод вызывается со следующими значениями передаваемых параметров:
autoHorzFit = True, autoVertFit = True, noCancel = True, [...] readOnly = False, [....] sizeToTable = True, noOkCancel = True)

Проектирование формы для диалогового окна
В свойствах формы указывается имя формы (в примере используется имя forDialog), снимаются оба флага в секции Доступ первой закладки окна свойств, также выбирается цвет фона диалогового окна
Поле диалогового окна задает внешняя таблица (рис. 1)
Вне таблицы располагается скрытое поле вычисляемое при создании SaveOptions со значением "0"
Внутри таблицы два поля, с которыми и предстоит работать пользователю:
Поле List1View - список для выбора элементов (для первой задачи выбираются следующие свойства поля: Список, Изменяемое, не-многозначное, формула значений: List1)

Поле List2View - список выбранных элементов (свойства поля: Список, Изменяемое, не-многозначное, формула значений: List2, Обновлять список при обновлении документа)
До того, как продолжить размещение элементов в форме, следует обратить внимание на одну "неприятную" особенность проектируемого диалогового окна - оно будет закрываться при нажатии клавиши Enter в окнах списков
Поэтому предлагается обрабатывать эту ситуацию в событие QueryClose документа
Итак, объявляем глобальные переменные в разделе (Globals) формы:
Dim workspace As NotesUIWorkspace
Dim uidoc As NotesUIDocument

Dim session As NotesSession
Dim curdb As NotesDatabase
Dim curdoc As NotesDocument

Dim hasClose
Инициализируем их в событии QueryOpen
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
Set workspace = New NotesUIWorkspace
Set uidoc = Source

Set session = New NotesSession
Set curdb = session.CurrentDatabase
Set curdoc = uidoc.Document
End Sub
И обрабатываем событие QueryClose
Sub Queryclose(Source As Notesuidocument, Continue As Variant)
If uidoc.DialogboxCanceled Then Exit Sub
If hasClose Then Exit Sub
Continue = False
End Sub
При этом закрытие диалога осуществляется при нажатии клавиши Esc или крестика в правом верхнем углу окна (свойство notesUIDocument.DialogCanceled имеет значение True) или если глобальная переменная hasClose примет это значение
Переменную hasClose изменяет код в кнопках Отправить и Изменить, которые отличаются лишь одной строкой, обновляющей объект tempdoc в коде документа основного окна приложения
Sub Click(Source As Button) ' Кнопка Отправить
hasClose = True
Call workspace.RefreshParentNote()
Call uidoc.Close
End Sub

Sub Click(Source As Button) ' Кнопка Отменить
hasClose = True
Call uidoc.Close
End Sub

Обработка результатов диалога
Возвращаемся к коду основного документа и получения списка выбранных значений из поля List2
Sub Click(Source As Button)
......
Call workspace.DialogBox("forDialog", True, True, True, False, False, False, "Выбрать", tempdoc, True, True)
If Not tempdoc.hasItem("SaveOptions") Then Exit Sub ' Проверка обновления объекта (закрытия по кнопке Отправить - Ok) может сводиться к проверке на наличие полей, не размещенных во временном документе до вызова окна диалога, но присутствующих в форме окна
list2 = tempdoc.GetItemValue("List2")
End Sub

Далее: Размещение элементов выбора и упорядочивания списка >>>

Читайте также: Java-апплет для визуализации графических объектов. Новая версия апплета от Михаила Чолокова поддерживает работу с графическими файлами формата TIFF >>>
 
  Опубликовано — 11/24/2003 |    

Автор, 25.11.2003:
To Constantin: Спасибо... Постарался избавить Вас от иллюзий... :-))

Constantin, 25.11.2003:
А во вступительном "пример стандартного кода, предшествующего открытию окна" End Sub лучше убрать IMHO. А то создается иллюзия, что "Вызов метода DialogBox, открывающего диалог" находится ВНЕ этой Sub



Добавить комментарий
Имя * :
e-mail
Комментарий * :
Код подтверждения * :


Мероприятия
Пресс-релизы
Биржа труда
Последнее на форуме
 
А так же:
Как удалить профиль?
16.04.2016 00:08:51
Скопировать в буфер поле документа
24.05.2015 08:55:52
Импорт DXL-описания документов в Lotus Domino. Одноимённые поля
16.04.2015 16:49:58
 
© LOGOSPHERE.RU