- •Введение
- •Синтаксис формул
- •Лексические элементы формул
- •Переменные
- •Предопределенные поля
- •Временные переменные
- •Константы
- •Операторы выполнения операций
- •Порядок выполнения вычислений
- •Ключевые слова
- •Функции
- •Побочные эффекты
- •Ограничения применимости @-функций и команд, налагаемые списком управления выполнением (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
-
Работа с идентификаторами документов
@DocumentUniqueID
Область применения: нельзя использовать в формулах навигатора. В формулах полей создает ссылку (DocLink) на текущий документ.
Возвращает так называемый универсальный идентификатор документа (UNID) - 32-x символьную комбинацию букв и цифр, уникально идентифицирующую текущий документ во всех репликах распределенной базы.
Рис. 6.10 Окно свойств документа
Универсальный идентификатор документа можно "увидеть" в окне свойств документа в первой строке после метки "ID:", отбросив символы OF "в начале" и ON "в середине": 0DDA10781333857EC3256776006BB487. Domino генерирует универсальный идентификатор при создании документа. Первые его 16 символов (8 байт) представляют собой дату-время создания документа с точностью до тиков, а вторые 16 символов - случайное число. Domino, тем не менее, проверяет, не оказалось ли в текущей реплике базы документа (или "окурка") с таким же идентификатором, и, если так случилось, снова случайно генерирует вторые 16 символов. После сохранения документа в базе его универсальный идентификатор не меняется. Исключение составляют случаи, когда документ копируется в базу через буфер обмена или пересылается почтой - перед помещением документа в базу проверяется, не существует ли в ней уже документ с таким же универсальным идентификатором, и, если это так, для добавляемого в базу документа генерируется новый универсальный идентификатор. С помощью LotusScript разработчик имеет возможность самостоятельно изменить UNID документа. Правда, в этом случае ему необходимо самому заботиться об уникальности UNID.
Вторая и третья строки после метки "ID:" содержат информацию, специфическую в каждой реплике распределенной базы.
Многие понятия и алгоритмы Domino, в частности "дерево" документов-ответов, базируются на универсальных идентификаторах документов. Так, документ-ответ всегда содержит предопределенное поле с именем $Ref, в котором хранится универсальный идентификатор документа-родителя для данного документа-ответа.
Пример 1. Формула столбца вида "выводит" в этом столбце для некоторого документа нечто похожее на FF863D8AAB6E2210852561BD005867C7.
@Text( @DocumentUniqueID )
Пример 2. Формула в вычисляемом поле "создает" ссылку (DoсLink) на этот же документ.
@DocumentUniqueID
@InheritedDocumentUniqueID
Область применения: нельзя использовать в формулах навигатора. Предназначено для работы с документами, созданными по форме с включенной опцией наследования полей. Если опция не включена, возвращает такое же значение, что и @DocumentUniqueID. В формулах полей создает ссылку (DocLink) на указанный документ.
Возвращает универсальный идентификатор документа, который был текущим в момент создания документа, в котором используется эта функция.
@NoteID
Область применения: нельзя использовать в формулах формы и навигатора.
Возвращает 8-и символьный идентификатор документа в базе - строку с префиксом NT, например, "NT000023DA". NoteID "уникально идентифицирует" документ только в данной базе.
@GetDocField( UNID ; имя_поля )
Область применения: нельзя использовать в формулах отбора, колонок, всплывающих окон и навигатора.
Для текущей БД возвращает значение поля с именем имя_поля из документа, имеющего универсальный идентификатор UNID. Параметр имя_поля является строкой (например, имя поля в кавычках). Возвращаемое значение зависит от типа поля: строка или список строк, число или список чисел, время-дата или временной диапазон. Если задан несуществующий UNID, или поле, которого нет в наличие, то возвращается пустая строка.
Из личного опыта, если при вызове функции в главном окне клиента Notes R 6.0.1 открыта страница рабочего пространства, то такая операция приводит к «падению» клиента с окном NCD. В 5-х версиях при аналогичных условиях падения клиента не было.
Пример 1. Вычисляемое поле в документе, являющемся ответом на главный документ, всегда будет содержать значение поля Subject из главного документа. Когда создается новый документ-ответ, значение в вычисляемом поле наследуется из главного документа. Впоследствии в вычисляемом поле появляется значение поля Subject из главного документа (даже если оно меняется в главном документе). Предопределенное поле $Ref содержится в каждом документе-ответе. Его значение - универсальный идентификатор главного документа.
@If( @IsNewDoc; Subject; @GetDocField( $Ref; "Subject" ))
Пример 2. Формула, выполняемого по расписанию агента, меняет в документах-ответах значение поля Project на значение одноименного поля из главного документа.
FIELD Project := @GetDocField( $Ref; "Project" ); @All
Пример 3. В базе People есть вид Fio со скрытой третьей колонкой с формулой @Text( @DocumentUniqueID ). Находясь в текущем документе, мы выбираем из вида Fio документ, соответствующий конкретному человеку, и заполняем аналогичные поля в текущем документе.
ch := @PickList( [Custom] ; "" : "People" ; "Fio" ;
"Выбор сотрудника" ;
"Выберите сотрудника, отвечающего за заказ" ; 3);
@SetField( "Fio" ; @GetDocField( ch ; "Fio" ));
@SetField( "Phone" ; @GetDocField( ch ; "Phone" ));
@SetField( "Email" ; @GetDocField( ch ; "Email" ));
@SetDocField( UNID ; имя_поля ; новое_значение )
Область применения: нельзя использовать в формулах отбора, колонок, всплывающих окон и навигатора.
Для текущей БД присваивает новое значение полю с именем имя_поля в документе с универсальным идентификатором UNID. Параметр имя_поля является строкой. Параметр новое_значение должен соответствовать типу поля.
В R 6 снято ограничение на возможность применения данной функции к текущему документу.
Из личного опыта, если при вызове функции в главном окне клиента Notes R 6.0.1 открыта страница рабочего пространства, то такая операция приводит к «падению» клиента с окном NCD. В 5-х версиях при аналогичных условиях падения клиента не было.
Функция @SetDocField наиболее часто используется в формулах полей, кнопок и агентов.
Пример 1. Формула кнопки в документе-ответе изменяет значение поля Subject в главном документе.
@SetDocField( $Ref; "Subject"; "More people are commuting by bicycle" )
Пример 2. Формула проверки ввода редактируемого поля lastAction в документе-ответе "попутно" заменяет значение поля latestStatus в главном документе.
@SetDocField( $Ref; "latestStatus"; lastAction );
lastAction