Язык @-формул в LotusDomino R 6.

Обработка ошибок в формулах


Синтаксические ошибки "отлавливаются" Domino при нажатии кнопки

, требующей принять изменения в формуле, либо при закрытии окна редактирования формулы. Сообщение об ошибке выводится либо в диалоговом окне (Рис. 5.1), либо в нижнем колонтитуле окна с формулой (Рис. 5.2). Затем в формуле выделяется фрагмент, вызвавший ошибку. Вот некоторые примеры:

  • No main or selection expression in formula (в формуле нет "главного" выражения) - случается, если последний оператор в формуле, которая по своему назначению должна возвращать значение (подробности в разделе "4.2"), не может этого делать (например, оператор с ключевым словом). Самое простое "формальное" решение такой проблемы - добавить в формулу в качестве последнего оператора константу "" (пустую строку).
  • Пример. В формуле поля Field1 (см. ниже), значение которого не важно, должно быть изменено значение поля Field2. В результате выполнения формулы поле Field2 получит значение NewValue, а поле Field1 - "".

    FIELD Field2 := NewValue;

    "";

    • An operator or semicolon was expected but non was encountered - здесь должен быть оператор (арифметический, логический и т. п.) или точка с запятой.
    • @If must have an odd number of arguments - функция @If должна иметь нечетное число аргументов.
    • Unknown [KeyWord] for @Function... - неизвестное ключевое слово в качестве аргумента функции.
    • Рис. 5.1 Сообщение о синтаксической ошибке: конец формулы достигнут ранее конца текстовой константы или константы типа дата/время

      Рис. 5.2 Сообщение о синтаксической ошибке: неизвестное ключевое слово для @-функции: '[WindowCascade);@Prompt([OK]'

      Ошибки во время выполнения формулы (Run-time) могут быть поделены на три группы:

      • Неожиданные ошибки проектирования, которые не должны встречаться пользователю. Например, если вызов функции содержит недостаточное число параметров, во время выполнения будет выведено сообщение: "Insufficient arguments for @function".
      • Ошибки проектирования, которые не отслеживает Domino, также не должны влиять на работу пользователя. Например, если вы пытаетесь показать с помощью @Prompt значение числового типа, @Prompt работает, но показывает пустое значение.

      • Ожидаемые ошибки, которые могут быть вызваны пользователем или какими-либо "внешними" условиями, например, пользователь ввел в диалоговом окне имя несуществующей базы. Такие ошибки нельзя предотвратить совсем, но их можно предвидеть и включить в формулы соответствующие проверки.


      • Для отладки Run-time ошибок в Domino не предусмотрен соответствующий механизм, аналогичный отладчику LotusScript. Предлагаемые пути решения:

        • для организации точек останова и вывода результирующих значений использовать функцию @Prompt, которую после успешной отладки удалить из тела формулы. Следует помнить, что @Prompt применим не везде (например, в формуле отбора документов). В этом случае предлагается записать отлаживаемую формулу в элемент дизайна, в котором функция @Prompt работает (например, кнопку-акцию или кнопку панели инструментов). После отладки - перенеси формулу в нужный вам объект дизайна;


        • в качестве альтернативы функции @Prompt, можно создать в форме поля, куда будут записываться промежуточные результаты выполнения формулы. После отладки удалить эти поля.


        • Следующие функции помогают обрабатывать ошибки периода выполнения:

          • @IsError( value ) - возвращает 1 (True), если значение value, которое содержится в поле или переменной, или получается в результате вычисления выражения, содержит ошибку;


          • @IfError( выражение1, выражение2 ) – возвращает значение выражения1, если выражение1 не содержит ошибки, и значение выражения2 или пустую строку, если в при вычислении выражения1 произошла ошибка;


          • @Error - генерирует ошибку, например, чтобы сделать "ошибочным" значение поля;


          • @Failure( message ) - показывает сообщение в окне при проверке значения поля (используется только в формулах проверки редактируемых полей);


          • @Success - всегда возвращает значение 1 (True) (используется только в формулах проверки редактируемых полей);


          • @Return( value ) - прерывает выполнение формулы и возвращает значение value, например, в случае положительного результата проверки на какую-либо ошибку.


          • Domino генерирует состояние ошибки в случае, когда пользователь вводит в поле значение, не соответствующего предусмотренного разработчиком типа данных. Например, в числовое поле вводится нечисловое значение. Ситуация ошибки генерируется при попытке сохранения такого документа. При этом выдается сообщение "Cannot convert text to a number" (не могу преобразовать текст в число). Разработчик может изменить текст сообщения с помощью функции @Failure, использую ее в формуле проверки значения поля.

            Для формул, отличных от формул полей (например, формул агентов или кнопок), для проверки содержимого полей не требуется возникновения ситуации сохранения документа. В этом случае соответствующие проверки и возможная генерация ошибки происходит немедленно, по факту запуска данной формулы.


            Содержание раздела