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

         

Операции с полями


J @SetField( поле; значение )

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

Присваивает значение полю в текущем документе. В R 6 не требуется перед использованием @SetField определить в формуле поле, если его не существует в документе. Для предыдущих версий (включая R5) это было необходимо, иначе при выполнении @SetField последует сообщение об ошибке. Поле существует, если оно определено в форме, по которой открыт документ. Если поля нет, его можно создать, используя имя поля в выражении присваивания с ключевым словом FIELD, например, указав в начале формулы:

FIELD Имя_поля

:= Имя_поля;

Имя поля в @SetField должно задаваться как текстовая строка. Значение должно иметь тот же тип данных, что и поле.

Пример. Формула проверяет значение в поле Priority. Если в нем содержится "низкий" или "средний", то в поле Status помещается "Закрыт". В противном случае в поле Status помещается "Открыт". Обратите внимание, что перед использованием поля Status в формуле @SetField это поле было определено с помощью ключевого слова FIELD.

FIELD Status: = Status;

@If(

    Priority = "низкий" | Priority = "средний";

    @SetField( "Status"; "Закрыт" );

    @SetField( "Status"; "Открыт" )

   )



J @ThisName

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

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

J @ThisValue

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

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


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

@If( @IsNull(@ThisValue);

       @Failure("Цена не введена");

     @ThisValue <= 0;

       @Failure("Цена не может быть отрицательной");

       @Success)

J @GetField( имя_поля )

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

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

Данная функция совместно с @ThisValue и @ThisName может использоваться в рамках формул полей для создания переносимого (т.е. независимого от имени поля) кода.

Пример. Некая компания занимается продажей стульев трех типов. На форме заявки на покупку имеются редактируемые поля, отвечающие за цену (суффикс в имени поля "_Price") и количество (суффикс - "_Quantity"), а так же вычисляемые поля общей цены (суффикс - "_Total"). Тип стульев определяется префиксом в имени поля (например, FoldingChairs, StackingChairs, RecliningChairs). В этом случае поля формула поля общей цены будет одинакова для всех трех типов стульев, и имеет следующий вид:

chairName := @Left(@ThisName; "_");

(@GetField(chairName + "_Quantity"))*(@GetField(chairName +

"_Price"))

@DeleteField

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

Использованная в агенте, функция @DeleteField удаляет поле, которому присваивают возвращаемое функцией значение.

@DeleteField наиболее часто применяется в фоновых и поисковых агентах. Работает и в кнопках формы, но только для полей, которые не были определены в форме статически.

Пример. Удаляет поле RoutingList из каждого документа, обрабатываемого агентом.

FIELD RoutingList := @DeleteField;



@Unavailable

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

Аналогична по синтаксису и смыслу функции @DeleteField. Удаляет поле, которому присваивают возвращаемое функцией значение.

Пример. Удаляет поле RoutingList из каждого документа, обрабатываемого агентом.

FIELD RoutingList := @Unavailable;

@DocFields

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

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

@IsAvailable( имя_поля )

@IsUnavailable( имя_поля

)

Область применения: нельзя использовать в формулах навигатора. В формуле колонок и отбора может использоваться только с полями, имеющими флаг SUMMARY.

Проверяют наличие в документе поля с указанным именем. @IsUnavailable( имя_поля ) тождественна равна отрицанию @IsAvailable( имя_поля

)
. Функция @IsAvailable возвращает 1 (TRUE), если поле содержится в документе, в противном случае 0 (FALSE). Обратите ВНИМАНИЕ!!!, что имя_поля

не берется в кавычки, это достаточно распространенная ошибка для этих функций.

Несколько слов о флаге SUMMARY. Наличие данного флага у поля сигнализирует о том, что значение этого поля может быть показано в виде или папке. При создании документа по форме без использования программного кода на LotusScript или Java, у полей типа Rich Text этот флаг не установлен, а у полей типа Text, Date/Time, Number и т.д. он установлен. Программным путем с использованием LotusScript или Java можно принудительно установить или изменить данный флаг. Посмотреть наличие или отсутствие данного флага у поля можно в окне свойств документа.



Рис. 6.1   Поле my_num имеет установленный флаг SUMMARY

Пример 1. Возвращает значение поля Dept, если оно имеется в документе. В противном случае возвращает "Консультант".

@If( @IsAvailable( Dept ); Dept; "Консультант" )

Пример 2. Возвращает "Консультант", если нет поля Dept; если такое поле есть, возвращается значение, содержащееся в нем.

@If( @IsUnavailable( Dept ); "Консультант"; Dept )


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