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

         

Функции - базовые конструкции языка формул


@If( условие_1; действие_1;  условие_2; действие_2; ..

. ; условие_99; действие_99; действие_иначе

)

Область применения:

без ограничений.

Проверяет условия. Если условие истинно (TRUE), выполняется действие, указанное сразу же после условия. Если же условие ложно (FALSE), выполняется переход к проверке следующего условия и т.д. Как только находится истинное условие,  выполняется связанное с ним действие и игнорируется оставшаяся часть выражения. Если ни одно из условий не истинно, выполняется действие_иначе. Возвращается значение выполненного действия.

Можно указать до 99 условий и соответствующих им действий, и только одно действие, которое выполняется, если не верно ни одно из указанных условий. В своей простейшей форме функция имеет вид: @If( условие; действие; действие_иначе ). Допускается и форма @If( условие ), в этом случае никакие действия не выполняются.

Пример 1. Проверяется значение в поле CostOfGoods. Если значение больше или равно 12.45 - условие истинно, и возвращается строка "Сверх бюджета". Если значение меньше 12.45 - условие ложно и возвращается строка "Соответствует".

@If( CostOfGoods >=12.45; "Сверх бюджета"; "Соответствует" )

Пример 2. Если CostOfGoods меньше 12.45 - возвращается пустая строка.

@If( CostOfGoods >= 12.45; "Сверх бюджета"; "" )

Пример 3. Если значение в поле CostOfGoods больше 12.45 - возвращается строка "Сверх бюджета"; если нет, проверяется следующее условие. Второе условие снова проверяет значение в поле CostOfGoods, и если значение меньше 12.45 - возвращается строка "Соответствует". Если же значение равно 12.45 - возвращается строка "На пределе допустимого".

@If( CostOfGoods > 12.45; "Сверх бюджета";



CostOfGoods < 12.45; "Соответствует"; "На пределе допустимого" )

Пример 4. Сначала проверяется, действительно ли документ новый (еще не сохранялся в базе).  Если условие истинно, возвращается значение поля NewNoteTitle. Если первое условие ложно, проверяется, является ли текущим  вид "Авторы". Если да, возвращается значение поля ByAuthorTitle. Если оба условия ложны, возвращается значение  поля StandardTitle.


@If( @IsNewDoc; NewNoteTitle;

@ViewTitle = "Авторы"; ByAuthorTitle; StandardTitle )

@Do( выражение_1; выражение_2; ... ; выражение_n )

Область применения: нельзя использовать в формулах отбора и колонок.

Используется для последовательного вычисления нескольких выражений. Вычисляет выражения слева направо и возвращает значение последнего выражения.

Если @Do содержит функцию @PostedCommand или вариант функции @Command, выполняющейся последней в формуле, то такие команды будут выполняться после всех остальных выражений, входящих в формулу. Несколько @PostedCommand будут выполняться в порядке их появления в @Do.

Пример. Эта формула открывает диалог, выясняющий, желает ли пользователь редактировать текущий документ. Если пользователь выберет Yes, появится другой диалог, запрашивающий имя пользователя. Если в нем пользователь выберет Cancel, выполнение формулы будет прекращено; если же пользователь введет имя и выберет Ok, документ будет открыт в режиме редактирования. Если же пользователь выберет No в первом диалоге,  появится следующий диалог. Будет сообщено, что пользователь решил не редактировать документ, и произойдет переход к следующему документу в виде.

@If(

    @Prompt( [YesNo]; "Вопрос"; "Редактировать этот документ?" );

    @If( @Prompt( [OkCancelEdit]; "Положительный ответ";

                "Вы выбрали редактирование документа.

                  Если имя указано верно, нажмите OK";

                @Username ) != "ERR_CANCEL";

        @PostedCommand( [EditDocument] );

        @Return( "" )

        );

    @Do(

        @Prompt( [Ok]; "Отрицательный ответ";

                "Вы отказались редактировать документ.

                 Нажмите OK для перехода к следующему." );

        @PostedCommand( [NavigateNext] )

        )

   )

@Select( число; значение_1; значение_2; ... ;

                 значение_N

)

Область применения: без ограничений.

Возвращает значение в позиции, заданной параметром число. Если число больше количества значений N, возвращает последнее значение. Если значение в указанной позиции является списком, возвращает весь этот список.



Пример 1.Возвращается 3.

@Select( 3; 1; 2; 3 )

Пример 2.Возвращается 3.

@Select( 5; 1; 2; 3 )

Пример 3. Возвращается список "Апр" : " Май" : "Июн".

@Select( 2; "Янв" : "Фев" : "Мар"; "Апр" : "Май" : "Июн";

         "Июл" : "Авг" : "Сен"; "Окт" : "Ноя" : "Дек" )

Пример 4. Возвращается список "Осло" : "Париж" : "Нью-Йорк" : "Амстердам", если поле TrainingCenters содержит список названий этих городов.

@Select( 3; SalesOffices; ServiceOffices; TrainingCenters )

@Return( значение )

Область применения: нельзя использовать в формулах колонок.

Немедленно прекращает выполнение формулы и возвращает указанное значение. В качестве параметра значение можно указать другую функцию, например, @Error, текстовую строку, например, "Выполнение остановлено", пустую строку ("") или логическое значение (TRUE или FALSE).

@Return наиболее часто используется в формулах полей, агентов, кнопок и кнопок панели инструментов совместно с @If для определения, завершать ли выполнение формулы немедленно (т.е. выполнять  @Return) или продолжать выполнение оставшейся части формулы.

Пример 1. Открывает диалог, предлагающий пользователю сделать выбор "да/нет". Если пользователь выберет Yes, будет открыт следующий в виде документ; если пользователь выберет No, выполнение формулы будет остановлено.

@If(

@Prompt( [YesNo]; "Продолжить?";

               "Хотите продолжить чтение почты?" );

@PostedCommand( [NavigateNext] );

@Return( "" )

)

Пример 2. Проверяет наличие переменной среды OrderNumber в файле NOTES.INI пользователя. Если переменная отсутствует, с помощью @SetEnvironment она помещается в файл со значением, равным нулю. Если переменная в файле присутствует, @Return прекращает выполнение формулы и возвращает значение этой переменной.

@If(



@Environment( OrderNumber ) = "";

@SetEnvironment( "OrderNumber"; "0" );

@Return( @Environment( "OrderNumber" ))

)

J @Eval( строка )

Область применения: формально без ограничений, однако применение функции в формулах отбора и колонок может привести к непредсказуемым результатам.

В момент выполнения рассматривает строку как @-формулу, компилирует и выполняет ее. Возвращает значение последнего выражения в формуле, представленной строкой, или ситуацию ошибки, если таковая произошла. На момент выполнения в формуле строки, ей доступны все переменные определенные до @Eval.

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

Пример. Присвоит переменной a значение 5, а x - football

x := "foot";

c:=3;

a := @Eval("x := x + \"ball\";2+c");

@Prompt([OK]; "1"; @Text(a));

REM {выведет 5};

@Prompt([OK]; "2"; x);

REM {выведет football}

J @UpdateFormulaContext

Область применения: предназначена для использования в интерактивных приложениях, не работает в контекстах, где не допустимо использование @Command. Не работает в Web-приложениях.

В рамках интерфейса клиента Notes используется для обновления контекста текущей формулы. Например, в рамках формулы мы создаем по форме новый документ, то без использования @UpdateFormulaContext до конца формулы под текущим документом будет подразумеваться тот, из которого была вызвана формула. Если же мы применим @UpdateFormulaContext, то текущим станет новый документ.

Пример. Формула используется в акции формы базы Test1.nsf, расположенной на локальной станции. Первый @Prompt вернет значение - "~test.nsf", второй тоже самое значение – "~test.nsf", а третий - "CN=dominornext/O=Inttrust~Test\test.nsf"

@Prompt([Ok]; "1"; @Implode(@DbName; "~"));

@Command([Compose]; "dominornext/Inttrust" : "Test\\Test.nsf";

           "Form");

@Prompt([Ok]; "2"; @Implode(@DbName; "~"));

@UpdateFormulaContext;

@Prompt([Ok]; "3"; @Implode(@DbName; "~"));


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