Диалог с пользователем
J @Prompt( [стиль]: [NoSort]; "заголовок"; "текст";
"по_умолчанию"; "выбор"; "тип_файла")
Область применения: нельзя использовать в формулах отбора, колонок, почтовых агентов и агентов, выполняющихся по расписанию, видимости объекта и всплывающих окон. Ограниченно применима в формулах заголовка окна и формы. Не работает при установке переменной окружения NoExternalApps равной 1. В Web-приложениях не работает.
@Prompt используется для запроса информации у пользователя. Функция показывает диалоговое окно заданного стиля, с заданным заголовком и текстом, и содержащее информацию из остальных параметров. Большинство стилей предполагают однозначный ответ и возвращают его как текстовую строку. Другие стили позволяют пользователю ввести или выбрать более одного значения.
Параметр [стиль] определяет внешний вид диалогового окна. Он задается одним из приведенных в таблице ключевых слов. Ключевые слова вводятся в квадратных скобках. Параметр [стиль]
является обязательным.
Стиль | Отображает в окне | Возвращает
| |||
[Ok] | Сообщение и кнопку OK. Используется для информационных сообщений. Использует только параметры [стиль], "заголовок"
и "текст". | 1 (TRUE). | |||
[YesNo] | Сообщение и кнопки Yes и No. Позволяет принимать решение Да/Нет. Использует только параметры [стиль], "заголовок"
и "текст". | 1 (TRUE), если нажата кнопка Yes, или 0 (FALSE), если нажата кнопка No. | |||
[YesNoCancel] | Сообщение и кнопки Yes, No и Cancel. Позволяет принимать решение Да/Нет или отказаться от принятия решения. Использует только параметры [стиль], "заголовок" и "текст". | 1 (TRUE), если нажата кнопка Yes; 0 (FALSE), если нажата кнопка No; -1, если нажата кнопка Cancel. | |||
[OkCancelEdit] | Сообщение, подокно для ввода текста (с содержимым по умолчанию) и кнопки OK и Cancel. Использует только параметры [стиль], "заголовок" и "текст" и "по умолчанию". | Если нажата кнопка Ok, возвращается первые 254 байта введенного пользователем текста. Если нажата кнопка Cancel, ничего не возвращается, поскольку выполнение всей формулы завершается. | |||
[OkCancelList] | Сообщение, список значений для выбора (с отмеченным значением по умолчанию) и кнопки OK и Cancel. Пользователь выбирает только одно значение из списка. Использует пять первых параметров. | Eсли нажата кнопка Ok, возвращается выбранное пользователем значение. Eсли нажата кнопка Cancel, ничего не возвращается, поскольку выполнение всей формулы завершается. Если выбор по умолчанию в функции не был сделан, а пользователь нажал кнопку OK , не выбрав никакого элемента, возвращается число 1. | |||
[OkCancelCombo] | Сообщение, выпадающий список значений для выбора (с показанным в верхнем текстовом подокне значением по умолчанию) и кнопки OK и Cancel. Пользователь выбирает только одно значение из списка. Заметьте, что значение по умолчанию показывается только, если оно содержится в списке возможных выборов; в противном случае текстовое подокно остается пустым. Использует пять первых параметров. | Eсли нажата кнопка Ok, возвращается выбранное пользователем значение. Eсли нажата кнопка Cancel, ничего не возвращается, поскольку выполнение всей формулы завершается. Если выбор по умолчанию в функции не был сделан, а пользователь нажал кнопку OK , не выбрав никакого элемента, возвращается пустая строка. | |||
[OkCancelEditCombo] | Сообщение, выпадающий список значений для выбора (с показанным в верхнем текстовом окне значением по умолчанию) и кнопки OK и Cancel. Пользователь вводит значение или выбирает его из списка. Подобно [OkCancelEdit], но позволяет пользователю вводить значения, не указанные в списке. Использует пять первых параметров. | Eсли нажата кнопка Ok, возвращается выбранное, введенное или измененное пользователем значение. Eсли нажата кнопка Cancel, ничего не возвращается, поскольку выполнение всей формулы завершается. | |||
[OkCancelListMult] | Сообщение, список значений для выбора и кнопки OK и Cancel; пользователь выбирает одно или несколько значений из списка. Подобно [OkCancelList]. Этот стиль использует все пять параметров. | Eсли нажата кнопка Ok, возвращается список выбранных пользователем значений. Eсли нажата кнопка Cancel, ничего не возвращается, поскольку выполнение всей формулы завершается. Если выбор по умолчанию в функции не был сделан, а пользователь нажал кнопку OK , не выбрав никакого элемента, возвращается число 1. | |||
[LocalBrowse] | Окно со списком имен файлов для выбора относительно директории \NOTES\DATA и кнопки Select, Cancel и Help; пользователь выбирает одно значение из списка. Использует только параметры [стиль], "заголовок"
и "тип_файла". | Eсли нажата кнопка Select, возвращается выбранное пользователем имя файла с полным путем и расширением. Eсли нажата кнопка Cancel, ничего не возвращается, поскольку выполнение всей формулы завершается. Если пользователь нажал кнопку Select , не выбрав никакого элемента, окно остается модальным. При нажатии Help выдается соответствующий раздел из базы справки по клиентской программе. | |||
[Password] | Сообщение, подокно для ввода пароля (введенная информация в нем не отображается) и кнопки OK и Cancel. Использует только параметры [стиль], "заголовок" и "текст". | Eсли нажата кнопка Ok, возвращается введенный пользователем пароль. Eсли нажата кнопка Cancel, ничего не возвращается, поскольку выполнение всей формулы завершается. | |||
[ChooseDatabase] | Окно со списком файлов баз данных для выбора и открытия, и кнопки Open, Cancel, Select, About и Browse. Согласно документации функция с данным ключевым словом должна использовать только параметры [стиль], "заголовок" и "выбор". Из личного опыта (подтвержденного bug report) в версии R 6.0.1 параметры "заголовок"
и "выбор" работают некорректно. | Возвращает трехэлементный список (имя сервера, имя файла и заголовок базы данных. Для локальных БД в качестве имя сервера возвращается пустая строка. |
Ключевое слово [NoSort] необязательно. Если оно присутствует, то это предотвращает сортировку в алфавитном порядке значений из списка "по_умолчанию" при выводе в подокно списка или выпадающего списка диалогового окна.
Для параметра "заголовок" задается текст, который должен быть показан в заголовке диалогового окна. Заголовок окна должен быть указан всегда, если его нет - задается пустая строку "". Максимальное число символов в строке "заголовока" 65.
Для параметра "текст" задается текст сообщения, который должен быть показан внутри окна. Параметр должен быть указан всегда, за исключением [LocalBrowse] (и скорее всего [ChooseDatabase]). Если в качестве "текста" используется формула, возвращающая текстовый список, в окне будет показан только первый элемент этого списка. Чтобы показать весь список, используйте @Implode. @NewLine нельзя использовать в параметре "текст", вместо нее рекомендуется использовать @Char(13) для перевода текста
на новую строку. Максимальное число символов в строке "текст"
255.
В параметре "по_умолчанию"
определяется для вводимой пользователем строки значение по умолчанию. Это значение будет появляться в строке ввода при открытии окна; пользователь может принять его, выбирая OK, или заменить его другим значением. Значение "по_умолчанию"
предназначено для использования со всеми стилями за исключением: [Ok], [YesNo], [YesNoCancel], [LocalBrowse], [Password] (и скорее всего [ChooseDatabase]).
В качестве параметра "выбор"
задается список значений, которые нужно поместить в подокне списка диалогового окна. Список "выбор" должен указываться в следующих стилях: [OkCancelList], [OkCancelCombo], [OkCancelEditCombo] и [OkCancelListMult] (и скорее всего [ChooseDatabase]).
Параметр "тип_файла" применим только к стилю [LocalBrowse]. В этом контексте определяет текст файла для показа:
- "1" - для файлов *.nsf;
- "2" - для файлов *.ntf;
- "3" - для всех остальных файлов.
- [Shared] для отбора только общих папок;
- [Private] для отбора только личных папок, как сохраняемых в базе данных, так и в файле desktop;
- [Shared]:[Private] для отбора только общих до первого использования папок;
- [NoDesktop] для отбора всех папок, за исключением сохраняемых в файле desktop.
- если "форма" имеет общие (одноименные) поля с текущим документом, значения полей из текущего документа выводятся в диалоговом окне. Rich Text поля (несмотря на указание противного в документации) также отображаются в диалоговом окне;
- при изменении значение какого-то поля в диалоговом окне и нажатии на кнопку Ok, эти изменения будут отражены в соответствующих полях текущего документа (если, разумеется, не указан флаг [NoFieldUpdate]). Так же не передаются изменения из Rich Text полей;
- если пользователь вводит значение для поля в диалоговом окне, но текущий документ не содержит поля с таким именем, поле и значение добавляются в документ, даже если в основной форме для показа этого документа такого поля нет (если, разумеется, не указаны флаги [NoNewFields] и/или [NoFieldUpdate]).
- присвоим полю с формулой @DbCommand("Domino" ; "FolderList"; …) зарезервированное имя $$SelectDestFolder;
- разместим на этой же форме встроенный вид, у которого поднят флаг Allow selection of documents в его окне свойств на закладке Advanced;
- в окне свойств встроенного вида как элемента дизайна установить значение Using HTML для поля Display с закладки Info, и поднять флаг Show selection margin с закладки Display;
- создать акцию формы с формулой @Command([FolderDocuments]; ""; "0"). Клик по кнопке акции будет вызывать помещение выделенного во встроенном виде документа в папку, выбранную в поле $$SelectDestFolder. Если на форму встроена папка (а не вид), то для акции формы можно использовать команду @Command([FolderDocuments]; ""; "1") для перемещения, а не копирования выделенного документа.
Пример 1. Стиль [Ok].
@Prompt( [Ok]; "Напоминание";
" Не забудьте сегодня вечером выполнить резервное копирование." )
Рис. 6.14 @Prompt([Ok];…)
Пример 2. Стиль [YesNo].
@Prompt( [YesNo]; "Отправить сообщение?";
"Это сообщение будет отправлено указанным в поле " +
@Char( 13 ) + @Char( 10 ) +
"Кому, Копия и Секретная копия лицам." )
Рис. 6.15 @Prompt([YesNo];…)
Пример 3. Стиль [YesNoCancel].
@Prompt( [YesNoCancel]; "Заголовок"; "Текст в окно" )
Рис. 6.16 @Prompt([YesNoCancel];…)
Пример 4. Стиль [OkCancelEdit].
@Prompt( [OkCancelEdit]; "Введите ваше имя";
"Введите ваше имя в редактирующий элемент внизу.";
@UserName )
Рис. 6.17 @Prompt([OkCancelEdit];…)
Пример 5. Стиль [OkCancelList].
@Prompt( [OkCancelList]; "Выбрать базу данных";
"Выберите базу данных для открытия.";
"Расписание"; "Расписание" : "Телефонная книга" :
@Subset( @MailDbName; -1 ))
Рис. 6.18 @Prompt([OkCancelList];…)
Пример 6. Стиль [OkCancelCombo].
@Prompt( [OkCancelCombo]; "Выбрать базу данных";
"Выберите базу данных для открытия.";
"Расписание"; "Расписание" : "Телефонная книга" :
@Subset( @MailDbName; -1 ))
Рис. 6.19 @Prompt([OkCancelCombo];…)
Пример 7. Стиль [OkCancelEditCombo].
@Prompt( [OkCancelEditCombo]; "Выбрать базу данных";
"Выберите базу данных для открытия или введите
ее название."; "Расписание"; "Расписание" :
"Телефонная книга" : @Subset ( @MailDbName; -1 ))
Рис. 6.20 @Prompt([OkCancelEditCombo];…)
Пример 8. Стиль[OkCancelListMult].
@Prompt( [OkCancelListMult]; "Выбрать имя";
"Выберите одно или более имен получателей этого
запроса."; "Елена Наумова"; "Елена Наумова" :
"Андрей Ефремов" : "Борис Иванов" : "Леонид Решко" )
Рис. 6.21 @Prompt([OkCancelListMult]; …)
Пример 9. Стиль[Password].
@Prompt( [Password]; "Пароль"; "Скажи пароль" ;
"пароль"; "пароль" )
Рис. 6.22 @Prompt([Password];…)
Пример 10. Стиль [LocalBrowse]
@Prompt( [LocalBrowse]; "Выбор файла"; "1" )
Рис. 6.23 @Prompt([LocalBrowse]; …)
Пример 11. Стиль [ChooseDatabase]
@Prompt( [ChooseDatabase]; ""; "" )
Рис. 6.24 @Prompt([ChooseDatabase]; ...)
@PickList( [Custom] : [Single]; "сервер":
"база_данных"; "вид"; "заголовок"; "текст";
номер_столбца; "ключ" )
@PickList( [Name] : [Single] )
@PickList( [Room] )
@PickList( [Resource] )
@PickList( [Folders] : [тип_папки] : [Single]; "сервер"
: "база_данных" )
Область применения: нельзя использовать в формулах отбора, колонок, почтовых агентов и агентов, выполняющихся по расписанию, видимости объекта, заголовка окна, всплывающих окон и формы. Не работает при установке переменной окружения NoExternalApps равной 1. В Web-приложениях не работает.
Вариант @PickList( [Custom];…) выдает модальное диалоговое окно, в котором выводится содержимое базы данных "сервер" : "база_данных" по указанному "виду".
В этом модальном окне пользователь может выбрать (отметить) один или более документов при первом параметре - [Custom], или только один документ при первом параметре - [Custom] : [Single]. Функция @PickList возвратит значение из указанного столбца "номер_столбца" этого "вида"
для выбранных документов.
Двухэлементный текстовый список "сервер" : "база_данных" определяет сервер и файл базы, из которой выбирается вид. Если задать элемент "сервер" равным "", будет предполагаться, что база расположена локально. Если вместо двухэлементного списка задать "", вид будет выбран из текущей базы. В случае если первый параметр [Custom] можно в качестве аргумента "сервер" : "база_данных" задавать значение идентификатора реплики, например "85255CEB:0032AC04" (как одну текстовую строку, а не список из двух элементов), подобно тому, как это допускается в функциях @DbColumn и @DbLookup. Параметр "вид" - текстовая строка, содержащая имя открываемого в диалоговом окне вида.
Параметр "заголовок" задает текст, выводимый в заголовок диалогового окна, а "текст" - текст, выводимый в само диалоговое окно.
Числовой параметр номер_столбца задает номер столбца в виде, из которого функция будет выбирать значения. Обратите внимание, что в отличие от функций @DbColumn и @DbLookup номер столбца для @PickList не зависит от формулы для этого столбца, все столбцы пронумерованы слева направо начиная с единицы.
Параметр "ключ" необязателен, при его задании в виде показываются только те документы, которые содержат значение ключ в первой отсортированной и обязательно категоризованной колонке данного вида. По поводу данного параметра следует сделать замечание. По синтаксису данный параметр должен иметь текстовой тип (синтаксический анализатор не дает сохранить формулу с другим типом данных). Однако если значение в колонке имеет другой тип данных (например, числовой или дата-время), а параметр имеет аналогичное значение преобразованное к тексту, то функция работает некорректно.
При использовании параметра "ключ"
функция @PickList не кеширует информацию в отличие от @DbColumn и @DbLookup, поиск осуществляется каждый раз при новом вызове функции.
Размер возвращаемых функцией данных имеет точно такие же ограничения что и у функций @DbColumn и @DbLookup. Обратите внимание, что это ограничения только на размер возвращаемых значений по кнопке Ok (обычно актуально при множественном выборе), сама же функция @PickList имеет доступ ко всем данным вида.
При отображении календарного вида в рамках @PickList, последний выводится без слота времени и в формате отображающем два дня календаря, включая текущий. Пользователь в дальнейшем может изменить формат отображения, а также осуществлять навигацию по календарю.
Вариант @PickList( [Name] : [Single] ) выводит диалоговое окно, содержащее информацию из доступных адресных книг. Пользователь может выбрать одно или более лиц, групп или серверов, а функция @PickList вернет выбранные им имена. Ключевое слово [Single] не обязательно. Оно указывает, что разрешен выбор только одного имени.
Варианты @PickList( [Room] ) и @PickList( [Resource] ) выдают диалоговые окна с информацией о ресурсах и комнатах из доступных адресных книг.
Вариант @PickList( [Folders] : [тип_папки] : [Single]; "сервер" : "база_данных" ) выводит диалоговое окно, содержащее информацию об имеющихся папках в "базе_данных".
Пользователь может выбрать одну или более папок, а функция @PickList вернет выбранные им имена. Ключевое слово [Single] не обязательно.
Параметр [тип_папки] необязателен, и может принимать одно следующих значений:
Если параметр [тип_папки] опущен, выводятся все папки.
Пример 1. Формула кнопки позволяет пользователю выбрать папку, в которую надо поместить текущий документ.
choice := @PickList( [Folders]; "" );
@AddToFolder( choice; "" )
Рис. 6.25 Пример окна @PickList([Folder])
Пример 2. Формула кнопки позволяет пользователю выбрать список пользователей, групп и серверов в качестве значения поля person.
FIELD person := person;
@SetField( "person"; @PickList( [Name] ) )
Рис. 6.26 Пример окна @PickList([Name])
Пример 3. Формула открывает вид Otdel из базы с идентификатором реплики "C32566DC:00520B5F" в диалоговом окне. Предположим, пользователь отметил в окне документ, для которого во второй колонке вида отображается "Тома Р.О.". Временная переменная choice получит значение: "Тома Р.О.".
сhoice :=@PickList( [Custom] : [Single]; "C32566DC:00520B5F"; "Otdel"; "Выбор сотрудника"; "Выберите сотрудника"; 2 );
Рис. 6.27 Пример окна @PickList([Custom]:[Single];...)
Пример 4. Выводит диалоговое окно с информацией о имеющихся комнатах из адресных книг.
@PickList( [Room] );
Рис. 6.28 Пример окна @PickList( [Room] )
Пример 5. Выводит диалоговое окно с информацией об имеющихся ресурсах из адресных книг.
@PickList( [Resource] );
Рис. 6.29 Пример окна @PickList( [Resource] )
J @DialogBox( "форма"; [AutoHorzFit] : [AutoVertFit] :
[NoCancel] : [NoNewFields] : [NoFieldUpdate] :
[ReadOnly] : [SizeToTable] : [NoOkCancel] :
[OkCancelAtBottom]; "заголовок" )
Область применения: нельзя использовать в формулах отбора, колонок, агентов выполняющихся на сервере (почтовые и по расписанию), заголовка окна и формы. Не возвращает данные из RTF-полей. Не работает при установке переменной окружения NoExternalApps равной 1. В Web-приложениях не работает.
Открывает в модальном диалоговом окне текущий документ по указанной форме "форма". Пользователь получает возможность работы с документом в диалоговом окне, причем он не может переключиться в другое окно Notes, пока не закроет этот диалог кнопкой OK или Cancel.
Ключевые слова [AutoHorzFit] и [AutoVertFit]
не обязательны, указываются в случае, если форма представляет собой область размещения (layout region), и диалоговое окно следует "подгонять" под размеры области размещения по горизонтали и (или) по вертикали. Такая возможность может использоваться с любой формой, но она особенно полезна с формами, которые содержат одну область размещения, потому что пользователь может работать с этой областью, как с диалоговым окном. Однако если в форме присутствует более одной области размещения, в диалоговом окне будет выведена только первая область.
Рис. 6.30 Пример формы c областью размещения в диалоговом окне
Параметр [NoCancel] не обязателен, указывается в случае необходимости, подавления в диалоговом окне кнопки Cancel.
Параметр [NoNewFields] не обязателен, указывается, когда нужно не добавлять в текущий документ поля, которые есть в "форме", но нет в исходной форме.
Параметр [NoFieldUpdate] не обязателен, указывается, когда нужно не переносить изменения из полей "формы" в текущий документ. Используется обычно в случае, если значения из этих полей переносятся в другое место (например, по событию QueryClose "формы")
Параметр [ReadOnly] не обязателен, указывается в случае необходимости запрета ввода информации в поля диалогового окна (например, при выводе справки). Используется вместе с ключевым словом [NoCancel].
Параметр [SizeToTable]
не обязателен, указывается в случае необходимости “подгонки“ диалогового окна под размеры первой таблицы в "форме". Используется только совместно с флагами [AutoHorzFit] и [AutoVertFit]. Из опыта следует заметить, что правильно подгоняются только таблицы в стандартном интерфейсе (т.е. не таблицы с закладками и т.д.).
Параметр [NoOkCancel] не обязателен, указывается в случае необходимости подавления вывода кнопки Ok. Рекомендуется использовать совместно с флагом [NoCancel]. В этом случае для передачи данных из модальной формы в основную можно использовать гиперобъект (например, кнопка) модальной формы с @-командой [RefreshParentNote].
В R 6 появился еще один необязательный параметр [OkCancelAtBottom], позволяющий осуществить вывод кнопок Ok и Cancel (если они присутствуют) в строчку в правом нижнем углу диалогового окна.
Параметр "заголовок" не обязателен, указывается для изменения заголовка окна со стандартного "Lotus Notes" на "заголовок".
Явное возвращаемое значение у функции отсутствует.
При работе с одним и тем же документом по разным формам действуют следующие соглашения:
Пример 1. Форма с именем Profile содержит кнопку с формулой
@DialogBox( "Profile Options"; [AutoHorzFit] : [AutoVertFit] ; "Модальное окно" )
Предположим, что в обеих формах Profile и Profile Options присутствует поле Comments, но вторая форма представляет собой область размещения и специально создана для удобства редактирования поля Comments. Пользователь, находясь в режиме редактирования документа (по форме Profile), нажимает рассматриваемую кнопку. Документ открывается в диалоговом окне по форме Profile Options. После редактирования новое значение поля Comments "поступает" в документ.
Пример 2. Формула, демонстрирует “подгонку“ диалогового окна под первую таблицу в форме “Form1“, а также действие флага [OkCancelAtBottom].
@DialogBox("Form1";[AutoHorzFit] : [AutoVertFit] :
[SizeToTable] : [OkCancelAtBottom] ;"Пример
\"подгонки\" @DialogBox под таблицу" )
Рис. 6.31 «Подгонка» диалогового окна под размеры таблицы
J @StatusBar( строка )
@StatusBar( список_строк
)
Область применения: предназначена для использования только в формулах кнопок панели инструментов, заголовка окна, гиперобъектов, полей, акций видов и формы, а также навигатора. В Web-приложениях не работает.
Выводит в строку состояния клиента Notes сообщение, состоящее из строки, или если параметр представляет собой список строк, то выводится несколько сообщений, каждое из которых состоит из одного элемента списка_строк.
Пример. Выводит сообщение в строку состояния.
@StatusBar("Обрати внимание – на мои страдания");
Рис. 6.32 Пример работы @StatusBar
@DbCommand( "Domino"; "ViewPreviousPage")
@DbCommand( "Domino"; "ViewNextPage")
J @DbCommand( "Domino"; "FolderList"
[;"заголовок"[;"список_исключений" ]] )
Область применения: в DOMINO R 6.0.1 ДОКУМЕНТИРОВАНА НЕ ПОЛНОСТЬЮ. Разрешается использовать только в Web-приложениях.
В первом варианте синтаксиса организует ссылку на предыдущий документ в виде, во втором на последующий. Третий вариант новый в R 6, при использовании в формулах полей типа список выводит имена доступных из-под Web-папок. Необязательный параметр заголовок определяет первый элемент получаемого списка. Если список доступных папок пуст, то заголовок
не выводится. Список_исключений может задавать имена папок (то же в виде списка), которые не будут отображаться в результирующем списке. Данная команда может использоваться совместно с функцией @AddToFolder для помещения текущего документа в выбранную папку.
Пример. Под Web доступны папки с именами Folder1, Folder2 и Folder3. Нижеприведенная формула, используемая в формуле поля, выдаст список доступных папок за исключением Folder2 (см. Рис. 6.33).
@DbCommand("Domino" ; "FolderList" ; "Выберите папку";"Folder2")
Рис. 6.33 Вариант выбора папок через @DbCommand("Domino" ; "FolderList")
В вышеприведенном примере можно было добавить на форму акцию (либо кнопку), которая помещает текущий документ в выбранные в поле My_folders папки. Формула этой кнопки может быть следующая:
@If(
@IsNewDoc; "";
My_folders = ""; "";
@Count(My_folders)=1; @AddToFolder(My_folders;"");
@Transform(My_folders; "x"; @AddToFolder( x; ""))
)
Существует еще один способ помещения документов в папку с использованием @DbCommand("Domino" ; "FolderList"; …). Это достигается следующим образом:
Про описанный выше метод следует уточнить, что работает он только для первого выбранного во встроенном виде документа, а также только для первой выбранной папки в поле $$SelectDestFolder (при поднятом флаге Allow multiple values).