шпаргалка

Понятие базы данных в Notes, логическая структура БД. Файл БД Lotus Notes, логическая структура файла. Типы документов.

[ Назад ]

2. База данных в Lotus Notes

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

Что же представляет собой Lotus Notes? Пакет Notes компании Lotus Development был разработан с ориентацией на базу данных документов, обеспечивающую их хранение и просмотр. Для пользователей это означает, что, во-первых, в базах данных Notes хранятся документы, а не обычные записи с заполняемыми полями, а во-вторых, Notes позволяет организовывать, совместно использовать и искать информацию. В отличие от стандартного процессора БД архитектура базы данных Notes одинаково хорошо подходит и для строго структурированных полей (таких, как телефонные номера и даты), и для документов (текста в свободном формате). Она исключительно удачно отвечает задачам хранения, просмотра и совместной работы над документами. Система Notes позволяет создавать OLE-серверные приложения. Это означает, что OLE-объекты, такие как электронные таблицы и графика, можно встраивать непосредственно в документы Notes, просматривать и редактировать после двойного щелчка мыши. Базы данных Notes содержат документы различных типов, включая комментарии, отчеты, коммерческие предложения, финансовые сводки, информацию о контактах, электронные таблицы, изображения и даже видео- и аудиоинформацию. База документов Notes хорошо подходит для тех приложений, где важно использовать неструктурированную информацию (например, для задач управления торговыми операциями). Хотя база данных Notes не является реляционной, здесь можно связать одну запись с другой. Специальные приложения Notes связываются со структурированными таблицами, записями и полями реляционных баз данных.

Главной особенностью лотусовской базы данных является ее ориентация на хранение больших плохо структурированных документов и коллективную работу с ними. Под коллективной работой подразумевается возможность нескольким человекам одновременно править одну и ту же запись (документ). Соответственно, поддерживается аппарат версий и возможности отслеживания изменений, сделанных отдельными пользователями. Кроме текстов, записи лотусовских БД могут содержать произвольное количество настраиваемых пользователями реквизитов разных типов. Причем настройка состава реквизитов достаточно проста и посильна конечным пользователям. Документы в базе могут ссылаться друг на друга (что-то типа вебовских гипертекстовых ссылок), и кликнув на ссылку в тексте документа, можно открыть другой документ.

При больших объемах базы также выступает "родовая травма" Lotus Notes - его система хранения данных не поддерживает ряд вещей, являющихся стандартом для современных СУБД, и совершенно необходимых для функционирования реальных систем автоматизации.

1. Во первых, БД Lotus Notes не поддерживает транзакции - т.е. согласованные изменения нескольких таблиц выполняемые как единое целое. Т.е. если, например, приложение, работающее на клиенте, успело модифицировать одну запись, но не успело другую, и отвалилось (например, свет выключился), то в базе данных LN измененная запись останется таковой, в то врем как во всех современных СУБД в такой ситуации на сервере произойдет откат до начального состояния.

Из-за этого поддерживать целостность больших баз на LN становится проблематично.

2. Как мы говорили выше, LN поддерживает возможность связывания документов. Но при этом контроля ссылочной целостности в нем нет - вы спокойно можете удалить документ, на который кто-то ссылается, и образуется "висячая" ссылка. Естественно, нет никаких более продвинутых механизмов контроля целостности - типа constraints в реляционных базах данных.

3. И наконец - в отличии от современных реляционных СУБД, где индексирование записи происходит при помещении ее в базу, в LN индексирование - это отдельный процесс, происходящий обычно по ночам, и при больших объемах данных, не всегда успевающий закончиться к утру. Т.е. получается забавная ситуация - вы документ добавили, а найти его - не можете. Видимо, так сделано потому что кроме индексирования коротких полей LN выполняет и полнотекстовое индексирование, поэтому индексирование одной записи (документа) может занять изрядное время. Но прелесть полнотекстового индексирования полностью пропадает из-за того, что значительная часть документов хранятся в виде вордовых и эксельных документов, внутрь которых Lotus-овскому индексатору хода нет...

2.1. Файл базы данных

Тип базы данных Notes определяется расширением имени файла базы.

Расширение имени файла Макс. размер

файла Тип БД

NSF до 4 ГБ Стандартная БД Notes

NS3 до 1 ГБ БД в формате 3-й версии Notes

NTF

Шаблон (template)

DSK

Настройки раб. пространства (Notes desktop)

NCF

Буфер обмена Notes (cut/paste)

NTM

Спец. БД для альтернативной почты

NSX

Тестовая БД

2.2. Логическая структура файла БД Notes

База данных Notes является контейнером для большого числа объектов различных классов - документов, описаний форм, видов и агентов (макропрограмм). Файл базы данных начинается с некоторого заголовка и карты размещения данных в остальной части БД.

Заголовок содержит уникальные идентификаторы данного файла и реплики БД, отметки о времени создания и последней модификации, название и категорию БД, параметры реплицирования, список управления доступом и т.п. Основная часть файла содержит последовательность "порций" или "записей" данных, называемых note, а также другие типы объектов, как, например, присоединенные файлы, встроенные OLE-объекты, списки непрочитанных документов и т.п.

Секции заголовка (первые пять строк в таблице) могут присутствовать в каждом файле БД только по одному разу, а все остальные (различные виды note) - многократно, причем не существует определенного порядка их следования. Каждый объект представлен в карте размещения уникальным "вектором размещения записи" (Record Relocation Vector - RRV), который содержит позицию объекта в файле.

Заголовок БД (Database Title)

Установки реплицирования (Replication Settings)

Список управления доступом (Access Control List)

История репликаций (Replication History)

Информация об активности пользователей (User Activity Log)

Индексы видов и другие нереплицируемые данные

КАРТА РАЗМЕЩЕНИЯ (Allocation map)

Пиктограмма БД (Icon Note)

Документ "About Database" (Policy Note)

Документ "Using Database" (Help Note)

Вид (View Note)

Форма (Form Note)

Агент (Filter Note)

Документ (Data Note)

Документ (Data Note)

Форма (Form Note)

Вид (View Note)

Документ (Data Note)

...

Note - это общая структура определенного формата, используемая Notes для хранения разнородной информации. В некотором смысле Note - это документно-ориентированный аналог записи в реляционной БД. Виды, формы, агенты, пиктограммы, Help-документы - все это хранятся как notes. Документы также являются просто одной из разновидностей notes - data note. Запись (note) любого из перечисленных типов имеет набор из трех идентификаторов: NoteID - идентификатор в данной базе (RRV - позиция записи в файле), UNID - универсальный идентификатор, устанавливающий соответствие между репликами одного и того же документа и OID - оригинальный идентификатор, уникально идентифицирующий документ в мировом масштабе, а также включает последовательность именованных пунктов (элементов, items), таких как поля в документах:



Header - заголовок - содержит NoteID, дату/время последней модификации и NoteCLASS - внутренний идентификатор типа записи (Form, View, Document ...).

Access Privilege Mask - определяет привилегии доступа к этой записи.

Items 1-N - пункты (элементы), составляющие запись (поля). Каждый пункт имеет номер, имя, некоторый список флагов, длину, тип данных и, собственно, данные:

2.3. Основные типы записей (note)

Структура документа (data note) определяется в основном формой, с помощью которой он редактировался. В форме есть определения полей, в документе появляются соответствующие пункты. Некоторые пункты добавляются в документ самим Notes. Самые важные из них:

• "Form" - имя формы, с помощью которой документ был создан.

• "$Ref" - идентификатор (UNID) "родительского" документа в ответном документе.

• "$File" - общая информация о присоединенных файлах и встроенных объектах OLE.

• "$Links" - список идентификаторов документов, видов и БД, на которые есть ссылки в данном документе.

• "$Readers" - список имен, групп и ролей, определяющий, кто может читать документ.

• "$Revisions" - перечень дат и времен модификаций документа.

• "$UpdatedBy" - имена тех, кто редактировал документ.

Описание формы (Form definition note) определяет представление на экране документа, открытого с ее помощью для чтения или редактирования, формулы и скрипты в полях и кнопках, которые будут выполняться над полями этого документа, может содержать списки имен, групп и ролей, ограничивающие доступ к этому документу.

Описание вида (View definition note) устанавливает критерий отбора документов, их представление в колонках вида, способ сортировки, а также указатель на объект в этом же файле, содержащий индекс по всем документам, представленным в виде. В отличие от описания вида, индекс не реплицируется, а перестраивается заново в каждой реплике БД.

2.4. Открытие и закрытие БД. Шаблоны БД

Открыть существующую БД можно с помощью меню, мыши или клавиатуры после выбора пиктограммы БД в рабочем пространстве. С помощью функции @Command([FileOpenDatabase]; "server": "database"; "view"; "key"; "newinstance"; "temporary"), вызванной в кнопке, макросе или быстрой кнопке можно открыть БД "временно", то есть не добавляя ее пиктограмму в рабочее пространство.

БД закрывается после закрытия всех окон (навигаторов, видов и документов) в данной БД.

Шаблон БД (template) - база данных, служащая образцом для создания новых БД. Файл шаблона должен иметь расширение .ntf и должен располагаться в корневом каталоге данных рабочей станции или сервера. Кроме всех элементов дизайна шаблон может содержать документы, которые будут при создании новой БД скопированы в нее.

Создать новую БД можно следующими способами:

• Разработка "с нуля" - на основе пустого шаблона (Blank);

• Копирование существующей БД с параметром Database_Design_Only, затем, если необходимо, доработка;

• Использование готового шаблона, предоставляемого Notes, для создания БД, затем доработка;

• Разработка нового шаблона "с нуля" или на основе существующих, затем создание новых БД, наследующих дизайн шаблона при всех его последующих модификациях.

• Наследование отдельных элементов дизайна новой БД из разных шаблонов дизайна.

Дизайн-шаблон (design template) - шаблон, используемый как хранилище, библиотека описаний элементов дизайна (видов, форм, субформ, агентов-макросов, совместно используемых полей и навигаторов), которые могут автоматически распространяться на одну и более БД.



6. Формулы в БД Notes. Синтаксис формул. Компоненты и ключевые слова формул. Порядок и особенности выполнения формул.

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

• Отбор документов при селективных репликациях.

• Отбор документов для включения в вид.

• Вычисление значений для показа в документах, видах и папках.

• Определение видимости абзаца формы, абзаца в RichText-поле документа, объекта в области размещения, акции в форме или виде.

• Вычисление, преобразование и проверка значений полей документов.

• Добавление и удаление полей в документах.

• Определение формы, используемых для открытия документа.

• Определение вычисляемых субформ в форме.

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

В Notes версий 3.x @-формулы были практически единственным средством для вычислений и автоматизации обработки информации. В 4-й версии появились по крайней мере еще два способа: один более простой, но ограниченный - простые действия (simple actions), другой более сложный, но богатый по своим возможностям - объектно-ориентированный язык программирования LotusScript.

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

6.1. Синтаксис формул

• Формула должна начинаться с ключевого слова, вызова функции, названия поля или константы; формула должна заканчиваться названием поля, константой или функцией.

• Операторы (statements) отделяются друг от друга с помощью ";".

• Аргументы @-функций отделяются друг от друга с помощью ";".

• Список аргументов функций заключается в скобки, если аргументы не требуются, скобки опускаются.

Можно размещать произвольное количество пробелов и переводов строки (в том числе ни одного) между операторами.

За ключевым словом должен следовать хотя бы один пробел.

Регистр (прописные или строчные буквы) не имеет значения, кроме как внутри текстовых констант. Ключевые слова автоматически преобразуются в верхний регистр при сохранении формулы.

6.2. Лексические элементы формул

Каждый оператор (statement) формулы (не путайте с арифметическими, логическими и т.п. операторами) состоит из некоторого количества переменных, констант, операторов (арифметических, логических и т.п.), @-функций и ключевых слов.

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

6.2.1. Переменные

Поля

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

RichText-поля, как правило, не могут использоваться как переменные. Тем не менее, в формуле агента можно присвоить значение такому полю с помощью ключевого слова FIELD и функции @DbLookup, которая может "достать" содержимое RichText-поля из другого документа. Функцию @IsAvailable(FieldName) можно использовать для установления факта наличия в документе поля (в том числе RichText) с таким именем.

Имена полей в формулах могут использоваться различными путями:

• Для определения значений по умолчанию. При создании нового документа, если в форме установлено "наследование" полей, возможны ссылки на поля в документе, который был открыт или выделен в момент создания. Эта возможность широко используется в Notes при разработке форм для документов-ответов, при создании новых документов "по образцу".

• В выражениях для получения новых значений с помощью операторов. Например, формула в колонке вида:

FirstName + " " + LastName, где FirstName и LastName - поля в документах, содержащие фамилию и имя.

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

• Название поля используется для ссылки на значение, содержащееся в поле, например, @Text(BirthDate).

• Название поля используется как текстовая строка, например, формула возвращает содержимое поля Status в документе, найденном по ключу "Virus Check":

@DbLookup("":"NoCache"; "RESEARCH":"SMITH\PROJECTS.NSF";

"In Progress"; "Virus Check"; "Status")

• Для задания значения поля:

• FIELD FieldName := Value; например, FIELD Status := "На контроле";

• @SetField("FieldName"; Value); например, @SetField("Status"; "На контроле");

Оператор с ключевым словом FIELD присваивает значение полю, если оно уже существует в документе, в противном случае создается новое поле с таким именем. Его тип данных определяется типом присваиваемого значения. Таким же образом можно и удалить поле из документа:

FIELD FieldName := @DeleteField.

Функция @SetField может только изменить значение существующего поля, но зато ее можно использовать в выражениях, в качестве аргумента функций, особенно @Do и @If.

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

VariableName := Value;

Тип данных временной переменной соответствует типу значения в правой части оператора присваивания. Этот тип может быть Text, Time, Number или Boolean. Последний - логический - возвращается некоторыми @-функциями и может принимать значения Истина (эквивалентно числу 1) или Ложь (эквивалентно числу 0).

Функция @Set позволяет изменить значение переменной в процессе выполнения формулы:

@Set(VariableName; Value);

6.2.2. Константы

Текстовые константы в формулах заключаются в кавычки: "Text constant".

Чтобы многократно повторить один и тот же символ используйте функцию @Repeat.

Обратный слэш "" внутри текстовой константы служит Esc-символом. Таким образом, если текст в формуле должен содержать символы " или перед ними нужно вставлять добавочный символ .

Числовые константы могут состоять из символов 0 1 2 3 4 5 6 7 8 9 - + E e, например, 123, -123, 1.23, -0.123, 1.23E-12. Десятичный разделитель должен соответствовать стандарту, установленному в операционной системе.

Дата-время (Time-date) константы должны быть заключены в квадратные скобки, например [5:30], [30.3.93] или [30.3.93 5:30]. Формат представления даты и времени (порядок следования, разделители и т.д.) должен соответствовать стандартам, установленным в операционной системе.

6.2.3. Операторы

В таблице перечислены арифметические операторы, операторы сравнения и логические операторы в порядке убывания приоритета:

Оператор Название, описание Приоритет Если операнды - списки

:= Присваивание -



: Объединение списков 1



- Изменение знака 2



*

**

/

*/ Умножение

Умножение

Деление

Деление 3 Попарное

Все со всеми

Попарное

Все со всеми

+

*+

-

*- Сложение

Сложение

Вычитание

Вычитание 4 Попарное

Все со всеми

Попарное

Все со всеми

=

*=

<>, !=, =!, ><

*<>

<

*<

>

*>

<=

*<=

>=

*>= Равно

Равно

Не равно

Не равно

Меньше

Меньше

Больше

Больше

Меньше или равно

Меньше или равно

Больше или равно

Больше или равно 5 Попарное

Все со всеми

Попарное

Все со всеми

Попарное

Все со всеми

Попарное

Все со всеми

Попарное

Все со всеми

Попарное

Все со всеми

!

&

| Логическое ОТРИЦАНИЕ

Логическое И

Логическое ИЛИ 6



Горизонтальные линии отделяют группы операторов с разным приоритетом. Если в одном выражении встречаются операторы одного приоритета, они выполняются слева направо. Изменить порядок выполнения можно с помощью круглых скобок.

Оператор (:) используется для объединения двух значений одного типа данных в список. Каждый из операндов сам может быть списком. Результат содержит все элементы первого операнда, затем все элементы второго. При многократном использовании в одном выражении можно объединить в список несколько значений:

"Moscow":"London":"New York":"Tokyo"

Операции (и операторы) со списками возможны двух типов:

Попарные (Pair-wise) - первый с первым, второй со вторым и т.д. Если один из списков короче, вместо недостающих элементов используется последний.

Все со всеми (Permuted) - каждый с каждым - перебираются все комбинации в следующем порядке: первый элемент первого списка со всеми элементами второго, затем второй элемент первого списка со всеми второго и т.д. Обозначение: перед обычным знаком операции вставляется *.

При операциях сравнения списков в обоих случаях для получения положительного результата всей операции достаточно положительного результата в одной паре.

6.2.4. Ключевые слова

DEFAULT - На время выполнения формулы присваивает полю значение по умолчанию.

DEFAULT FieldName := Value - устанавливает, что если в документе не задано поле FieldName, то до конца формулы или до присвоения этому полю другого значения будет считаться, что оно содержит значение Value.

ENVIRONMENT - Присваивает значение переменной среды, сохраняемой в файле NOTES.INI.

ENVIRONMENT EnvVariable := "TextString"

Для возврата значений таких переменных используется функция @Environment:

FIELD FieldName := @Environment("EnvVariable")

FIELD - Присваивает значение полю, сохраняемому в документе (в отличие от временных переменных). Может быть использовано как для создания новых, так и для изменения существующих полей.

FIELD FieldName := Valuе

REM - Позволяет включить в формулу комментарии.

REM "Это строка комментария!";

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

6.3. Как Notes выполняет формулы

6.3.1. Порядок выполнения

Notes выполняет действия в формулах слева направо, сверху вниз, завершая каждый оператор перед тем как перейти к следующему.

(1) Statement1;

(2) Statement2;

(3) Statement3;

(4) Statement4;

Вы можете прервать процесс выполнения, используя функцию @Return, однако, язык формул Notes не содержит операторов типа GoTo или For-Next, вам не удастся заставить его выполнить несколько раз какую-либо последовательность операторов, но можно "пропустить" во время выполнения какие-либо операторы с помощью функции @If.

Пишите формулы в том порядке, в котором они должны выполняться. Если оператор должен работать только при выполнении некоторого условия, используйте функцию @If для проверки этого условия:

@If( Condition_1; TRUE_Statement_1;

...; ...;

Condition_N; TRUE_Statement_N;

FALSE_Statement);

Чтобы заставить Notes выполнить несколько операторов при заданном условии, вставьте функцию @Do внутрь

@If:

@If( Condition;

@Do(Statement_1; ...; Statement_N);

FALSE_Statement);

6.3.2. Формулы, возвращающие значения

Большинство типов @-формул, если классифицировать их по месту применения (типу объекта, в котором они определяются), в результате выполнения должны возвращать значение. Значение может быть возвращено либо последним оператором формулы, либо функцией @Return, которая возвращает свой аргумент. В любом случае последним оператором в такой формуле должен быть оператор, возвращающий значение. Это может быть переменная, константа, @-функция или выражение составленное с помощью операторов из перечисленных элементов. Операторы с ключевыми словами (кроме в определенных случаях SELECT) не возвращают значений, поэтому не могут стоять последними в таких формулах. Следующие типы формул должны возвращать результат:

• Replication formula (формула селективной репликации). Результат - истина или ложь в критерии SELECT для каждого документа базы.

• Form formula (формула формы). Результат - имя формы для открытия документа.

• Selection formula (формула отбора документов в виде). Результат - истина или ложь в критерии SELECT для каждого документа базы.

• Column formula (формула колонки). Результат должен быть пригоден для конвертации в текст.

• Show action formula (формула видимости акции). Результат - истина или ложь.

• Formula pop-up (формула "всплывающего" окна). Результат - текст.

• Window title formula (формула заголовка окна). Результат должен быть пригоден для конвертации в текст.

• Section access formula (формула доступа к секции). Результат - имя или список имен.

• Insert subform formula (формула вычисляемой субформы). Результат - имя субформы (текст).

• Section title formula (формула заголовка секции). Результат - текст.

• Hidden paragraph formula (формула видимости абзаца). Результат - истина или ложь.

• Default value formula (значение поля по умолчанию). Результат должен быть пригоден для сохранения в данном поле.

• Input translation formula (формула преобразования). Результат должен быть пригоден для сохранения в данном поле.

• Input validation formula (формула проверки). Результат - истина или ложь.

• Computed field formula (формула вычисляемого поля). Результат должен быть пригоден для сохранения в данном поле.

• Keyword field formula (формула ключевых слов). Результат - список, пригодный для сохранения в данном поле.

6.3.3. Формулы, выполняющие последовательность действий

Перечисленные ниже типы формул могут не возвращать значения в результате выполнения, поскольку его просто некуда возвращать. Такие формулы только выполняют заданную последовательность операторов. Будем называть такие @-формулы @-программами.

• Активные пиктограммы работают на уровне рабочего пространства Notes и, следовательно, доступны как в видах, так и в документах.

• Агенты выполняются для каждого из отобранных документов (от всех до одного).

• Акции выполняются в виде или документе.

• Кнопки могут использоваться в навигаторе, форме или RichText - поле документа.

• Активные участки применяются в навигаторах, формах и RichText - полях.

6.3.4. Выполнение формул, содержащих вызовы @-команд

Функция @PostedCommand введена в 4-й версии Notes как замена для @Command 3-й версии с целью обеспечения совместимости, поскольку @Command 4-й версии выполняется иначе. Формула с @Command, написанная в 4-й версии не может быть выполнена в 3-й.

При выполнении указанных в формуле действий Notes всегда выполняет функции @PostedCommand (как @Command в 3-й версии) в последнюю очередь. Если в формуле имеется несколько вызовов функции @PostedCommand, они обрабатываются в порядке появления, но после всех остальных операторов и @-функций. Даже если для изменения порядка действий используется @Do, функции @Command выполняются в последнюю очередь.

Например, предположим, что приведенная ниже формула содержит ряд выражений, заключенных в скобки внутри функции @Do:

FIELD X :=

@If(условие;

@Do(@PostedCommand1; @Prompt; @PostedCommand2);

@Error)

При вычислении, если условие истинно, указанные в @Do действия будут выполняться в следующем порядке:

(1) @Prompt

(2) @PostedCommand1

(3) @PostedCommand2

@Do выполняет все не относящиеся к @PostedCommand действия в порядке слева направо; а после их завершения выполняет все @PostedCommand в том же порядке.

Предположим, вы пишете формулу, которая должна выполнять @PostedCommand, проверку @If, а затем несколько других действий, за которыми следует еще одна @PostedCommand. Notes выполнит действия в такой последовательности: проверка условия и соответствующее действие, затем прочие "обычные" действия, затем обе @PostedCommand.

Программа

(4) @PostedCommand([имя_команды]; параметр);

(1) @If(Условие; True_действие; False_действие);

(2) FIELD X := "Текст";

(3) FIELD Y := "Следующий текст";

(5) @PostedCommand([имя_команды])

Чтобы "заставить" Notes выполнить первую @PostedCommand перед проверкой @If и следующими за ней действиями, можно создать формулу-подпрограмму (ее нужно определить в "Run once" - агенте) и запускать ее с помощью дополнительной @PostedCommand:

Программа (в акции, кнопке, активной пиктограмме, активном участке, Run once - агенте)

(1) @PostedCommand([имя_команды];параметр);

(2) @PostedCommand([ToolsRunMacro];"(Subprogram)")

(Подпрограмма) (Run once - агент, запускаемый из списка агентов, с именем Subprogram)

(3) @if(Условие; True_действие; False_действие)

(4) FIELD X := "Текст";

(5) FIELD Y := "Следующий текст";

(6) @PostedCommand([имя_команды])

Вызовы функций @Command происходят при выполнении формулы в том порядке, в котором встречаются (вместе с другими операторами и @-функциями. Однако имеются исключения из этого правила. Перечисленные ниже типы @Command выполняются аналогично @PostedCommand, то есть после всех остальных действий:

• [FileCloseWindow]

• [FileDatabaseDelete]

• [FileExit]

• [NavigateNext]

• [NavigateNextMain]

• [NavigateNextSelected]

• [NavigateNextUnread]

• [NavigatePrev]

• [NavigatePrevMain]

• [NavigatePrevSelected]

• [NavigatePrevUnread]

• [ToolsRunBackgroundMacros]

• [ToolsRunMacro]

• [ViewChange]

• [ViewSwitchForm]

6.4. Формулы полей

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

6.4.1. Формулы редактируемых полей

Описание редактируемого поля содержит три формулы (все три не являются обязательными):

Default value - формула, определяющая значение редактируемого поля по умолчанию. Выполняется только один раз для каждого документа - при его создании. Пользователь затем может либо оставить в поле значение по умолчанию либо изменить его.

Примеры.

0 - числовое поле содержит по умолчанию значение 0;

@Now - в поле типа Time заносятся текущие дата и время;

@UserName - в текстовом поле появляется имя создателя документа;

Price - заносится значение из поля Price;

"Price" - строка текста Price;

Формула по умолчанию часто используется для наследования полей в новый документ из текущего документа, выделенного в виде или открытого для чтения/редактирования в момент создания нового. Для этого в свойствах формы нужно установить опцию Formulas inherit values from selected document. В формуле по умолчанию возможны ссылки на поля любого типа, сохраненные в документе - "родителе", т.е. все кроме Computed for Display (вычисляемое для показа) .

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

Input Validation - формула проверки соответствия сохраняемого значения заданным условиям. Выполняется каждый раз при сохранении документа или пересчете.

Если формула проверки возвращает значение 1 (@Success, @True или @Yes) - документ может быть сохранен. В противном случае - если 0 (@Failure( ), @False или @No) - документ не может быть сохранен, пользователь получает сообщение об этом и курсор устанавливается автоматически в данное поле.

6.4.2. Формулы полей произвольного текста

Поля произвольного текста (Rich Text) могут быть определены как редактируемые или нередактируемые. В обоих случаях описание поля содержит только формулу "по умолчанию".

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

6.4.3. Формулы вычисляемых полей

Формулы вычисляемых полей всех трех типов (Computed - вычисляемое, Computed for display - вычисляемое для показа, Computed when composed - вычисляемое при создании документа) определяются одинаково и похожи на формулу по умолчанию для редактируемых полей. Различия заключаются в условиях, при которых эти формулы выполняются.

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

Тип поля и формула Создание документа Сохранение документа Пересчет полей Загрузка документа в режиме чтения или ред.

Редактируемое, формула по умолчанию +



Если данного поля еще нет в документе (*)

Формула преобразования

+ +



Формула проверки

При втором проходе (**) При втором проходе (**)



Нередактируемое (Rich text) +



Если данного поля еще нет в документе (*)

Вычисляемое + +

*** +

*** Если данного поля еще нет в документе (*)

Вычисляемое для показа + +

*** +

*** +

Вычисляемое при создании +



Если данного поля еще нет в документе (*)

+ - Формула безусловно выполняется и возвращает значение в поле.

* - Если данного поля еще нет в документе. Документ открывается формой, в которую уже после его создания добавлено новое поле.

** - При втором проходе выполняются формулы проверок редактируемых полей.

*** - Формула еще раз выполняется после проверок редактируемых полей, если в свойствах поля установлена опция Compute after validation.

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

Если в свойствах формы установлена опция Formulas inherit values from selected document, для наследования в вычисляемые поля лучше использовать "Computed when composed" поля, так как их формулы выполняются только один раз - при создании документа. При наследовании в "Computed" - поле в его формулу нужно добавить проверку на "новый документ".

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

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

• Во втором - только формулы проверки редактируемых полей.

• В третьем, если проверка завершена успешно, и в форме есть вычисляемые или вычисляемые для показа поля с опцией "Compute after validation", их формулы выполняются повторно.

При каждом проходе общий порядок обработки полей один и тот же - слева направо, сверху вниз в соответствии с расположением полей в форме. Нарушается он только в областях размещения (layout regions). Если в форме встречается область размещения, внутри нее последовательность обработки полей может быть другой. По умолчанию она соответствует порядку создания или добавления полей в область размещения и совершенно не зависит от их взаимного расположения в ней. Изменить ее можно следующим образом: после создания всех полей нужно в требуемом порядке для каждого поля выполнить команду меню Design - Bring To Front.



КАТЕГОРИИ:

Network | английский | архитектура эвм | астрономия | аудит | биология | вычислительная математика | география | Гражданское право | демография | дискретная математика | законодательство | история | квантовая физика | компиляторы | КСЕ - Концепция современного естествознания | культурология | линейная алгебра | литература | математическая статистика | математический анализ | Международный стандарт финансовой отчетности МСФО | менеджмент | метрология | механика | немецкий | неорганическая химия | ОБЖ | общая физика | операционные системы | оптимизация в сапр | органическая химия | педагогика | политология | правоведение | прочие дисциплины | психология (методы) | радиоэлектроника | религия | русский | сертификация | сопромат | социология | теория вероятностей | управление в технических системах | физкультура | философия | фотография | французский | школьная математика | экология | экономика | экономика (словарь) | язык Assembler | язык Basic, VB | язык Pascal | язык Си, Си++ |