Основы языка формул. Синтаксис и лексические элементы формул, страница 16

Функция @PickList() играет в языке формул важную роль, так как она не имеет ограничений на количество запоминаемых данных (в отличие от остальных функций @Db) и выполняется очень быстро. В основном она загружает представление в диалоговое окно с кнопками ОК и Cancel. Ниже приводится программный код, создающий данный список выбора:

gPickList ([Custom; ""; "By Part"; "Select a Chapter";

"Please select the Chapter to review"; 2)

В функции @PickList() можно применятьидентификатор реплики базы данных (Replica ID). Функция @PickList() может также осуществлять просмотр каталога Domino. Вот синтаксис данной функции для выполнения подобного просмотра:

gPickList ([Name] : [Single])

Если задать параметр Single, функция отображает список, из которого можно выбрать одно имя. В противном случае отображается диалоговое окно, состоящее из двух фреймов с передвижной границей между ними. В этом окне пользователь может выбрать из каталога Domino более одного элемента.

ПРЕДОСТЕРЕЖЕНИЕ

Все функции @Functions, обсуждавшиеся в настоящем разделе, доступны только в программах-клиентах Notes; в программах-клиентах Web они недоступны.

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

В Domino Designer большинство синтаксических ошибок перехватывается еще до того, как объект дизайна будет сохранен. Однако имеется только одна функция @Function, осуществляющая проверки на наличие ошибок. Это функция @IsError(). Ее можно использовать для проверки возвращаемого значения на наличие ошибки и заменить ошибочное значение, например, значением null (пара двойных кавычек). Если не сделать замену, то пользователь вместо этого значения увидит сообщение об ошибке. Например, если в формуле для столбца представления производится деление числа на константу, то при отсутствии этого числа в столбце представления отображается ошибка. В приведенном примере формула дает ошибку для документов, не имеющих присоединенных файлов :

@Text (@Integer (@AttachmentLengths / 1024)) + " К"

Эту формулу для столбца можно переписать, добавляя в нее функцию @IsError(),которая перехватывает ошибки деления и вместо ошибочного результата отображает пустую строку. Измененная таким образом формула имеет следующий вид:

jcSize   :=   @Integer    (@AttachmentLengths   /   1024;

@If   (@IsError   (jcSize) ;   "";   @Text   (jcSize)   +   "   K")

Отладка сложных формул

Отладка сложных формул может быть довольно трудным делом. Во-первых (и это самое главное), формулы нельзя выполнять в пошаговом режиме в отличие от программ на языке LotusScript и других языках программирования. Следовательно, отсутствуют точки останова, в которых можно посмотреть значение временной переменной или поля. Нельзя просматривать ход выполнения программы, ее логику. Такое положение дел может выводить программистов из себя. Но, к счастью, имеется два способа обойти эту проблему. 

Первый заключается в том, что в документе создаются поля для хранения значений временных переменных или текстовых сообщений, указывающих на то, что произошло некоторое событие. Он имеет тот недостаток, что в документе без особой необходимости увеличивается число полей. Конечно, после того, как формула будет закончена, можно создать программу-агент для удаления дополнительных полей с помощью функции @DeIeteField. Этот подход оправдан тогда, когда программа-агент обрабатывает много документов и необходимо видеть, что происходит с каждым документом.

Второй способ состоит в том, что в формулу через соответствующие интервалы помещаются операторы @Prompt ([OK]; ...), которые отображают значения вызывающих сомнение переменных или операторы, указывающие на то, что выполнение формулы достигло определенной точки. Этот подход применим для формул, присоединенных к кнопкам действий и функционирующих на уровне документа.

В текущей версии R5 имеется задокументированный отладчик формул. Его можно запустить, удерживая в нажатом состоянии клавиши Ctrl и Shift, во время выбора в меню File (Файл) команды Tools | Debug LotusScript (Сервис | Отладка LotusScript). Вполне определенно можно сказать, что в бета-версии R5 этот метод работает; известно также, что он вызывает аварийное завершение программы-клиента Notes.