- •Введение
- •Синтаксис формул
- •Лексические элементы формул
- •Переменные
- •Предопределенные поля
- •Временные переменные
- •Константы
- •Операторы выполнения операций
- •Порядок выполнения вычислений
- •Ключевые слова
- •Функции
- •Побочные эффекты
- •Ограничения применимости @-функций и команд, налагаемые списком управления выполнением (ecl)
- •Ограничения применимости @-функций и команд для Web-приложений
- •Как выполняются формулы
- •Порядок выполнения
- •Формулы, возвращающие значения
- •Формулы, выполняющие последовательность действий
- •Выполнение формул, содержащих вызовы @-команд
- •Обработка ошибок в формулах
- •Описание @-функций Domino
- •Функции - базовые конструкции языка формул
- •Функции выполнения циклов
- •Функции определения и преобразования типов данных
- •Функции для работы со строками
- •Определение вхождения подстроки в строку
- •Выделение и замена части строки
- •Функции для работы со значениями типа "дата-время"
- •Функции, работающие с компонентами значения типа "дата-время"
- •Функции для работы с численными значениями
- •Функции для работы со списками
- •Работа с переменными окружения
- •Установка значения временной переменной
- •Функции для работы с текущим документом
- •Определения свойств, характеристик и состояния текущего документа
- •Операции с полями
- •Операции с документом
- •Функции для работы с паролями
- •Функции для работы с почтой
- •Функции, определяющие почтовые настройки
- •Работа с идентификаторами документов
- •Получение информации из баз данных Domino
- •@DbColumn - выбор значений из колонки
- •@DbLookup - выбор из колонки или поля значений по ключу
- •Получение информации из баз данных, поддерживающих odbc-драйверы
- •Функции для работы с видами
- •Функции, используемые в формулах отбора документов
- •Функции, используемые в формулах колонок
- •Функции, работающие с именами пользователей
- •Функции, работающие с правами доступа
- •Функции, работающие с профильными документами
- •Функция выбора требуемого фрейма
- •Диалог с пользователем
- •Функции, определяющие тип и характеристики используемого программного обеспечения
- •Функции, используемые в Web-приложениях
- •Информационные функции
- •Функции для обработки ошибок
- •Описание @-команд Domino
- •Команды для работы с текущим и выделенными документами
- •Команды открытия объектов
- •Команды для работы с профильными документами
- •Команды обновления отображаемой информации
- •Команды для работы с видами и папками
- •Команды запуска приложений
- •Команды для работы с почтой
- •Алфавитный список @-функций
- •Алфавитный список @-команд
- •Разработка тестовых приложений
- •Простые операции с документами
- •Создание нового документа по форме
- •Редактирование текущего документа
- •Удаление документа
- •Печать документа и вида
- •Упражнение
- •Формулы полей
- •Упражнение
- •Получения доступа к данным, находящимся вне текущего документа
- •Доступ к данным вида
- •Наследование
- •Функция @DialogBox
- •Функция @PickList
- •Формулы скрытия информации
- •Формулы скрытия абзаца формы
- •Формулы скрытия акций формы и вида
- •Формулы скрытия столбцов вида и строк аутлайна
- •Упражнение
- •Формулы работы с видами
- •Формула отбора документов
- •Формулы столбцов вида
- •Наложения фильтра на вид
- •Работа с почтой
- •Работа с именами пользователей
- •Работа с уровнями доступа
- •Блокировка документов на редактирование
- •Операции с папками
- •Функции, используемые в Web-приложениях
- •Формулы по месту применения
- •Формулы панели инструментов - Toolbar button
- •Формулы агентов
- •Формула секции с управляемым доступом
- •Остальные функции
- •Литература
- •1 Введение 3
- •2 Синтаксис формул 5
- •3 Лексические элементы формул 6
- •4 Как выполняются формулы 30
- •5 Обработка ошибок в формулах 36
- •6 Описание @-функций Domino 39
- •11 Литература 412
-
Получение информации из баз данных Domino
-
@DbColumn - выбор значений из колонки
-
@DbColumn( "класс": "тип_кеша"; "сервер":
"база_данных"; "вид"; колонка )
Область применения: нельзя использовать в формулах отбора и колонок. Ограниченно применима в формулах всплывающих окон. Возвращаемое значение не должно превышать 64 Кбайта. Не работает при установке переменной окружения NoExternalApps равной 1.
Находит и возвращает колонку значений из вида или папки в текущей базе или другой базе данных Domino. Если значений несколько, они возвращаются как список.
Основным назначением @DbColumn являются формулы ключевых слов. @DbColumn позволяет динамически извлекать список значений из вида базы данных вместо задания фиксированного списка ключевых слов с его последующим обновлением путем редактирования формы, содержащей поле с ключевыми словами.
@DbColumn может возвращать не более 64 Kб данных. Для определения количества элементов данных, которые могут быть возвращены @DbСolumn, используются следующие соотношения:
-
если возвращается текст: 2 + (2 * количество возвращаемых записей) + общий размер текста во всех элементах
-
если возвращаются числа или даты: 6 + 10 * количество возвращаемых элементов
"Класс" используется для указания типа базы, из которой извлекаются данные. База данных Domino указывается как "" или "Notes".
Параметр "тип_кеша" может принимать следующие значения:
-
пустая строка или опущено – в этом случае результаты будут "кэшированы", т.е. сохранены в виртуальной памяти для повторного использования. Каждое последующее обращение за этой информацией в рамках одной сессии (пока БД, использующая формулу, остается открытой) будет адресовано к именно этим сохраненным данным;
-
"NoCache" заставляет каждый раз извлекать текущую информацию непосредственно из базы;
-
"ReCache" позволяет обновить кеш с момента последнего кеширования (добавлено в R 6).
Использование этой опции основывается на компромиссе. С одной стороны, требование, чтобы Domino каждый раз обращался к базе данных и извлекал ту же самую информацию, отнимает время и понижает общую производительность. С другой стороны, если Вы предполагаете, что данные будут периодически изменяться, стоит потратить время, но быть уверенным, что каждый раз извлекается актуальная информация.
Параметр "сервер" : "база_данных" указывает имя базы данных. Существует несколько способов задать этот параметр:
-
для извлечения данных из текущей базы (той же базы, в которой выполняется формула) просто укажите в качестве параметра "";
-
для извлечения данных из локальной базы используйте "" для имени сервера и точно укажите имя файла базы данных, например "" : "БАЗА_ДАННЫХ.NSF"
-
для извлечения данных (с рабочей станции) из базы на сервере укажите сервер, путь и имя файла как текстовый список: "СЕРВЕР" : "БАЗА_ДАННЫХ.NSF"
-
для извлечения данных фоновым агентом из базы на том же сервере или рабочей станции, что и БД, содержащая формулу, используйте "" для имени сервера и точно укажите имя файла базы данных, например "" : "БАЗА_ДАННЫХ.NSF"
-
если имеются несколько реплик базы данных на станции и (или) на нескольких серверах, использование идентификатора реплики базы в качестве имени сервера и базы данных позволяет получить доступ к «ближайшей» реплике базы без указания имени сервера и самой базы. Для этого Вы задаете в качестве параметра "сервер": "база_данных" значение идентификатора реплики, например "85255CEB:0032AC04" (как одну текстовую строку, а не список из двух элементов).
Для поиска «ближайшей» реплики Domino использует следующий алгоритм:
-
сначала просматриваются базы из рабочего пространства. Если найдена одна реплика – то она и используется;
-
если реплик несколько, и они отображаются в виде стека, то используется реплика с вершины стека;
-
если при отображении реплик не используется стек, то Domino ищет иконку с текущего сервера, и в случае успеха использует эту БД. В противном случае используется БД, иконка которой была добавлена в рабочее пространство самой первой;
-
если предыдущие шаги закончились неудачей, то просматриваются БД с текущего сервера, а затем все базы с Вашего локального диска. При этом используется первая найденную БД с заданным идентификатором реплики. Чтобы в последующем процесс поиска происходил быстрее, эта база добавляется в рабочее пространство.
Чтобы избежать ошибок при вводе идентификатора реплики, выберите в меню File - Database - Design Synopsis... и отметьте опцию Replicatoin. Затем скопируйте идентификатор реплики из конспекта в буфер и вставьте его в формулу.
Если БД хранится в подкаталоге операционных систем DOS, Windows или OS/2, например, MAIL\MINE.NSF, между именем каталога и именем базы не забывайте вставлять две обратные косые вместо одной: "MAIL\\MINE.NSF".
Параметр "вид" задает имя вида или папки, где следует искать данные. Для достижения большей универсальности рекомендуется пользоваться алиасом. Например, если вид в окне свойств вида показан как "По авторам\Фамилия | Lname", в @DbColumn лучше использовать алиас "LName", хотя допустим и вариант "По авторам\\Фамилия".
Параметр колонка используется для указания номера колонки в виде. Это числовая величина; заключать ее в кавычки не следует.
Колонки вида нумеруются слева направо, и крайняя левая колонка имеет номер 1. Но, учитывая то, что вид есть представление индекса на экране, между видом и индексом имеются некоторые различия. @DbColumn выбирает информацию из индекса, при этом не каждая колонка вида учитывается в поиске. Для вычисления номера колонки используйте следующий метод:
Рассмотрите все колонки вида слева направо. Убедитесь, что не пропустили какую-то из них. Например, колонка, применяемая для сортировки или категоризации вида, может оказаться скрытой для пользователя, но используется в индексе вида. Просмотрите вид в режиме дизайна, чтобы увидеть все его колонки;
Исключите из рассмотрения все колонки вида, отображающие заведомо постоянную величину, например, 32 или "Выдано:". Такие колонки отсутствуют в индексе. Однако если колонка все же содержит формулу, которая возвращает одинаковый результат для всех документов, колонка не должна рассматривается как "константа", так что не исключайте ее из рассмотрения;
Исключите из рассмотрения все колонки вида, содержащие только одну из следующих функций: @DocChildren, @DocDescendants, @DocLevel, @DocNumber, @DocParentNumber, @DocSiblings, @IsCategory, @IsExpandable. Таких колонок нет в индексе;
Теперь пересчитайте колонки слева направо, не учитывая исключенные из рассмотрения. Полученный при этом номер колонки и будет являться величиной, которую следует указать в формуле для выбора значений.
Поскольку Domino получает информацию из индекса вида, основываясь на номерах колонок, можно извлекать только данные, представленные в индексе вида. Если указать несуществующую колонку, Domino не сообщит об ошибке, а просто возвратит пустое значение.
Когда @DbColumn используется в агенте, то последний должен иметь доступ к БД, к которой @DbColumn обращается (обратите внимание, что в R 6 агент может обращаться к БД, расположенным на другом (не текущем) сервере). Для получения такого доступа, тот, под чьими правами агент выполняется, должен иметь доступ «Читателя» к указанной БД.
ЗАМЕЧАНИЕ: агенты, выполняющиеся на серверах версии R5 или ниже, могут иметь доступ к БД только текущего сервера. В рамках этих версии для возможности @DbColumn «читать» данные из другой (не текущей) БД так же можно было добавить автора агента под правами «Читателя» в ACL этой БД. Существует и другой способ - можно внести идентификатор реплики исходной БД (т.е. в той, где выполняется агент) в целевую (откуда считываются данные опять же под правами «Читателя». Для этого определите идентификатор реплики исходной базы, который выглядит, например, как 85255CEB:0032AC04. Затем, используя File - Database - Access Control..., в список управления доступом целевой базы добавьте нового субъекта с именем, представляющим собой идентификатор реплики (85255CEB:0032AC04), и назначьте этому субъекту права не ниже читателя. Таким образом, Вы отдельно предоставите агентам из исходной базы доступ к целевой базе, даже если в её списке управления доступом для -Default- указано No access. Данный механизм поддерживается и в версии R 6.
Если же @DbColumn выполняется на рабочей станции пользователя и выбирает данные из базы на рабочей станции, она всегда имеет к этой базе необходимый доступ (даже при уровне доступа No Access – нет доступа и поднятом флаге Enforce a consistent Access Control List across all replicas of this database - распространять список управления доступом на все реплики текущей БД). Если @DbColumn выполняется на рабочей станции пользователя, но выбирает данные из базы на сервере Domino, доступ @DbColumn к ней определяется уровнем доступа пользователя.
Если пользователь, под правами которого выполняется @DbColumn, не имеет доступа к "виду" на основании Read Access list (список управления доступом на чтение к виду) - закладку Security (безопасность) окна свойств вида, секция Who may use this view – кто может использовать данный вид), то функция выполнятся не будет. В этом случае возвращается сообщение об ошибке: «A view of that name cannot be found in the specified database» (вид с данным именем не найден в указанной БД).
Пример 1. Эта формула используется как формула ключевых слов. При создании документа по форме, содержащей это поле ключевых слов, Domino извлекает список наименований изделий из колонки 2 вида "Наличный инвентарь" локальной базы данных INVENTRY.NSF.
@DbColumn( ""; "":"INVENTRY.NSF"; "Наличный инвентарь"; 2 )
Пример 2. Предположим, что коды изделий представляют собой "невразумительные" идентификаторы наподобие "ID1234-8765-23.003". Определить, какое изделие они представляют, затруднительно. Допустим, Вы желаете выводить в поле ключевых слов формы вместо кодов более лицеприятные описания изделий. Чтобы этого достичь, понадобится вид "По изделиям", содержащий в первой колонке список кодов изделий, в другой колонке, например, второй, описания изделий. Можно сделать эти описания доступными в Вашей форме, используя возможность указывать синонимы для ключевых слов: если любое ключевое слово содержит вертикальную черту "|", текст справа от нее является тем, что хранится в поле, а текст слева от черты - это то, что показывается пользователю. Приведенная ниже формула "поэлементно сцепляет" содержимое второй колонки (с описаниями) с содержимым первой колонки (с кодами изделий).
@DbColumn( ""; "":"PRODPLAN.NSF"; "По изделиям"; 2 ) +
"|" + @DbColumn( ""; "":"PRODPLAN.NSF";
"По изделиям"; 1 )