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

Работа с идентификаторами документов


@DocumentUniqueID

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

Возвращает так называемый универсальный идентификатор документа (UNID) - 32-x символьную комбинацию букв и цифр, уникально идентифицирующую текущий документ во всех репликах распределенной базы.

Рис. 6.8  Окно свойств документа

Универсальный идентификатор документа можно "увидеть" в окне свойств документа в первой строке после метки "ID:", отбросив символы OF "в начале" и ON "в середине": 0DDA10781333857EC3256776006BB487. Domino генерирует универсальный идентификатор при создании документа. Первые его 16 символов (8 байт) представляют собой дату-время создания документа с точностью до тиков, а вторые 16 символов - случайное число. Domino, тем не менее, проверяет, не оказалось ли в текущей реплике базы документа (или "окурка") с таким же идентификатором, и, если так случилось, снова случайно генерирует вторые 16 символов. После сохранения документа в базе его универсальный идентификатор не меняется. Исключение составляют случаи, когда документ копируется в базу через буфер обмена или пересылается почтой - перед помещением документа в базу проверяется, не существует ли в ней уже документ с таким же универсальным идентификатором, и, если это так, для добавляемого в базу документа генерируется новый универсальный идентификатор. С помощью LotusScript разработчик имеет возможность самостоятельно изменить UNID документа. Правда, в этом случае ему необходимо самому заботиться об уникальности UNID.

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

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


Пример 1. Формула столбца вида "выводит" в этом столбце для некоторого документа нечто похожее на FF863D8AAB6E2210852561BD005867C7.

@Text( @DocumentUniqueID )

Пример 2. Формула в вычисляемом поле "создает" ссылку (DoсLink) на этот же документ.

@DocumentUniqueID



@InheritedDocumentUniqueID

Область применения: нельзя использовать в формулах навигатора. Предназначено для работы с документами, созданными по форме с включенной опцией наследования  полей. Если опция не включена, возвращает такое же значение, что и @DocumentUniqueID. В формулах полей создает ссылку (DocLink) на указанный документ.

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

@NoteID

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

Возвращает 8-и символьный идентификатор документа в базе - строку с префиксом NT, например, "NT000023DA". NoteID "уникально идентифицирует" документ только в данной базе.

@GetDocField( UNID ; имя_поля )

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

Для текущей БД возвращает значение поля с именем имя_поля

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

является строкой (например, имя поля в кавычках). Возвращаемое значение зависит от типа поля: строка или список строк, число или список чисел, время-дата или временной диапазон. Если задан несуществующий UNID, или поле, которого нет в наличие, то возвращается пустая строка.

Из личного опыта, если при вызове функции в главном окне клиента Notes R 6.0.1 открыта страница рабочего пространства, то такая операция приводит к «падению» клиента с окном NCD. В 5-х версиях при аналогичных условиях падения клиента не было.

Пример 1. Вычисляемое поле в документе, являющемся ответом на главный документ, всегда будет содержать значение поля Subject из главного документа. Когда создается новый документ-ответ, значение в вычисляемом поле наследуется из главного документа. Впоследствии в вычисляемом поле появляется значение поля Subject из главного документа (даже если оно меняется в главном документе). Предопределенное поле $Ref содержится в каждом документе-ответе. Его значение - универсальный идентификатор главного документа.



@If( @IsNewDoc; Subject; @GetDocField( $Ref; "Subject" ))

Пример 2. Формула, выполняемого по расписанию агента, меняет в документах-ответах значение поля Project на значение одноименного поля из главного документа.

FIELD Project := @GetDocField( $Ref; "Project" ); @All

Пример 3. В базе People есть вид Fio со скрытой третьей колонкой с формулой @Text( @DocumentUniqueID ). Находясь в текущем документе, мы выбираем из вида Fio документ, соответствующий конкретному человеку, и заполняем аналогичные поля в текущем документе.

ch := @PickList( [Custom] ; "" : "People" ; "Fio" ;

       "Выбор сотрудника" ;

       "Выберите сотрудника, отвечающего за заказ" ; 3);

@SetField( "Fio" ; @GetDocField( ch ; "Fio" ));

@SetField( "Phone" ; @GetDocField( ch ; "Phone" ));

@SetField( "Email" ; @GetDocField( ch ; "Email" ));

J @SetDocField( UNID ; имя_поля ; новое_значение )

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

Для текущей БД присваивает новое значение полю с именем имя_поля

в документе с универсальным идентификатором UNID. Параметр имя_поля

является строкой. Параметр новое_значение должен соответствовать типу поля.

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

Из личного опыта, если при вызове функции в главном окне клиента Notes R 6.0.1 открыта страница рабочего пространства, то такая операция приводит к «падению» клиента с окном NCD. В 5-х версиях при аналогичных условиях падения клиента не было.

Функция @SetDocField наиболее часто используется в формулах полей, кнопок и агентов.

Пример 1. Формула кнопки в документе-ответе изменяет значение поля Subject в главном документе.

@SetDocField( $Ref; "Subject"; "More people are commuting by bicycle" )

Пример 2. Формула проверки ввода редактируемого поля lastAction в документе-ответе "попутно" заменяет значение поля latestStatus в главном документе.

@SetDocField( $Ref; "latestStatus"; lastAction );

lastAction


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