Лабораторная работа №5. Создание и свойства представлений.

3. Представления.

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

3.1. Линейные представления.

В дизайнере перейдите в пункт views и там нажмите New View. Откроется окно, в котором можно задать параметры представления – его название, формула, по которой в него будут отбирать документы. Тут же можно скопировать стиль уже существующего представления и задать тип нового.

Типы представлений:

1.  «Shared» - это представление, которое видят все одинаково. Разумеется, в настройках доступа к нему можно отрегулировать группы и роли, которые имеют, и не имеют доступ к этому представлению. Кроме этого, в зависимости от прав доступа, разные пользователи будут видеть в этом представлении разные документы. Однако если в таком представлении, используются колонки для подсчета, например суммарных значений по различным категориям, то независимо от прав доступа пользователь будет видеть итоговые суммы всех документов по категории. То есть, даже если пользователю не доступна половина финансовых документов, в таком представлении пользователь увидит суммарные значения по всем документам.

2.  «Shared, contains documents not in any folder» - представление множества документов, задаваемых формулой выбора, задает подмножество тех документов, которые не лежат ни в одной из папок.

3.  «Shared, contains deleted documents» - если в базе разрешено удалять документы «Soft deletion», то в это представление будут попадать документы, которые были удалены. Это представление аналог «Корзины» в WINDOWS. Оно задается администратором на последней закладке свойств базы.

4.  «Shared, private on first use» - это общее представление, которое становится видимым и принадлежащим только конкретному пользователю, после того как он первый раз откроет это представление. При этом создается копия этого представления, принадлежащая пользователю. Такие представления удобно использовать для решения задач показа, например, документов созданных пользователем. Формула выбора будет «Author=@UserName» - для каждого пользователя. Чтобы представление не пересчитывалось на сервере каждый раз, его надо делать именно такого типа. В такое представление, например, не попадут финансовые документы, которые пользователю не доступны и он не сможет увидеть суммы по всем категориям документов. ВНИМАНИЕ. Изменение дизайна родительского представления такого типа на сервере, НЕ вызывает автоматически такого же изменения в локальной копии. Поэтому каждый раз при изменении дизайна необходимо оповещать всех пользователей системы, чтобы они удалили старое представление и открыли его заново. Место хранения этого представления определяется самим пользователем.

5.  «Shared, desktop private on first use» - аналог предыдущего представления. Это представление будет храниться на десктопе пользователя (desktop. dsk файл) и для его удаления (чтобы получить новую версию дизайна) необходимо удалить с рабочей области иконку базы, подтвердив удаление приватного представления, и открыть базу заново.

6.  «Private» - это представление доступное только самому пользователю. Он сам его создает, если ему не хватает стандартных представлений базы. При наличии прав в ACL на создание приватных представлений, такое представление будет храниться в базе на сервере, если прав нет - то в desktop. dsk. После заполнения основных полей представление будет создано.

Свойства представлений.

Окна свойств открываются через пункт меню «Design > View Properties». На первой закладке указывается название представления и его псевдоним, комментарии, а также основной вид представления.

Как выглядит стандартное представление, в котором линейно упорядочены документы, вы уже видели ранее. Есть еще календарные представления, когда отображается календарь с датами, и каждый документ привязан к какой-то дате. Это свойство представления задается в окне «Style».

Далее, вторая закладка свойств представления:

1.  Первый чек-бокс - объявляет представление первой открываемой при открытии базы. Если не задан «frameset», и в нем не указано открытие другого представления, то будет открываться это. В базе должно быть представление с таким атрибутом, в случае отсутствия этого бывают проблемы при внешнем обращении к базе.

2.  Второй чек-бокс - объявляет, что по умолчанию дизайн вновь создаваемых представлений наследуется от этого представления.

3.  Третий чек-бокс - включает свертывание всех категорий при первом открытии базы. Эту опцию НЕЛЬЗЯ включать для представлений, которые используются в диалогах выбора и являются категорированными. Так как, если в диалоге выбора включить опцию выбора из конкретной категории, а категории при этом свернуты, то в окне выбора вместо документов не будет ничего. Эта опция используется для представлений, в которых отображаются не только документы, но и документы ответов (вспомните опцию свойств формы на первой закладке, где указывалось, что это будет за документ - основной или документ ответа (например, для форумов)).

НЕ нашли? Не то? Что вы ищете?

4.  Четвертый чек-бокс – «Отображать ответные документы как подчиненные». Включается «по умолчанию». В этом случае ответы отображаются под исходным документом с отступом.

5.  Пятый чек-бокс - показ этого представления в меню клиента View.

6.  Далее две опции - куда ставить курсор при открытии и что показывать для обновления.

Третья закладка свойств - это цветовая гамма представления и стили:

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

1.  Фон представления.

2.  Цвет суммы по столбцам (в самом низу представления считаются общие суммы по всем колонкам, если для столбца включен подсчет по ней сумм).

3.  Непрочитанные документы.

4.  Альтернативные строки. Каждую вторую строку рекомендуется подсветить другим оттенком.

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

6.  Можно включить, чтобы последний столбец визуально растягивался до конца экрана.

Второй столбец - параметры отображения столбцов и строк.

1.  Показывать заголовки столбцов или нет.

2.  Стиль этих заголовков - включены «Простые заголовки». Второй вариант «Наклонные» заголовки.

3.  Количество строк в заголовке. Количество строк в строках представления, идет вместе параметром, который включает сжатие до того количества строк, сколько в отображаемом значении. Например, есть описание документа длиной 35 слов. В одну строку оно не поместится. Можно включить в этой опции, что для одного документа, значение его поля в представлении отображать «до пяти строк». Тогда строчка представления станет на пять строк текста. Но если вторую опцию не включить, то для всех документов будет по пять строк. Если включить, то для документов, у которых в поле описание меньше текста, будет лишь требуемое для отображения количество строк.

4.  Расстояние между строками.

Четвертая закладка - показ представления в отдельном фрэймсете.

Пятая - параметры доступа через web.

Шестая разрешения, кому показывать представление. Для представления, которое создано по участникам в опциях доступа, должны быть выбраны роли: [MemberCreate]:[MemberRead]:[MemberEdit]:[Reader]:[Supervisor].

Формула выбора.

В формуле выбора задается множество документов, которые хотите видеть в этом представлении. Формула выбора конструируется по следующему правилу - ключевое слово SELECT + логический предикат, которому должны соответствовать документы. Логический предикат задается на языке формул, если он верен для документа, то документ попадает в представление. Например, чтобы отобрать документы всех участников голосования используется формула select form="member", а если надо построить представлении только по активным участникам, то select form="member" & status="Активный".

Можно задать формулу выбора при создании представления, и дальше ее изменить в свойствах представления «View Selection» в нижнем левом окне (открыв представление в дизайнере). Разработанное представление сейчас выглядит следующим образом:

Колонки в представлении и их свойства.

Чтобы отредактировать список колонок представления, нужно кликнуть правой кнопкой мыши на одной колонке, которая есть, и в появившемся контекстном меню выбрать опции вставки колонки, добавления, удаления.

Создайте колонки следующие столбцы:

1.  ФИО;

2.  Вес в голосовании;

3.  Контактной информации.

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

Щелкните на первом столбце и впишите формулу, которая выдаст по каждому документу конкатенация ФИО:

FirstName + “” + @If(@Trim(middlename)!=””; middlename+”;””)+LastName

Можно напрямую обратиться к полю - либо назвав его по имени в типе «формула», либо выбрав его из списка в типе «поле». Есть еще набор «Simple function», который выдает на документе некоторые его атрибуты, такие как дата создания, дата модификации, размер и т. д.

Теперь в следующей колонке поставьте формулу, которая отобразит числовое значение поля «weight» в виде числа с процентами. Для этого в столбце выберете значением поля «weight», потом надо вызвать свойства столбца (два раза кликнув по нему мышкой) и на закладке со значком «выбрать свойство «Percentage (value*100)».

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

БУДЬТЕ ВНИМАТЕЛЬНЫ С УНИКАЛЬНЫМ ИМЕНЕМ СТОЛБЦА!

При копировании и вставке столбца ИНОГДА Notes не обеспечивает уникальность имени и тогда, если у вас есть два столбца с одним именем, то второй - даже если вы зададите для него другую формулу - будет показывать то же, что и первый. На первой закладке свойств колонки указываются, перечисление идет сверху вниз, слева направо:

1.  Заголовок столбца - та подпись, которая будет отображаться вверху.

2.  Ширина столбца.

3.  Если в столбце отображается поле со списком значений то, какой разделитель использовать при отображении элементов списка.

4.  Разрешение пользователю увеличивать и уменьшать размер столбца.

5.  Опция, используемая в иерархических представлениях, которая включает отображение в столбце только документов-ответов.

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

7.  Отображение значений иконками - эта опция позволяет отображать встроенные в Lotus иконки в строках представления. Например, в представлении могут отображаться участники в разных статусах. Можно пометить каждый статус иконкой. Иконки имеют номера и при подстановке в формулу номера иконки и включения этой опции, в колонке будет отображаться маленькая картинка. Есть возможность отображения произвольной графики в качестве иконок, это будет рассмотрено далее.

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

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

Перечислим их сверху вниз и слева направо:

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

2.  Тип - линейный список или категорированный. Категорированный - это значит, что все строки, которые имеют в этой колонке одинаковое значение, будут объединяться в группу. Группа будет свертываться и раскрываться как секция. На одной из предыдущих картинок, представление было категорировано по первому столбцу, в который подставлялась информация об адресе.

3.  Далее идут параметры сортировки - распознавать большие и маленькие буквы или «accent sensitive»

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

5.  Далее параметр категоризации при версии клиента от 5 и выше.

6.  Включение опции сортировки для пользователя - если эта опция выбрана и далее указаны ее параметры, то в колонке представления появляются стрелочки, при щелчке мышью по которым эта колонка становится главным сортировочным столбцом представления и сортировка происходит по нему. У представления может быть N сортируемых столбцов, тогда сортировка происходит сначала внутри первого, потом по второму и т. д.

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

На третьей закладке свойств задаются параметры шрифтов в строках столбца.

На четвертой закладке свойств задаются параметры отображения чисел.

На пятой закладке свойств задаются параметры отображения дат.

На шестой закладке свойств задается отображение шрифтов в заголовке столбца.

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

3.2. Иерархические представления.

Иерархические представления, это представления, с помощью которого отображается иерархия документов. В иерархии один документ является ответом на другой. У каждого документа (за исключением самых верхних) есть только один «родитель». Как в Lotus выстраивается отношение «родитель-ответ» между документами:

В документе ответа есть служебное поле $REF, в этом поле хранится UniversalID родителя. Причем это поле имеет не текстовый тип, а внутренний тип Lotus «REFERENCE», то есть ссылка. Если строится представление, в котором выбираются документы родителей и ответов, а также указываются в свойствах представления, на второй закладке «Show response documents in hierarchy», то Lotus начинает отображать иерархию документов, основываясь на связи, установленной через поле $REF. Когда устанавливается тип формы «Response» или «Response to Response», то при создании документа по этой форме, в него автоматически вносится это поле и в него прописывается UniversalID документа, на котором стоял курсор, при создании документа ответа.

Рассмотрим пример построения иерархического представления:

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

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

В новом представлении напишите формулу выбора: SELECT form="voting"

Потом необходимо скопировать форму участника два раза и переименовать корпии в «Голосование» и «Бюллетень». Для формы «Бюллетень» установить тип формы «Response» и включить опцию включения в меню «Create». В качестве псевдонима этой формы предлагается «bill». Для формы «Голосование» - «voting». Исходя из этих псевдонимов, будут писаться формулы.

Для примера создайте несколько документов «Голосование», открыв «Design > Preview in notes» в дизайнере, и сохраните их.

Документы попадут в «новое» представление. Теперь стоя в представлении на одном из документов я создайте из меню «Create > Бюллетень» несколько документов бюллетеней. Вы увидите, что в «новое» представление эти документы не попадают. Включить документы в «новое» представление, можно изменив формулу выбора - SELECT form*="voting":"bill". Эта формула означает - выбрать документы, у которых форма «voting» или «bill». Предложенная формула использует конструкцию «переменная*=список элементов». Однако документов все равно не видно.

Теперь необходимо сделать столбец для их отображения. Этот столбец должен находиться перед столбцом, в котором отображается документ родитель и который, вы хотите, чтобы открывалась как категория. В нем должен быть выставлен флаг «Show responses» и в формуле для значения столбца указано поле или формула для полей документов-ответов:

Здесь стоит такая формула для столбцов, так как сейчас «Голосование» и «Бюллетень» - точная копия формы участника, и используются пока поля, которые есть в этих формах. Далее на всех столбцах, которые могут открываться и показывать документы ответов надо поставить «Show twisty when row». Если была создана двух уровневая иерархия, как в рассматриваемом примере, то это свойство на колонке с ответами не имеет смысла, но если иерархия может быть более двух уровней, то эту опцию включить необходимо, чтобы видеть также документы ответов на ответы. Включения категоризации нигде не требуется. Если все процедуры были проделаны правильно, получается представление, которое отображает иерархию документов.

Построение альтернативных иерархий.

В реальной жизни один документ может являться участником разных иерархий - например, документ отдела может быть ответом на другой отдел и документом ответа на карточку руководителя отдела. Поле $REF хранит не более одной ссылки. Выход в том, что строится иерархия по альтернативному полю. Например, в модели архитектуры объектов можно указать, что связь между объектами делается по полям HeadID & DeptID в документе отдела. По семантике именований полей понятно, что это ИД руководителя и вышестоящего отдела.

При создании документа отдела в нем указывается документ руководителя и документ вышестоящего отдела. В соответствующие поля вносятся UniversalID этих документов. Для того чтобы внести UniversalID не в виде строки, а в виде внутреннего типа «Reference», необходимо использовать Lotus script. Этот язык в данной работе не рассматривается, поэтому предполагается, что у документов отделов имеются два поля с UniversalID соответствующих родителей. Теперь достаточно построить иерархическое представление, но в формуле селекции произвести замену поля $REF, на поле, в котором хранятся иерархические связи, например:

DEFAULT $REF:=HeadID;SELECT (form*="department":"cposition") & breaked!="1"

3.3. Отображение произвольных картинок в представлениях.

При описании свойств столбца (первой закладке) уже обсуждалось использование стандартных иконок. Их, примерно, 180 штук (их таблица есть в Designer Help). В Lotus можно нарисовать свои иконки, положить их в «Image resources» и в формуле столбца использовать название этого ресурса в виде строки текста.

3.4. События представлений.

Представления, как и другие объекты, имеют события.

1.  QueryOpen - событие, которое происходит прямо перед открытием представление.

2.  PostOpen - после открытия представления на рабочем пространстве.

3.  RegionDoubleClick - событие календарного представления, которое происходит сразу после двойного щелчка мышью на элементе календаря.

4.  QueryOpenDocument - событие происходит прямо перед открытием документа из представления. На этом событии в картинке происходит выявление открываемого документа, у которого в этой базе нет формы, нахождение его родителя и открытие этого родителя. Событие открытия документа без формы возвращает «continue=False», поэтому исходный открываемый документ не открывается.

5.  QueryRecalc - событие, которое происходит при обновлении представления.

6.  QueryAddToFolder - происходит прямо перед операцией добавления документа в папку.

7.  QueryPaste - происходит прямо перед копированием документа в представление. Используя это событие можно делать какие-то проверки и запрещать вставку документов.

8.  PostPaste – с помощью этого события можно перехватить вставленный документ и что-то с ним сделать. Например, удалить, или поставить ему флаг, что документ является копией.

9.  QueryDragDrop - прямо перед выполнением действия Drag & Drop.

10.PostDragDrop после выполнения того же самого.

11.QueryClose - прямо перед закрытием представления.

Наряду с перечисленными методами, в представлениях можно применять метод «Form Formula». Если в нем указать имя формы, то все документы в этом представлении будут открываться и создаваться по этой форме, даже если в поле FORM самого документа стоит другое значение. То есть «Form Formula» перекрывает форму в поле «Form». Это правило не распространяется на документы, в которых форма хранится в самом документе (они создаются с помощью формы с флагом «Store in document»).

3.6. Продолжение дизайна полей базы, которые используют представления.

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

Предлагается выбрать поле типа «dialog List», вы можете взять другой тип, который вам более нравится.

В этом поле необходимо включить опцию на второй закладке «Allow values not in list». Эта опция позволит вводить новые значения. Опции списка на второй закладке выбираются «Use formula for choices». После этого необходимо написать в окно формулу, которая составит список изо всех, существующих значений этого поля в документах. Как такую формулу написать? Можно построить представление, в котором в первой столбце будет интересующее поле. Потом использовать формулу, которая получит список значений в этом столбце @dbcolumn("":"NoCache";@dbname;"имя представления";номер колонки), потом к результату применить формулу, которая проводит обработку списка («уникализации») - для удаления дубликатов @Unique(@dbcolumn(…))

Предлагается назвать представление (by Countries) - для поля со страной и (by Cities) для поля с городами, город (страна) будут в первом столбце, поэтому формула для поля будет выглядеть соответственно

@unique(@dbcolumn("":"NoCache";@dbname;"(by Cities)"; 1)) и

@unique(@dbcolumn("":"NoCache";@dbname;"(by Countries)"; 1)).

Создайте представления. Эти представления с именами в круглых скобках - скрыты от пользователя при просмотре представления из меню «View->goto».

При создании представления, необходимо сделать обычную «shared view», с формулой селекции select form="member" и одним единственным столбцом, содержащим соответствующее поле документа. Есть одна тонкость - ее надо запомнить:

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

В представлении столбец должен быть отсортирован.

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

Лабораторная работа №6. Создание и свойства агентов.

4. Агенты.

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

Агенты могут выполняться на сервере и на клиенте.

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

При создании агента (закладка «Agents > New agent») указывается:

1.  Имя | Псевдоним

2.  Общедоступность или персональность агента (эта опция не может быть изменена в будущем при редактировании агента).

3.  Каким образом запускается агент.

4.  На каком множестве документов агент запускается.

5.  Код агента.

6.  Есть ряд опций, которые отвечают за периодичность запуска, на каком сервере агент пускается, доступен ли он для публичных пользователей, сужает множество документов, на которых пускается агент и т. д. Эти опции регулируются кнопками Options, Schedule, Add Search.

4.1.Когда агент может быть запущен.

1. «Manually from action menu» - агенты, которые запускаются из меню Действия (Action) на указанном множестве документов. Чтобы в таком агенте это множество получить обычно используется код вида:

Dim session as new NotesSession - создание новой сессии, из которой в дальнейшем можно получить доступ к текущим объектам;

Set coll=session. currentDatabase. UnprocessedDocuments - получение текущей базы и коллекции необработанных документов;

Множество документов, которые будут для агента рассматриваться, как необработанные, задается второй опцией - Which documents should it act on.

3.  «Manually from agent list» - такие агенты вызываются из кода кнопок, событий и пр. Они недоступны обычному пользователю из меню. Их можно получить по имени из объекта текущей базы, например:

Dim session as new NotesSession.

Set agent=session. currentDatabase. GetAgent("Ulialia")

Call *****n или call *****nOnServer

При запуске агенту можно передать документ, на котором он должен отработать, и делается это следующим образом:

Передается в качестве строки NoteID этого документа в базе, то есть call *****nOnServer(doc. NoteID)/. В самом агенте переданный параметр и документ по параметру берутся так:

Dim session as new NotesSessiom

param=session. CurrentAgent. parameterDocID

set paramDoc=session. CurrentDatabase. GetDocumentbyID(param)

3.  Before (After) new mail arrives - прямо перед и сразу после прихода почты в базу.

4.  При создании нового или модификации существующего документа в базе.

5.  При вставке документа в базу.

6.  По расписанию - чаще раза в день, раз в день, раз в неделю, раз в месяц.

7.  По расписанию - никогда - это агенты, которые вызываются из других агентов.

Приведенное разграничение весьма условно. Всегда можно вызвать правильно написанный агент методом Run или RunOnServer. Чтобы не запутаться во всем множестве видов запуска для себя стоит понять и запомнить что:

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

2.  Есть агенты по расписанию. Их надо использовать для выполнения периодических задач.

3.  Есть агенты для работы с почтой.

4.  Есть агенты, которые запускаются на Web.

5.  Есть агенты, запускающиеся по событиям в базе.

Агенты из 3 и 4 пункта получают документ, с которым они работают через:

set doc=session.DocumentContext.

4.2.Множество документов, на которых запускается агент.

Можно это множество задать опциями в агенте - но это весьма и весьма негибко, а можно определить это множество в самом агенте - то есть в коде агента взять нужные документы, например, из специально для этого множества заготовленного представления или, воспользовавшись поиском, который создаст то же представление только динамически. Это сильно замедляет работу. Можно в самом агенте взять документ, например, как переданный параметр.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4