- •Введение
- •Синтаксис формул
- •Лексические элементы формул
- •Переменные
- •Предопределенные поля
- •Временные переменные
- •Константы
- •Операторы выполнения операций
- •Порядок выполнения вычислений
- •Ключевые слова
- •Функции
- •Побочные эффекты
- •Ограничения применимости @-функций и команд, налагаемые списком управления выполнением (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
-
Функции для обработки ошибок
@Failure( строка )
Область применения: предназначена для использования в формулах проверки вводимых данных редактируемых полей, но может быть также использована в формулах формы и агентов. В последнем случае, только возвращает значение, но не выводит предупреждающих сообщений.
При использовании в формуле проверки вводимых данных редактируемых полей, @Failure создает диалоговое окно с текстом строки сообщения, и, после нажатия кнопки OK, устанавливает курсор на редактируемое поле со значением, не соответствующим критерию проверки.
Наиболее распространенная ошибка в формулах проверки вводимых данных возникает из-за того, что значение поля любого типа до того как в него введены какие-либо значения, есть пустая строка. Соответственно, его тип в этот момент строковый. Поэтому если тип данных проверяемого поля не текстовый (числовой или дата/время), то сначала надо проверить значение поля на не пустоту. В противном случае появится предупреждающее сообщение “Comparison operators must be supplied two values of the same data type” («Операторы сравнение должны получать значения одного и того же типа данных”).
Рис. 6.36. Пример окна @Failure
Пример 1. Использованная в формуле проверки вводимых данных, @Failure выводит приведенное на Рис. 6 .36 диалоговое окно, если пользователь введет в поле Value значение больше 100.
@If( @IsNull(Value); @Failure( "Значение не введено" );
Value <= 100; @Success; @Failure(
"Значение > 100 !" ))
Пример 2. Использованная в формуле проверки вводимых данных, @Failure выводит окно с сообщением "Код местности состоит только из 3 цифр", если пользователь введет в поле AreaCode число, большее или равное 999.
@If( @IsNull(AreaCode); @Failure( "Значение не
введено" );AreaCode < 999; @Success; @Failure(
"Код местности состоит только из 3 цифр" ));
@Success
Область применения: предназначена для использования в формулах проверки вводимых данных редактируемых полей.
Возвращает 1 (TRUE). Используется совместно с @If в формулах проверки полей (в основном, в формулах проверки ввода для редактируемых полей), чтобы показать, что введенное значение соответствует критериям проверки.
Пример. При использовании в формуле проверки вводимых данных редактируемых полей, возвращает 1 и позволяет сохранить документ, только если значение в поле Price меньше 100.
@If( Price < 100; @Success; @Failure( "Цена слишком высока" ))
@Error
Область применения: без ограничений.
Генерирует ситуацию ошибки. Возвращаемое значение @Error. Проверить значение выражения на наличие ошибки можно только функцией @IsError.
@IsError( значение )
Область применения: нельзя использовать в формулах навигатора.
Возвращает 1 (TRUE) если значение есть @ERROR (т.е. содержит ошибку), и 0 (FALSE) в противном случае. Аргумент значение должен либо содержать значение численного типа, либо имя поля или временной переменной, в которых хранятся значения численного типа.
Пример. Генерируется сообщение об ошибке, если временной переменной Choice будет присваиваться значение натурального логарифма от отрицательного числа.
Choice := @Ln(Proba);
@SetField( "Work"; @If( @IsError( Choice );
@Error; Choice ))
@IfError( выражение1 [; выражение2 ] )
Область применения: без ограничений.
Функция вычисляет значение выражения1 и возвращает его значение если при вычислении не возникла ситуация ошибки. Если в выражении1 произошла ошибка, то если присутствует выражение2, то оно вычисляется и возвращается его значение. Если при ошибке в первом выражении, второй параметр опущен, то возвращается пустая строка.
Так же можно использовать конструкцию $Error в качестве второго аргумента, в этом случае возвращается реальное сообщения об произошедшей ошибке.
К сожалению, документация на эту функцию так же достаточно бедна. Например, отсутствует информация о том, какие ошибки распознает функция. Из личного опыта известно, что @IfError не распознает математические ошибки, ошибки функций: @TextToNumber и @TextToTime, и команды [TextSetFontSize]. Но в тоже время @IfError «отлавливает» ошибки функций: @DBLookup, @ToNumber, @ToTime и команды [TextSetFontFace]. Но это, разумеется, не весь контекст функции. Так же не совсем понятно как использовать «конструкцию $Error в качестве второго аргумента».
Пример 1. Формула задает значение поля Cost на основании функции @DbLookup, или предопределенной константы, если @DbLookup выполнился с ошибкой.
@SetField("Cost"; @IfError(@DbLookup("":"NoCache"; ""; "ddd"; "Петров В.В."; 2); "Значение не определено"))
Пример 2. Функция, примененная в качестве значения числового поля по умолчанию, возвращает состояние ошибки, хотя должна бы была возвратить значение числа -5.
@IfError( @Ln( -5 ); 5 )
Пример 3. Функция, примененная в акции формы, выводит окно с сообщение об ошибке.
@Command([EditGoToField]; "Body");
@Command([EditSelectAll]);
@IfError( @Command([TextSetFontFace]; fonts);
@Prompt([Ok]; "Сообщение об ошибке";
"Вы должны предварительно определить имя шрифта"))
Пример 4. Модифицированный пример 3 с попыткой использовать «конструкцию $Error в качестве второго аргумента функции». Результат – системное сообщение об ошибке: «Specified font is not configured in system.» (указанный шрифт не установлен в системе).
@Command([EditGoToField]; "Body");
@Command([EditSelectAll]);
a := @IfError( @Command([TextSetFontFace]; fonts); $Error);
@Prompt([Ok]; "Сообщение об ошибке"; a)
@CheckFormulaSyntax( текстовая_строка )
Область применения: нельзя использовать в формулах отбора и столбцов вида.
Проверяет свой аргумент на соответствие правилам языка @-формул. Текстовая_строка представляет собой фрагмент кода. Функция обнаруживает ошибки только синтаксические ошибки, но не ошибки периода выполнения. Ищется только первая ошибка.
Функция возвращает либо "1" – если ошибок не найдено, либо текстовый список типа: сообщение_об_ошибке : номер_строки : номер_столбца : смещение : длина : текст_вызвавщий_ошибку
где:
-
сообщение_об_ошибке – сообщение, возвращаемое компилятором;
-
номер_строки – номер строки, в которой произошла ошибка. Нумерация начинается с единицы. Строками считаются фрагменты текста, разделенные жестким переводом строки, т.е. строки, автоматически перенесенные в рамках программной панели, учитываться не будут;
-
номер_столбца – позиция первого символа, с которого начинается ошибка, в некорректной строке. Нумерация начинается с единицы от первого символа в рамках строки с номером номер_строки;
-
смещение – аналогична предыдущему параметру, но нумерация идет в рамках всего фрагмента кода, считая от его первого символа;
-
длина – длина текста, вызвавшего ошибку;
-
текст_вызвавший_ошибку – текст или сообщение компилятора о причинах ошибки.
Пример 1. Следующая формула вернет значение: "Unknown @Function":"3":"6":"23":"9":"@Exponent".
formula := {x := 10;
y := 2;
z := @Exponent(x; y); };
@CheckFormulaSyntax(formula);
Пример 2. Формула вернет значение: "An operator or semicolon was expected but none was encountered" : "3" : "1" : "17" : "1" : "z". Обратите внимание, что вторая ошибка, связанная с функцией @Exponent, не обнаружена:
formula := {x := 10;
y := 2
z := @Exponent(x; y); };
@CheckFormulaSyntax(formula);
Пример 3. Формула вернет значение: "1".
formula := {x := 10;
y := 2;
z := @Power(x; y); };
@CheckFormulaSyntax(formula);