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

Функции, работающие с профильными документами


Профильные документы являются мощным средством для обмена данными между различными приложениями внутри одной или нескольких баз данных. По сути своей это скрытые документы, создаваемые по определенной форме, и которые могут хранить любые типы данных, допустимые в Domino. Доступ к профильным документам можно получить с помощью языка формул, LotusScript или Java.

Имя профильного документа совпадает с именем формы, по которой этот документ был создан. Кроме этого можно такие документы связать еще с дополнительным уникальным ключом. В версиях Domino/Notes до R 5 включительно говорилось, что профильные документы могут ассоциироваться с конкретным пользователем, т.е. для разных пользователей может существовать разные профильные документы с одним и тем же именем. Таким образом, разрешаются конфликты при одновременной работе нескольких пользователей. В одной базе данных для одного уникального ключа может существовать только один профильный документ с заданным именем. Если при создании профильного документа не был указан ключ, с которым необходимо ассоциировать конкретный профиль, то такой документ может быть только один на всю БД. При этом может существовать профили с тем же именем, но ассоциированные с разными ключами.

"Скрытость" профильных документов не только делает их невидимыми в видах и папках, но и не отображает их число в общем числе документов в окне свойств базы данных.

Создать профильный документ можно по @-команде @Command( [EditProfile]; ...), более подробно данная команда рассматривается в пункте "7.3".

У профильных документов есть важная особенность – они кешируются при работе с БД. В некоторых случаях данная возможность служит во благо, иногда нет.

@GetProfileField( "имя_профильного_документа";

     "имя_поля"; "уникальный_ключ" )

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


Функция возвращает значение поля по имени "имя_поля"

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

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

@SetProfileField( "имя_профильного_документа";

       "имя_поля"; "значение"; "уникальный_ключ" )

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

Функция присваивает значение "значение"

полю по имени "имя_поля" из профильного документа с именем "имя_профильного_документа". Четвертый параметр не обязателен, если он опущен, то ищется профильный документ общий для данной БД, иначе ищется профильный документ, связанный с указанным ключом.

Если на момент вызова функции указанный профильный документ в БД отсутствует, то корректный вызов @SetProfileField принудительно создает такой документ. В таком контексте можно использовать функцию в Web-приложении для создания профильного документа (т.к. команда @Command([EditProfile]; … в Web не поддерживается), и присвоении полю этого документа указанного значения.

Функция возвращает значение, соответствующее третьему аргументу функции, т.е. "значение".

Хотя в документации сказано, что тип параметра "значение"

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

Пример. Предположим у нас есть два агента Agent1 и Agent2. Agent1 производит некоторые вычисления, и затем значение, хранящееся во временной  переменной Ch, записывает в поле Result профильного документа Work (таким образом, он передает  параметры Agent2). После этого он вызывает Agent2:

@SetProfileField( "Work"; "Result"; Ch; @UserName );

@Command( [ToolsRunMacro]; "Agent1" );

Agent2 считывает вычисленное Agent1 значение в свою временную переменную Ch1 и продолжает вычисления.

Ch1 := @GetProfileField( "Work"; "Result"; @UserName );


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