В этой лекции мы обсудим новые возможности, возникающие при интеграции IBM Lotus Notes и Domino 7 с IBM DB2 Universal Database (UDB). Там, где это необходимо, мы используем в качестве примера приложение ITSO Electronics для объяснения новых возможностей разработки приложений.
Ниже вы найдете информацию, в которой будут раскрыты следующие темы:
Lotus Notes и Domino имеют в арсенале широкий спектр средств для интеграции с реляционными базами данных, бизнес-системами, а также системами планирования и управления ресурсами предприятия (enterprise resource planning – ERP), такими как Lotus Enterprise Integrator, Domino Enterprise Connection Services, Data Connection Resources и Lotus Connectors LotusScript Extensions. Lotus продолжает эти традиции с Notes и Domino 7, предоставляя в распоряжение разработчика новые децентрализованные возможности разработки приложений для интеграции с реляционными базами данных IBM DB2, которые одинаково могут применять как бизнес-пользователи, так и ведущие разработчики приложений. Лаборатории Lotus и DB2 в пределах корпорации IBM работали вместе для улучшения интеграционных возможностей, а сервер Domino 7 обеспечивает возможность выборочно определить новые или существующие базы данных Domino, так как в них включена поддержка DB2. Пользователи получают открытый доступ к базам данных Domino с поддержкой DB2 через сервер Domino 7, но сами базы данных хранятся в DB2. Таким образом, становится возможным в базе данных Domino с поддержкой DB2 использовать реляционные конструкции, а также данные из базы данных Domino с поддержкой DB2 в реляционных конструкциях. В то же время сохраняется поддержка функций Notes API, включая репликацию данных, маршрутизацию почты и административный доступ. Так как IBM DB2 является реляционной системой базы данных, данные с отдельных баз данных DB2, таблиц, видов и интегрированных объектов могут быть легко скомбинированы в новые наборы данных, используя общие поля данных и отношения. Все это позволяет разработчику работать с данными и представлять их другими, более удобными способами, и облегчает создание более интегрированных и значимых приложений в среде Domino и других средах, использующих данные Domino, данные DB2 и реляционные возможности. Более подробно эти возможности мы обсудим далее в этой главе.
До того как использовать новые интеграционные возможности Domino и DB2, вы должны установить сервер DB2 и сконфигурировать сервер Domino 7 для подключения к серверу DB2. В Lotus Domino 7 новые интеграционные возможности доступны в операционных системах Microsoft Windows и IBM AIX $$\text{\textregistered}$$ 5LTM.
При настройке интеграции Domino и DB2 можно выбирать между локальной или удаленной установкой. При выборе локальной установки оба сервера, и Domino и DB2, будут установлены на одном компьютере. Локальную установку лучше использовать для тестовой среды или для системы с малой производительностью. На рис 2.1 показана система с локальной установкой.
(рис 2.1) Локальная установка: сервер Domino и сервер DB2 установлены на одном компьютере
Для систем с высокой нагрузкой на сервер, скорее всего, лучше будет выполнить удаленную установку. В таком случае сервер Domino и сервер DB2 будут установлены на разных компьютерах. На рис 2.2 представлен пример удаленной установки.
(рис 2.2) Удаленная установка: сервер Domino и сервер DB2 установлены на разных компьютерахСуществует два уровня интеграции с DB2. В первом случае сервер Domino и сервер DB2 устанавливаются на одном и том же компьютере, а во втором случае – на разных.
Если вы решили установить оба сервера на одном компьютере, вам необходимо выполнить приведенную ниже процедуру.
Если вы решили устанавливать оба сервера, Domino и DB2, на разных компьютерах, то вам необходимо выполнить следующую процедуру.
nnotes.dll не находится в PATH.В данном издании мы обращаем внимание на новые элементы разработки приложений, появившиеся в Domino 7. Поэтому рассматривается только основные моменты процесса установки. Для получения более подробной информации о том, как установить и обслуживать интеграцию Domino и DB2, обратитесь к следующим источникам:
USERS, ADMINS, GUESTS, PUBLIC, LOCAL или любыми другими зарезервированными словами SQL (Structured Query Language);IBM, SQL или SYS ;В Lotus Notes и Domino применяется иной принцип хранения данных по сравнению с тем, что используется в реляционных базах данных, таких как DB2. В реляционных базах данных информация упорядочивается и распределяется по строго структурированным таблицам, а в базе данных Domino документы или "записки" ( "notes" ), состоящие из списка полей, сохраняются в формате неструктурированного файла. Такой способ хранения информации усложняет доступ к данным Domino из DB2. Для решения данной проблемы в Domino 7 были введены DB2 Access Views, общие ресурсы, позволяющие определить представление DB2, обращающееся к данным Domino путем систематизации последних в таблицу, которую можно запросить с помощью языка структурированных запросов (SQL). DB2 Access Views являются элементами разработки приложений заднего плана и не видны конечным пользователям.
DB2 Access Views доступны только для баз данных, хранящихся на сервере DB2. Перед созданием DB2 Access View на сервере Domino должна быть активирована DB2 и база данных должна находиться в системе DB2. Если вы создадите локальную реплику базы данных или реплику на сервере Domino 7.0, на котором DB2 не активирована, то DB2 Access View будет находиться в базе данных, однако им нельзя будет воспользоваться или он не будет видимым в Lotus Domino Designer.
Когда в базе данных Lotus Notes включается поддержка DB2, Domino создает схему базы данных DB2 для хранения доступных пользователю представлений Lotus Notes. Имя схемы основывается на имени файла NSF. Любые созданные вами DB2 Access Views будут также расположены в этой схеме.
Когда вы создаете DB2 Access View, информация копируется в специальную таблицу DB2. После создания и инициализации данных в DB2 Access View Domino автоматически синхронизирует обновления между неструктурированными данными Domino и структурированными данными столбцов в DB2 Access View. Следовательно, обновлять DB2 Access View нет необходимости.
Для создания нового DB2 Access View вам необходимо выполнить приведенные ниже действия. К тому же вы можете обратиться к справке Lotus Domino 7 Designer, которую можно найти по следующему адресу в Интернете: http://www.lotus.com/ldd/doc/domino_notes/7.0/help7_designer.nsf
Shared Resources => DB2 Access views.
(рис 2.3) Закладка основных свойств DB2 Access ViewForm документа. Можно либо выбрать все формы, либо выбрать некоторые из доступных форм, приведенных в списке. Если у документа отсутствует поле формы, он будет включен в DB2 Access View, только если вы выберете пункт меню All Forms (Все формы).DB2 Inserts and Updates будут верны только в том случае, если вы выполните операторы insert или update SQL-выражения из DB2:Compute with form on DB2 insert or update (Пересчитывать по форме при операциях DB2 insert и update ). Включите эту опцию, если выбранные формы содержат вычисляемые поля и вы хотите, чтобы формулы были пересчитаны, когда документ создается или обновляется с помощью SQL.Default form to use for DB2 inserts (Форма по умолчанию для вставок DB2). Пользователи DB2 могут осуществлять операции вставки, обновления и удаления (если у них есть права на это) с данными в DB2 Access View. В Domino 7 можно выбрать только один тип документа (основанный на форме) для создания с помощью SQL-оператора INSERT. Документы любого типа (основанные на любой форме) могут быть обновлены или удалены из SQL.
(рис 2.4) Закладка Advanced окна DB2 Access ViewЗдесь вы можете выбрать приведенные ниже опции:Include UNID in access view (Включить UNID в access view).Когда вы установите этот флажок, вы сможете получить доступ к уникальному идентификатору документа Lotus Notes ( UNID ) через DB2 Access View.
Include OID in access view (Включить OID в access view).OID расшифровывается как Origination Identifier (идентификатор создания). Если вы выберете эту опцию и выберете ее в SQL-формуле Query View, то ссылки документа будут работать, когда элементы вида выбраны и скопированы в виде таблицы.
Include modified time in access view (Включить отметку времени изменения документа в access view).Выберите эту опцию, чтобы включать отметку времени изменения документа в Notes для каждой записи в DB2 Access View. Обратите внимание на то, что эта отметка времени преобразуется в стандарт GMT (Гринвичское время).
Normalize to GMT for time zone conversions (Нормализировать под GMT для осуществления преобразований между различными часовыми поясами).Выберите эту опцию, чтобы стандартизировать все даты и временные отметки в виде DB2 под GMT. Данная опция особенно полезна для распределенных приложений DB2, к которым обращаются пользователи, находящиеся в разных часовых поясах.
(рис 2.5) Окно DB2 Access View Choose FieldChoose Field вы можете:В Domino 7 DB2 Access View может содержать максимум 84 столбца. Если вам понадобится большее количество данных, придется определить несколько DB2 Access Views.
ОК для подтверждения выбора.Список выбранных элементов DB2 Access View появится в рабочей области.
Insert Field (Вставить поле), чтобы включить дополнительные поля.Возможно, вы захотите добавить поля, находящиеся вне выбранных форм. Например, возьмем поле Form. Вы можете вручную добавить его с помощью командной кнопки Insert Field. Каждый раз, когда вы используете подобное действие, появляется безымянный элемент DB2 в рабочей области.
(рис 2.6) Свойства Access View EntryДля полей, которые были добавлены с помощью команды Insert Field, первые три свойства должны быть заполнены. Для полей, выбранных из форм, соответствующие свойства заполняются автоматически. В этом окне присутствуют следующие поля для заполнения:
Field Name (Название поля).В это поле необходимо ввести соответствующее имя поля для столбца DB2 в DB2 Access View, поэтому необходимо ввести реальное имя поля, которое появится в записи (в противном случае соответствующее поле найдено не будет и столбец при просмотре в DB2 будет пустым).
Notes type (Тип данных Notes).Показывает тип данных Lotus Notes для этого поля.
Notes не поддерживаются в DB2 Access Views: Formula, rich text , rich text light.DB2 Type (Тип данных DB2).Показывает тип данных DB2 для данного поля. Lotus Notes присваивает этому полю значение по умолчанию, связанное с типом выбранного поля Notes.
integer ), определенное в DB2 Access View, и вы пытаетесь обновить этот столбец с помощью операторов SQL INSERT или UPDATE, используя при этом действительное число ( real ), то перед обновлением DB2 преобразует действительное число в целое, и десятичная часть числа будет отброшена.Представленные ниже атрибуты значимы для всех элементов DB2 Access View.
Create DB2 index field (Создать индексированное поле DB2). Этот столбец DB2 индексируется для увеличения скорости поиска по базе данных. Используя приведенную ниже команду, эта опция создает DB2-индекс, основанный на столбце таблицы:> CREATE INDEX ON TABLE x (coly)Использование индексов требует дополнительного пространства на системе хранения и обновления большего количества ресурсов, зато запросы такого типа выполняются намного быстрее, особенно если в
TABLE x хранится большое количество строк:> SELECT cola, colb, colc FROM x WHERE coly=<some value>Индексация в DB2 – это расширение возможностей для разработчиков в среде Domino, однако существуют индексы, оптимизирующие выборку данных, которые нельзя создать в Domino Designer. Например, эта команда оптимизирует следующий запрос:
> CREATE INDEX ON TABLE x (cola, colb, colc)В данном примере индекс используется для сортировки данных. При отсутствии индекса, когда таблица увеличивается, эта операция является наиболее ресурсоемкой:
> SELECT cola, colb, colc FROM x WHERE cola = <some value> ORDER BY cola, colb, colc
DB2 column length (Длина столбца DB2). Это свойство определяет длину столбца в DB2 Access View. При выборе значения для данного поля зачастую приходится искать компромисс между противоположными целями. Возможно, вы захотите отобразить максимально возможное количество полей, но помните, что максимальная длина столбца непосредственно влияет на пространство, занимаемое DB2 Access View в базе данных DB2. При преобразовании полей Notes необходимо помнить о том, что существует предел максимального количества данных, которые можно сохранить в таблице DAV. Длина всех полей данных вместе с зарезервированным DB2-пространством не может превышать 16384 байт. Если необходимо хранить более 16000 байт данных, то часть текстовых полей можно преобразовать в тип LONG VARCHAR. При преобразовании поля в этот тип данных, в таблице сохраняется небольшой "локатор" ("locator"), а текущее поле данных (до 32000 байт на одно поле)
сохраняется в виде большого символьного объекта (Character Large Object, CLOB ). Использование CLOB позволяет увеличить емкость DAV (84*32000), однако вы должны использовать тип LONG VARCHAR, только если не можете поместить данные "линейно", так как CLOB работает медленнее и занимает больше дискового пространства, чем линейное хранение данных. При создании или обновлении DB2 Access View сервер Domino автоматически проверит DB2 Access View на превышение максимальной длины; таким образом, не придется вручную считать длину. Тем не менее, вы можете использовать рекомендации, приведенные в табл. 2.1, для оценки "линейной" длины данных.| Тип | Длина в DAV | Комментарии |
|---|---|---|
VARCHAR |
5 + заявленная длина | Например, для хранения VARCHAR(40) потребуется 45 байт |
LONG VARCHAR |
25 | Линейный локатор |
DOUBLE |
9 | Фиксированный размер |
TIMESTAMP |
11 | Фиксированный размер |
DATE |
5 | Фиксированный размер |
TIME |
4 | Фиксированный размер |
INTEGER |
9 | Фиксированный размер |
Allow truncation of Notes data (Позволить усечение данных Notes ). Иногда размер поля может быть больше, чем максимальная длина столбца, которую вы определили для элемента DB2 Access View. Когда вы разрешите усечение данных, содержание по достижении максимальной длины будет обрезаться. Если вы не разрешите усечение, то при достижении предела во время заполнения DB2 Access View на консоли сервера появится следующее сообщение: "Access Table field data exceeds defined length".В Domino 7 параметр Allow truncation of Notes data по умолчанию отключен. В дальнейшем мы настоятельно рекомендуем включить этот параметр для всех элементов DB2 Access View Entry, в которых содержатся текстовые данные. Однако существует одно исключение: если вы планируете делать SQL-запросы на обновление DB2 Access View из DB2, этот параметр дает разрешение на усечение данных до заданной длины, что может привести к потере данных.
Allow truncation of Notes data для всех элементов Access View.Тип данных Lotus Notes TIMEDATE позволяет хранить дату, время, временную зону, а также индикатор летнего времени, однако временная отметка DB2 позволяет хранить только дату и время. В DB2 считается, что все даты и время локальны по отношению к часовому поясу сервера DB2. Это может привести к неверному отображению времени при экспортировании данных с типом TIMEDATE в DB2 Access View или к чтению данных с типом TIMESTAMP из DB2 в Query View (вне зависимости от того, откуда они взяты: из DB2 Access View или же из других таблиц DB2).
Существует два варианта сохранения даты и времени в DB2 Access View: локальное (местное) время или время, измененное в соответствии с GMT (стандартизованное). Вы можете изменить способ работы с ними, используя параметр "Normalize to GMT for на закладке Advanced окна свойств Access View Entry.
При вставке или обновлении диапазонов дат в документе, расположенном внутри DB2 Access View через SQL, необходимо определить диапазоны дат в полном формате временной отметки DB2, например такой, как yyyy-mm-dd-hh.mm.ss.subsec (год-месяц-день-час.минута.секунда.миллисекунда) или 2005-12-12-08.06.30.123456. Если при выполнении данного этапа произошла ошибка, вставленное значение будет не определено или равно нулю.
При выборе DB2 Access View в Domino Designer показывается список всех DB2 Access View, находящихся в базе данных. Перед каждым DB2 Access View отобразится иконка, показывающая его статус. Данные иконки с соответствующими расшифровками приведены на рис 2.7.
(рис 2.7) Иконки, символизирующие статус каждого DB2 Access View
Вы можете создать сколь угодно много DB2 Access View в базе данных, например по одному на каждую форму. Но может оказаться проще создать один или два больших DB2 Access View и включить в них данные из всех форм, к которым вы хотите иметь доступ. Чтобы ограничить количество столбцов в DB2 Access View, попробуйте использовать одинаковое имя для соответствующих полей в разных формах.
Domino невероятно гибок, когда дело доходит до полей и соответствующих им типов данных. Два документа, основанных на одной и той же форме, в Lotus Notes и Domino могут иметь разные типы данных. Это преимущество в гибкости может вызвать проблемы, например когда вы попытаетесь создать DB2 Access View. DB2 крайне строга по отношению к типам данных. Необходимо будет часто чистить данные в базе данных, а также быть уверенным в том, что содержимое всех полей, использованных в DB2 Access View, обладает одним и тем же типом данных.
Если в документе Lotus Notes будет потеряно какое-либо поле, или значение этого поля будет отсутствовать, то никаких проблем не возникнет. В DB2 Access View значение такого поля будет просто установлено =NULL, и при любых запросах, касающихся этого поля, будет отображаться пустое значение. Поля с типом и formula не поддерживаются в DB2 Access View. Если вы включите такие поля в DB2 Access View, то сообщения об ошибке выдаваться не будет, но вместо содержимого поля будет отображаться NULL.
Размеры DB2 Access View и его элементов (таблиц, видов, триггеров и индексов) не включаются в итоговый размер файла базы данных Lotus Notes с поддержкой DB2, для которой оно было создано. Таким образом, если у вас есть множество DB2 Access View, связанных с базой данных Lotus Notes с поддержкой DB2, следует помнить, что они займут такое количество дискового пространства, которое будет превышать дисковое пространство, отведенное под саму базу данных Lotus Notes с поддержкой DB2. Но опасения, что DB2 Access Views будут занимать большее количество дискового пространства, оказались необоснованными. На ранних этапах тестирования в IBM было показано, что даже DB2 Access View с большим количеством столбцов обычно занимает всего лишь от 2% до 3 % от дискового пространства, занимаемого базой данных.
В нашем сценарии, приведенном в качестве примера, компании ITSO Electronics требуется использовать новую возможность Query Views, к обсуждению которой мы перейдем в п. 2.3, "Query Views". Для того чтобы подготовить базу данных к использованию Query Views, нам необходимо создать несколько DB2 Access View. В этом примере мы решили использовать только по одному DB2 Access View на каждую базу данных Lotus Notes приложения ITSO Electronics.
Для начала создадим DB2 Access View для базы данных ITSO Electronics Sales, которую назовем SALESDAV.
В табл. 2.2 представлены выбранные поля.
| Поле, включенное в DB2 Access View | Форма |
|---|---|
ANumber
|
Sales Activity
|
CustomerName
|
Sales Activity
|
Следующий DB2 Access View, который мы создадим в базе данных ITSO Electronics Customer, будет называться CUSTOMERDAV (см. табл. 2.3).
| Поле, включенное в DB2 Access View | Форма |
|---|---|
customerAddress
|
Customer
|
И, наконец, мы создадим DB2 Access View в базе данных ITSO Electronics Products и назовем его CUSTOMERDAV.
| Поле, включенное в DB2 Access View | Форма |
|---|---|
productDescription
|
Product
|
productName
|
Product
|
FORM |
Product, Supplier |
В дальнейшем мы используем эти DB2 Access Views при создании Query View, которое рассмотрено в п. 2.3, "Query Views".
Query Views – это новый тип видов в базе данных Notes (NSF). Они заполняются путем выполнения запросов, написанных на языке структурированных запросов (SQL). На первый взгляд кажется, что виды Query Views – это всего лишь еще один способ сбора и представления данных. Однако при более пристальном изучении становится очевидно, что Query Views заставляют вас по-новому посмотреть на данные в Lotus Domino. Здесь впервые возможно отображать информацию более чем из одной базы данных Lotus Notes в пределах одного вида. Вы можете использовать приведенные ниже конструкции SQL.
Join.Документы, находящиеся в несвязанных элементах разных DB2 Access View, объединяются в одну строку в Query View. Полностью этот процесс описан в п. 2.3.2, "Создание Query View с помощью оператора Join".
Union.Элементы из различных DB2 Access Views собираются в одно представление. Мы остановимся более подробно на этом аспекте в п. 2.3.3, "Создание Query View с помощью оператора Union".
Group by.Having.Запросы динамически строятся на основе языка SQL и не занимают места в базе данных. SQL-выражение, в свою очередь, может быть динамически построено с использованием языка формул Lotus Notes. Вы можете свободно использовать такие @-формулы, как @Username и @Today, не опасаясь возникновения проблем с индексированием, которые могли бы возникнуть в стандартных представлениях Lotus Notes. Можно даже управлять содержимым представления с помощью @-формулы взаимодействия пользователя с системой @Prompt. Описанием подобного рода аспектов мы займемся в п. 2.3.4, "Динамическое создание Query Views с помощью @-формул".
Query View не способен напрямую отображать данные документа Lotus Domino. Чтобы сделать это, необходимо в первую очередь, создать DB2 Access View, как описано в п. 2.2.1, "Создание DB2 Access Views". Затем можно приступить к созданию Query View, выполнив приведенную ниже последовательность действий.
(рис 2.8) Окно Create View"SELECT * FROM SALES.SALESDAV"Вы обращаетесь к DB2 Access View в базе данных, используя название схемы DB2 и название DB2 Access View:
DB2SCHEMANAME.DAVNAME. В п. 2.3.4, "Динамическое создание Query Views с помощью @-формул".
Notes Preview (Предварительный просмотр Notes). Обращаем ваше внимание на то, что кнопка Refresh на панели программирования не позволяет увидеть представление в Domino 7.Возможно, вы захотите разделить на части ваше SQL-выражение и записать его в несколько строк для удобочитаемости, как показано в примере 2.2, однако применение такого метода при написании SQL-выражений приведет к появлению сообщений об ошибках.
"SELECT SALES.SALESDAV.CUSTOMERNAME FROM SALES.SALESDAV"
Когда мы работали над созданием приложения ITSO Electronics, то пришли к выводу, что написание SQL-выражений в виде строк, объединенных знаком "+", позволяет достигнуть той же легкости при чтении и что, самое главное, они работают в Lotus Domino 7. См. . Каждая часть SQL-выражения должна быть заключена в кавычки.
"SELECT "+ "SALES.SALESDAV.CUSTOMERNAME "+ "FROM "+ "SALES.SALESDAV"
Язык SQL позволяет использовать упрощенный способ написания SQL-выражений, в котором используются псевдонимы для источников данных. Код программы, представленный в примере 2.3, можно переписать по-другому (см. ). Хотя фактически разницы нет, впоследствии этот способ написания SQL-выражений поможет вам понять более сложные примеры.
"SELECT "+ "S.CUSTOMERNAME "+ "FROM "+ "SALES.SALESDAV S"
В Lotus Domino 7 вы можете соединить данные из различных DB2 Access Views в один Query View. При этом не играет никакой роли, находятся ли DB2 Access Views в одной базе данных или в разных. Каждый элемент представления может показывать связанные данные, взятые из различных документов, что возможно благодаря DB2 Access Views.
На рис 2.9 показано, как информация из DB2 Access Views ORDERDAV и CUSTOMERDAV объединяется в ResultSet SQL.
(рис 2.9) Создание Query Views, с использованием оператора JoinВ примере 2.5 показано соответствующее SQL-выражение, которое было использовано для этой цели.
"SELECT "+ "S.AType, S.Anumber,S.Product1 , C.CUSTOMERNAME, C.OWNERNAME, "+ " S.CUSTOMERNUMBER, S.MadeSale "+ "FROM "+ "SALES.SALESDAV S "+ "Left outer JOIN "+ "CUSTOMER.CUSTOMERDAV C "+ "ON "+ "S.CustomerNumber=C.CustomerNumber "+ "WHERE "+ "C.OWNERNAME<>''"
На рис 2.10 показано представление Customer Sales, созданное на основе SQL-выражения, рассмотренного в примере 2.5.
(рис 2.10) Query View, созданный при помощи оператора Join
Компания ITSO Electronics настаивает на том, чтобы все ее внешние контакты были объединены в одно представление. При этом информация о поставщиках хранится в базе данных показано, как с помощью оператора Union происходит создание Query View из отдельных DB2 Access View.
(рис 2.11) Создание Query Views, с использованием оператора UnionВ примере 2.6 показано SQL-выражение, используемое для сбора данных представления, в котором содержатся все внешние контакты компании ITSO Electronics. Для того чтобы оператор Union заработал, необходимо, чтобы каждая формула отбора возвращала одинаковое число столбцов с одинаковыми именами столбцов. К тому же у соответствующих столбцов каждого набора результатов должны быть соответствующие типы полей.
"SELECT " + "C.CUSTOMERNUMBER as NO, C.CUSTOMERNAME as EXTERNALNAME, "+ "C.CUSTOMERADDRESS as ADDRESS, C.CUSTOMERDESCRIPTION as Description, "+ "C.Form as form "+ "FROM "+ "CUSTOMER.CUSTOMERDAV C " + "WHERE "+ "C.FORM='Customer' "+ "UNION ALL "+ "SELECT "+ "S.SUPPLIERNUMBER as NO, S.SUPPLIERNAME as EXTERNALNAME, "+ "S.SUPPLIERADDRESS as ADDRESS, S.SUPPLIERDESCRIPTION as Description, "+ "S.Form as form "+ "FROM "+ "PRODUCTS.PRODUCTDAV S " + "WHERE "+ "FORM ='Supplier'"
На рис 2.12 показан Query View, отображающий данные поставщиков и покупателей компании ITSO Electronics, располагающиеся в различных базах с использованием SQL-кода, приведенного в примере 2.6.
(рис 2.12) Query View, созданный с помощью объединения
Во всех приведенных и использованных до сих пор примерах применялись Query View. К счастью, Lotus Domino 7 позволяет составлять текст Query View на языке @-формул.
В примере 2.7 представлено простое SQL-выражение, которое "собирает" все мероприятия по сбыту для покупателя "ITSO" из DB2 Access View SALESDAV. Для этой цели в нем используется условие S.CUSTOMERNAME='ITSO'.
""SELECT "+ "S.CUSTOMERNAME, S.ATYPE,S.ANumber , S.MADESALE "+ "FROM "+ "SALES.SALESDAV S "+ "WHERE S.FORM='Sales Activity' AND S.CUSTOMERNAME='ITSO'"
Вместо этого статического выражения вы можете динамически выбрать название компании при открытии представления. Для достижения этой цели вам необходимо добавить в код команду .
_CUSTOMER:=@Prompt([OKCANCELEDIT];"Выбор компании"; "Пожалуйста, укажите название компании, которую хотели бы найти.";""); "SELECT "+ "S.CUSTOMERNAME, S.ATYPE,S.ANumber , S.MADESALE "+ "FROM"+ " SALES.SALESDAV S "+ "WHERE S.FORM='Sales Activity' AND S.CUSTOMERNAME='"+_CUSTOMER+"'"
Теперь каждый раз при запуске этого кода перед пользователем будет появляться запрос на ввод имени покупателя.
Как уже было отмечено в п. 2.3.1, "Создание Query View", вы не можете быть уверены в том, что название схемы SQL для базы данных останется тем же после того, как она будет скопирована или продублирована на другом сервере. Поэтому рекомендуется избегать статических ссылок на схему базы данных в ваших SQL-выражениях. Способ обхождения этого ограничения состоит в использовании функции @DB2Schema которая была внедрена в Lotus Notes и Domino 7. Описание данной функции см. в п. 4.5, "Дополнения к языку формул". Чтобы получить SQL DB2Schema для текущей базы данных, необходимо использовать команду @DB2Schema вместе с функцией @DBName. Если поместить эти команды в SQL-выражение из примера 2.7, мы получим код, похожий на тот, что представлен в примере 2.9.
_Schema:= @DB2Schema(@DBname); "SELECT "+ "S.CUSTOMERNAME, S.ATYPE,S.ANumber , S.MADESALE "+ "FROM "+ _Schema +".SALESDAV S "+ "WHERE S.FORM='Sales Activity' AND S.CUSTOMERNAME='ITSO'"
Также может возникнуть необходимость написать SQL-выражение, позволяющее получить доступ к DB2 Access View в другой базе данных. Если предположить, что эта база данных находится в той же папке, что и текущая, то SQL-выражение, основанное на примере 2.7, будет похоже на решение, представленное в примере 2.10.
_pathOnly:=@LeftBack(@Subset(@DbName;-1);"\\");_path:=@If(_pathOnly="";"";_ pathOnly+"\\");_Server:=@Subset(@DbName;1);_Schema:= @DB2Schema(_Server:@ Trim(_path+"Sales.nsf"));"SELECT "+"S.CUSTOMERNAME, S.ATYPE,S.ANumber , S. MADESALE "+"FROM "+_Schema +".SALESDAV S "+ "WHERE S.FORM='Sales Activity' "
Если при создании SQL-выражения вы не будете уверены в том, по какому пути находится база данных, к которой необходимо получить доступ, можно воспользоваться одной из приведенных ниже команд для получения информации о пути интересующей вас базы данных из конфигурационных документов:
@DBLookup@Environment@GetProfileFieldВ классическом представлении Lotus Notes каждая запись связана с документом напрямую. Таким образом, вы можете открывать, копировать и удалять документы из каждого представления. Однако для Query View, основанном на SQL-операторах, так бывает не всегда. Перед тем как вы сможете открывать, копировать и удалять какие-либо данные из Query View, необходимо выполнить ряд определенных условий. Строка Query View будет соединена с документом, находящимся в базе данных Notes, если вы включите столбец #NOTEID из DB2 Access View в ваш запрос и этот #NOTEID будет являться корректным Note ID в открытой базе данных Notes.
Например, в нашем исходном Query View, приведенном в качестве примера, мы выполнили следующий запрос:
SELECT * FROM SALES.SALESDAV
По сути этот запрос выбирает столбец #NOTEID из DB2 Access View, следовательно, создается связь между строками Query View и связанными с ними документами Notes. Приведенный ниже запрос не выбирает #NOTEID из DB2 Access View, поэтому строки в этом Query View не будут связаны с соответствующими документами и сгенерируется ошибка, если вы попытаетесь ими манипулировать (например, дважды щелкнете левой кнопкой мыши):
> SELECT CUSTOMERNAME FROM SALES.SALESDAV
Если вы выбираете ограниченное число столбцов из DB2 Access View, вам следует отдельно выбрать столбец #NOTEID, например:
> SELECT CUSTOMERNAME, #NOTEID FROM SALES.SALESDAV
Если вы выполняете операцию JOIN с несколькими DB2 Access Views, убедитесь в том, что вы точно выбрали столбец #NOTEID, который является корректным Note ID (идентификатором записи) в текущей базе данных Notes.
Простейшую связь между видом и документом Notes представляет собой #NOTEID. Тем не менее, некоторые функции, такие как копирование или создание ссылки на документ, требуют OID (идентификатор автора документа). Если вашему приложению требуется такого рода функциональность (или же вы хотите, чтобы взаимодействие с Query View было больше похоже на взаимодействие с обычными представлениями), включите опцию экспортирования #OID в DB2 Access View (ее можно включить на дополнительной закладке окна свойств DB2 Access View), а также включите в ваши запросы #OID.
Обратите внимание на то, что при выборе данных из разных DB2 Access View, необходимо конкретно указать, из каких DB2 Access View выбирать соответствующие столбцы, например:
SELECT S.AType, S.Anumber,S.Product1 , C.CUSTOMERNAME, C.OWNERNAME, C.#NOTEID, C.#OID, S.CUSTOMERNUMBER, S.MadeSale FROM SALES.SALESDAV S Left outer JOIN CUSTOMER. CUSTOMERDAV C ON S.CustomerNumber=C.CustomerNumber WHERE C.OWNERNAME<>''
В начальном релизе Lotus Domino 7.0, к сожалению, функция просмотра .
Несмотря на то, что Query View позволяет открывать документы в представлении, доступ к ним можно получить и с помощью LotusScript (см. п. 2.3.5, "Открытие документов из Query Views"). В нашем случае подойдет простой скрипт, приведенный в примере 2.11. Если вы не можете открыть документы из Query View, то скрипт вызовет ошибку времени выполнения "Object variable not set".
Sub Click(Source As Button)
Dim session As New notessession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As notesdocument
Dim Item As notesitem
Set db=session.currentdatabase
Set view =db.Getview("<ПРЕДСТАВЛЕНИЕ>")
Set doc=view.GetFirstDocument ' <===========================================
Do While Not doc Is Nothing
Set Item =doc.GetFirstItem("<ЭЛЕМЕНТ В БАЗЕ ДАННЫХ>")
Print(item.text)
Set doc=view.GetNextDocument(doc)
Loop
End Sub
Существует еще один способ получить доступ к данным в Query Views, не позволяющих открыть документы с помощью LotusScript. Доступ к таким представлениям необходимо осуществлять через класс View Entry, как показано в примере 2.12.
Sub Click(Source As Button)
Dim session As New notessession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As notesdocument
Dim Item As notesitem
Dim entry As NotesViewEntry
Set db=session.currentdatabase
Set view =db.Getview("<Имя Вашего представления>")
Set Entry = View.GetEntryByKey( "<Имя элемента представления>", True)
Msgbox(entry.ColumnValues(1))
End Sub
Как и любое другое представление, вы можете внедрить ). Для получения дополнительной информации о создании внедренных представлений, обратитесь к справке Lotus Domino 7 Designer, доступной по следующему адресу: http://www.lotus.com/ldd/doc/domino_notes/7.0/help7_designer.nsf
(рис 2.13) Query View, внедренный в форму Sales Person приложения ITSO Electronics
В этом разделе приведены дополнительные аспекты, касающиеся Query View.
В DB2 Access Views текстовые списки хранятся в виде текстовой строки, и поскольку Query View считывает данные из DB2 напрямую, именно эта текстовая строка и возвращается в Query View. Таким образом, если у вас есть списковый элемент, который вы хотите разделить в вашем Query View, необходимо использовать функцию @ в столбце, содержащем несколько значений. Чтобы убедиться в том, что представление способно работать с несколькими строками данных, в окне свойств View $$\Rightarrow$$ выберите закладку Style, после чего установите параметры Row Height и Shrink Rows to Content в соответствии с вашими данными.
Учитывая то, что Query Views можно построить из комбинаций данных Notes и интегрированных данных, обновление Query View зависит от содержания добавленных или измененных данных и от того, как эти данные были добавлены.
По умолчанию максимальное количество строк, возвращаемых по запросу SQL, равно 500. Существует два способа изменения этой величины:
DB2QueryViewRowLimit=величина в файле NOTES.INI.Установите значение величины, равное нулю, если хотите снять ограничение с количества возвращаемых строк.
(рис 2.14) Закладка Options в окне свойств View
До этого пункта мы занимались обсуждением Query Views, отображающих данные Lotus Domino путем выборки из DB2 Access View. Однако можно создать Query Views, способные отображать любые данные, видимые базе данных DB2, используя DB2 federation – мощный компонент интеграционной архитектуры DB2 и Domino. Интегрированные данные – это данные, которые хранятся в базах данных, не являющихся базами данных Lotus Domino (например, Oracle, Microsoft SQL или другие базы данных DB2). Их можно сделать видимыми для Lotus Domino, изменив конфигурацию базы данных Lotus Domino, включив в ней поддержку интеграции. Впоследствии вы можете создать Query Views, отображающие только данные Lotus Domino, либо только интегрированные данные, либо и то, и другое вместе.
При изменении конфигурации базы данных Lotus Domino в DB2 с целью включения в ней поддержки интеграции, позволяющей получать доступ к объектам, находящимся вне текущей базы данных (база данных определена в закладке DB2 серверного документа, находящегося в директории Domino), вы можете создавать так называемые "интегрированные объекты" (federated objects). Эти интегрированные объекты DB2 позволяют не только получать доступ к другим таблицам DB2, которые находятся в других базах данных DB2, но также и к другим системам управления базами данных (СУБД).
В приложении ITSO Electronics нам необходимо создать новый интегрированный Query View, который будет обращаться к информации отдельной базы данных DB2, принадлежащей отделу кадров и содержащей данные о персонале. В приведенной ниже последовательности действий показано, как изменить конфигурацию сервера DB2 для включения поддержки интеграции.
DB2_ALLOW_SETAUTH_WITH_REMOTECONNECT, чтобы Query View смог работать. Используйте следующие путь и команду:C:\Program Files\IBM\SQLLIB\BIN>db2set -i DB2 DB2_ALLOW_SETAUTH_WITH_REMOTECONNECT=1где
–i определяет имя вашего экземпляра DB2 (который обычно, как и в нашем сценарии, называется DB2 ).C:\Program Files\IBM\SQLLIB\BIN>db2 update dbm cfg using FEDERATED YES
(рис 2.16) Папка Federated Database Objects в DB2 Control Center
(рис 2.18) Папка Server Definitions в DB2 Control Center
(рис 2.19) Окно Create Server Definitions: кнопка Discover
(рис 2.22) Окно DB2 Control Center: User MappingsConnect (Подключиться), после чего введите ID пользователя и пароль. В приложении, использованном в нашем сценарии, мы применяли ID пользователя базы данных DB2DOMINO и его пароль.
(рис 2.25) Окно DB2 Control Center: Create New Nickname
(рис 2.28) Open Nickname: окно EMPLOYEEMANNYSANTANNA. Чтобы завершить этот этап, выполните приведенную ниже последовательность действий из командной строки или из DB2 Command Editor (Редактор команд DB2). Войдите в вашу базу данных в качестве пользователя сервера Lotus Domino или же в качестве другого администратора. Затем выполните одно из приведенных ниже действий:MANNYSANTANNA:GRANT SELECT ON DB2DOMINO.EMPLOYEE TO MANNYSANTANA
(рис 2.29) DB2 Command EditorТеперь вы можете создавать Query Views с интегрированными данными, благодаря чему ваше приложение Lotus Domino получает расширенные возможности доступа к данным.
После завершения настройки интеграции на сервере DB2 мы можем получать доступ к интегрированным данным путем создания интегрированных Query Views в нашем приложении ITSO Electronics. Чтобы создать интегрированный Query View в приложении ITSO Electronics, выполните следующие действия.
(рис 2.31) Представление HR Employees в Domino Designer
(рис 2.32) Интегрированный Query View HR EmployeesПри интеграции Lotus Domino и DB2 следует иметь в виду, что:
ACL ) все равно продолжают поддерживаться, как и поля Readers и Authors.NSF в DB2, Lotus Domino создает и управляет набором таблиц, необходимых для поддержки ваших данных NSF, но вы не можете получить доступ к этим таблицам напрямую. Данные доступны лишь после определения DB2 Access View.Notes на SQL через DB2 Access View защита на уровне пользователя всегда осуществляет проверку пользователя, обращающегося к этим данным, причем проверка осуществляется по связке имени пользователя Notes и имени пользователя DB2.Notes и имени DB2 также используется.Notes, можно управлять доступом к DB2 Access View с помощью механизма DB2 GRANT, добавив приведенный ниже параметр к файлу NOTES.INI на сервере DB2 Access:Allow_Anonymous_Access_From_DB2=значение
0 – отключает доступ по анонимной учетной записи;1 – включает доступ по анонимной учетной записи через механизм DB2 GRANT.
Когда параметры файла NOTES.INI активированы, будет осуществляться анонимный доступ к Lotus Notes всякий раз, когда имя пользователя DB2 не связано с именем пользователя Lotus Notes.
NSF ), связанной с DB2 Access View.DB2 не позволяет получать доступ в DB2 Access View в Lotus Domino, то вы получите следующее сообщение об ошибке:"com.ibm.db.DataException: A database manager error occurred.: [IBM][CLI Driver][DB2/NT] SQL0443N Routine "ISREADER3" (specific name "") has returned an error SQLSTATE with diagnostic text "14512 : No matching Notes user found for DB2 user and anony". SQLSTATE=04004
Дополнительную информацию по безопасности и интеграции DB2 можно получить в Lotus Domino 7 Designer Help в разделе DB2 Access View security по адресу: http://www.lotus.com/ldd/doc/domino_notes/7.0/help7_designer.nsf
В этом разделе мы рассмотрели только те аспекты безопасности, которые связаны с интеграцией DB2 и Domino. Для получения более полного обзора по безопасности в Lotus Domino вы можете обратиться к готовящемуся к выходу руководству Security Considerations in Notes and Domino 7, REDP-4104.
В этом разделе дается несколько советов по устранению проблем, связанных с интеграцией с DB2. Для получения дополнительных сведений перейдите к разделу DB2 Integration and
Если при интеграции Domino и DB2 возникают какие-либо проблемы, первое, что необходимо сделать, – проверить конфигурацию сервера DB2 Access. Инструмент DB2 NOTES.INI. Если все поля и параметры верны, этот инструмент приступает к проверке соединения между сервером DB2 Access и выбранным сервером Lotus Domino, проверяет, все ли функции и свойства присутствуют, определяет, корректен ли документ Connection на сервере DB2 Access, после чего пробует открыть директорию Domino на сервере DB2 Access. Если DB2
Configuration (Конфигурация).Connections (Соединения). Выберите документ DB2 Tools (Сервис) выберите DB2 Server => Test DB2 Access (Сервер DB2 $$\Rightarrow$$ Проверить доступ к DB2).На рис 2.33 показан результат работы инструмента DB2
(рис 2.33) Результат работы инструмента DB2 Access TestЕсли при использовании DB2 Access Views пользователи столкнутся с проблемой получения доступа к вашей базе данных Lotus Notes с поддержкой DB2, убедитесь в том, что элемент ACL для каждого пользователя идентичен первому элементу в поле User name в документе Person пользователя, хранящемся в директории Domino на сервере Domino.
Обычно, когда вы получаете сообщение об ошибке при открытии Query View, лучше всего взглянуть на серверную консоль на сервере Lotus Domino. Сообщения об ошибке, появляющиеся на серверной консоли, обычно напрямую указывают на источник той или иной проблемы.
В приведенном ниже списке представлены самые распространенные сообщения об ошибках и некоторая информация о них.
DB2-Authorization Violation (Нарушение авторизации DB2).Хотя сообщение об ошибке выглядит именно так, данная проблема никак не связана с безопасностью. Такую информацию можно увидеть на серверной консоли:
Failed when DB2 was collecting column info. DB2-Authorization violation.: 42S02 - [IBM][CLI Driver][DB2/NT] SQL0204N "SALES.SALESDAV" is an undefined name. SQLSTATE=42704 - *LOCAL.DB2.051103024144 (Ошибка DB2 при сборе информации о столбцах. Нарушение авторизации DB2.: 42S02 - [IBM][CLI Driver][DB2/NT] SQL0204N "SALES.SALESDAV" не определенное имя. SQLSTATE=42704 - *LOCAL.DB2.051103024144 ).Существует три возможные причины появления этого сообщения об ошибке:
Failed when DB2 was collecting column info. DB2-Authorization violation.: 42S22 - [IBM][CLI Driver][DB2/NT] SQL0206N "C.CUSTOMERNAM" is not valid in the context where it is used. SQLSTATE=42703 - *LOCAL.DB2.051103024144 (Ошибка DB2 при сборе информации о столбцах. Нарушение авторизации DB2.: 42S22 - [IBM][CLI Driver][DB2/NT] SQL0206N "C.CUSTOMERNAM" не верен в контексте, в котором он использован SQLSTATE=42703 - *LOCAL.DB2.051103024144 ).Одной из причин появления такой ошибки является то, что столбец, к которому был применен запрос, не существует в DB2 Access View; в этом примере таким столбцом является CUSTOMERNAM.
DB2-Dynamic SQL Error (Ошибка SQL в динамической DB2).Это сообщение об ошибке указывает на синтаксическую ошибку в SQL-выражении. Посмотрите на серверную консоль и проверьте SQL-выражение:
Failed when DB2 was collecting column info. DB2-Dynamic SQL error.: 42601 - [IBM][CLI Driver][DB2/NT] SQL0104N An unexpected token "FROMSALES2" was found following "SELECT *". Expected tokens may include: "<from>". SQLSTATE=42601 - G921557D. GD04.0088C6170623 (Ошибка DB2 при сборе информации о столбцах. Ошибка SQL в динамической DB2.: 42601 - [IBM][CLI Driver][DB2/NT] SQL0104N неожиданный символ "FROMSALES2" нашел следующее: SELECT *". Expected tokens may include: "<from>". SQLSTATE=42601 - G921557D.GD04.0088C6170623 ).
В этом примере в команде было пропущено место между FROM и SALES2.
Opening View: The given query cannot generate a result set and therefore has not been executed (Открытие представления: сделанный запрос не может сгенерировать набор результатов и, следовательно, не может быть выполнен).Из соображений безопасности SQL-выражения в Query View были ограничены до выражений, которые возвращают наборы результатов. Команды Update и Insert не работают, когда используются для выборки. Например, если вы хотите выполнить в качестве первой команды SELECT и допустили ошибку при наборе SQL-выражения, такую как написание команды SELCT вместо SELECT, это может вызвать ошибку.
This function is not implemented on this version of the server (Эта функция неприменима для этой версии сервера).Вероятнее всего, вы пытаетесь открыть Query View на локальной реплике или на системе, в которой не включена поддержка DB2.
Failed when DB2 was fetching a note. DB2-External function exception.: 38503 - [IBM][CLI Driver][DB2/NT] SQL0430N User defined function "DOMINO.ISREADER3" (specific name "SQL051024022301200") has abnormally terminated. SQLSTATE = 38503 - *LOCAL.DB2.051028175704 (Ошибка DB2 при выборке записи. DB2-внешнее исключение функции.: 38503 - [IBM][CLI Driver][DB2/NT] SQL0430N. Функция "DOMINO.ISREADER3" (собственное имя "SQL051024022301200" ), определенная пользователем, была аварийно завершена. SQLSTATE=38503 - *LOCAL. DB2.051028175704 ).Одна из возможных причин появления данной ошибки заключается в существовании более ранней версии Lotus Notes и Domino на данной системе. Для решения данной проблемы достаточно будет просто удалить более раннюю версию или переименовать папку.
Часто оказывается полезным собрать информацию, касающуюся диагностики. Это поможет вам, вашим коллегам или персоналу IBM найти источники проблемы.
NOTES.INI с сервера Lotus Domino и с сервера DB2 Access.В этой лекции мы обсудим новые возможности, возникающие при интеграции IBM Lotus Notes и Domino 7 с IBM DB2 Universal Database (UDB). Там, где это необходимо, мы используем в качестве примера приложение ITSO Electronics для объяснения новых возможностей разработки приложений.
Ниже вы найдете информацию, в которой будут раскрыты следующие темы:
Lotus Notes и Domino имеют в арсенале широкий спектр средств для интеграции с реляционными базами данных, бизнес-системами, а также системами планирования и управления ресурсами предприятия (enterprise resource planning – ERP), такими как Lotus Enterprise Integrator, Domino Enterprise Connection Services, Data Connection Resources и Lotus Connectors LotusScript Extensions. Lotus продолжает эти традиции с Notes и Domino 7, предоставляя в распоряжение разработчика новые децентрализованные возможности разработки приложений для интеграции с реляционными базами данных IBM DB2, которые одинаково могут применять как бизнес-пользователи, так и ведущие разработчики приложений. Лаборатории Lotus и DB2 в пределах корпорации IBM работали вместе для улучшения интеграционных возможностей, а сервер Domino 7 обеспечивает возможность выборочно определить новые или существующие базы данных Domino, так как в них включена поддержка DB2. Пользователи получают открытый доступ к базам данных Domino с поддержкой DB2 через сервер Domino 7, но сами базы данных хранятся в DB2. Таким образом, становится возможным в базе данных Domino с поддержкой DB2 использовать реляционные конструкции, а также данные из базы данных Domino с поддержкой DB2 в реляционных конструкциях. В то же время сохраняется поддержка функций Notes API, включая репликацию данных, маршрутизацию почты и административный доступ. Так как IBM DB2 является реляционной системой базы данных, данные с отдельных баз данных DB2, таблиц, видов и интегрированных объектов могут быть легко скомбинированы в новые наборы данных, используя общие поля данных и отношения. Все это позволяет разработчику работать с данными и представлять их другими, более удобными способами, и облегчает создание более интегрированных и значимых приложений в среде Domino и других средах, использующих данные Domino, данные DB2 и реляционные возможности. Более подробно эти возможности мы обсудим далее в этой главе.
До того как использовать новые интеграционные возможности Domino и DB2, вы должны установить сервер DB2 и сконфигурировать сервер Domino 7 для подключения к серверу DB2. В Lotus Domino 7 новые интеграционные возможности доступны в операционных системах Microsoft Windows и IBM AIX $$\text{\textregistered}$$ 5LTM.
При настройке интеграции Domino и DB2 можно выбирать между локальной или удаленной установкой. При выборе локальной установки оба сервера, и Domino и DB2, будут установлены на одном компьютере. Локальную установку лучше использовать для тестовой среды или для системы с малой производительностью. На рис 2.1 показана система с локальной установкой.
(рис 2.1) Локальная установка: сервер Domino и сервер DB2 установлены на одном компьютере
Для систем с высокой нагрузкой на сервер, скорее всего, лучше будет выполнить удаленную установку. В таком случае сервер Domino и сервер DB2 будут установлены на разных компьютерах. На рис 2.2 представлен пример удаленной установки.
(рис 2.2) Удаленная установка: сервер Domino и сервер DB2 установлены на разных компьютерахСуществует два уровня интеграции с DB2. В первом случае сервер Domino и сервер DB2 устанавливаются на одном и том же компьютере, а во втором случае – на разных.
Если вы решили установить оба сервера на одном компьютере, вам необходимо выполнить приведенную ниже процедуру.
Если вы решили устанавливать оба сервера, Domino и DB2, на разных компьютерах, то вам необходимо выполнить следующую процедуру.
nnotes.dll не находится в PATH.В данном издании мы обращаем внимание на новые элементы разработки приложений, появившиеся в Domino 7. Поэтому рассматривается только основные моменты процесса установки. Для получения более подробной информации о том, как установить и обслуживать интеграцию Domino и DB2, обратитесь к следующим источникам:
USERS, ADMINS, GUESTS, PUBLIC, LOCAL или любыми другими зарезервированными словами SQL (Structured Query Language);IBM, SQL или SYS ;В Lotus Notes и Domino применяется иной принцип хранения данных по сравнению с тем, что используется в реляционных базах данных, таких как DB2. В реляционных базах данных информация упорядочивается и распределяется по строго структурированным таблицам, а в базе данных Domino документы или "записки" ( "notes" ), состоящие из списка полей, сохраняются в формате неструктурированного файла. Такой способ хранения информации усложняет доступ к данным Domino из DB2. Для решения данной проблемы в Domino 7 были введены DB2 Access Views, общие ресурсы, позволяющие определить представление DB2, обращающееся к данным Domino путем систематизации последних в таблицу, которую можно запросить с помощью языка структурированных запросов (SQL). DB2 Access Views являются элементами разработки приложений заднего плана и не видны конечным пользователям.
DB2 Access Views доступны только для баз данных, хранящихся на сервере DB2. Перед созданием DB2 Access View на сервере Domino должна быть активирована DB2 и база данных должна находиться в системе DB2. Если вы создадите локальную реплику базы данных или реплику на сервере Domino 7.0, на котором DB2 не активирована, то DB2 Access View будет находиться в базе данных, однако им нельзя будет воспользоваться или он не будет видимым в Lotus Domino Designer.
Когда в базе данных Lotus Notes включается поддержка DB2, Domino создает схему базы данных DB2 для хранения доступных пользователю представлений Lotus Notes. Имя схемы основывается на имени файла NSF. Любые созданные вами DB2 Access Views будут также расположены в этой схеме.
Когда вы создаете DB2 Access View, информация копируется в специальную таблицу DB2. После создания и инициализации данных в DB2 Access View Domino автоматически синхронизирует обновления между неструктурированными данными Domino и структурированными данными столбцов в DB2 Access View. Следовательно, обновлять DB2 Access View нет необходимости.
Для создания нового DB2 Access View вам необходимо выполнить приведенные ниже действия. К тому же вы можете обратиться к справке Lotus Domino 7 Designer, которую можно найти по следующему адресу в Интернете: http://www.lotus.com/ldd/doc/domino_notes/7.0/help7_designer.nsf
Shared Resources => DB2 Access views.
(рис 2.3) Закладка основных свойств DB2 Access ViewForm документа. Можно либо выбрать все формы, либо выбрать некоторые из доступных форм, приведенных в списке. Если у документа отсутствует поле формы, он будет включен в DB2 Access View, только если вы выберете пункт меню All Forms (Все формы).DB2 Inserts and Updates будут верны только в том случае, если вы выполните операторы insert или update SQL-выражения из DB2:Compute with form on DB2 insert or update (Пересчитывать по форме при операциях DB2 insert и update ). Включите эту опцию, если выбранные формы содержат вычисляемые поля и вы хотите, чтобы формулы были пересчитаны, когда документ создается или обновляется с помощью SQL.Default form to use for DB2 inserts (Форма по умолчанию для вставок DB2). Пользователи DB2 могут осуществлять операции вставки, обновления и удаления (если у них есть права на это) с данными в DB2 Access View. В Domino 7 можно выбрать только один тип документа (основанный на форме) для создания с помощью SQL-оператора INSERT. Документы любого типа (основанные на любой форме) могут быть обновлены или удалены из SQL.
(рис 2.4) Закладка Advanced окна DB2 Access ViewЗдесь вы можете выбрать приведенные ниже опции:Include UNID in access view (Включить UNID в access view).Когда вы установите этот флажок, вы сможете получить доступ к уникальному идентификатору документа Lotus Notes ( UNID ) через DB2 Access View.
Include OID in access view (Включить OID в access view).OID расшифровывается как Origination Identifier (идентификатор создания). Если вы выберете эту опцию и выберете ее в SQL-формуле Query View, то ссылки документа будут работать, когда элементы вида выбраны и скопированы в виде таблицы.
Include modified time in access view (Включить отметку времени изменения документа в access view).Выберите эту опцию, чтобы включать отметку времени изменения документа в Notes для каждой записи в DB2 Access View. Обратите внимание на то, что эта отметка времени преобразуется в стандарт GMT (Гринвичское время).
Normalize to GMT for time zone conversions (Нормализировать под GMT для осуществления преобразований между различными часовыми поясами).Выберите эту опцию, чтобы стандартизировать все даты и временные отметки в виде DB2 под GMT. Данная опция особенно полезна для распределенных приложений DB2, к которым обращаются пользователи, находящиеся в разных часовых поясах.
(рис 2.5) Окно DB2 Access View Choose FieldChoose Field вы можете:В Domino 7 DB2 Access View может содержать максимум 84 столбца. Если вам понадобится большее количество данных, придется определить несколько DB2 Access Views.
ОК для подтверждения выбора.Список выбранных элементов DB2 Access View появится в рабочей области.
Insert Field (Вставить поле), чтобы включить дополнительные поля.Возможно, вы захотите добавить поля, находящиеся вне выбранных форм. Например, возьмем поле Form. Вы можете вручную добавить его с помощью командной кнопки Insert Field. Каждый раз, когда вы используете подобное действие, появляется безымянный элемент DB2 в рабочей области.
(рис 2.6) Свойства Access View EntryДля полей, которые были добавлены с помощью команды Insert Field, первые три свойства должны быть заполнены. Для полей, выбранных из форм, соответствующие свойства заполняются автоматически. В этом окне присутствуют следующие поля для заполнения:
Field Name (Название поля).В это поле необходимо ввести соответствующее имя поля для столбца DB2 в DB2 Access View, поэтому необходимо ввести реальное имя поля, которое появится в записи (в противном случае соответствующее поле найдено не будет и столбец при просмотре в DB2 будет пустым).
Notes type (Тип данных Notes).Показывает тип данных Lotus Notes для этого поля.
Notes не поддерживаются в DB2 Access Views: Formula, rich text , rich text light.DB2 Type (Тип данных DB2).Показывает тип данных DB2 для данного поля. Lotus Notes присваивает этому полю значение по умолчанию, связанное с типом выбранного поля Notes.
integer ), определенное в DB2 Access View, и вы пытаетесь обновить этот столбец с помощью операторов SQL INSERT или UPDATE, используя при этом действительное число ( real ), то перед обновлением DB2 преобразует действительное число в целое, и десятичная часть числа будет отброшена.Представленные ниже атрибуты значимы для всех элементов DB2 Access View.
Create DB2 index field (Создать индексированное поле DB2). Этот столбец DB2 индексируется для увеличения скорости поиска по базе данных. Используя приведенную ниже команду, эта опция создает DB2-индекс, основанный на столбце таблицы:> CREATE INDEX ON TABLE x (coly)Использование индексов требует дополнительного пространства на системе хранения и обновления большего количества ресурсов, зато запросы такого типа выполняются намного быстрее, особенно если в
TABLE x хранится большое количество строк:> SELECT cola, colb, colc FROM x WHERE coly=<some value>Индексация в DB2 – это расширение возможностей для разработчиков в среде Domino, однако существуют индексы, оптимизирующие выборку данных, которые нельзя создать в Domino Designer. Например, эта команда оптимизирует следующий запрос:
> CREATE INDEX ON TABLE x (cola, colb, colc)В данном примере индекс используется для сортировки данных. При отсутствии индекса, когда таблица увеличивается, эта операция является наиболее ресурсоемкой:
> SELECT cola, colb, colc FROM x WHERE cola = <some value> ORDER BY cola, colb, colc
DB2 column length (Длина столбца DB2). Это свойство определяет длину столбца в DB2 Access View. При выборе значения для данного поля зачастую приходится искать компромисс между противоположными целями. Возможно, вы захотите отобразить максимально возможное количество полей, но помните, что максимальная длина столбца непосредственно влияет на пространство, занимаемое DB2 Access View в базе данных DB2. При преобразовании полей Notes необходимо помнить о том, что существует предел максимального количества данных, которые можно сохранить в таблице DAV. Длина всех полей данных вместе с зарезервированным DB2-пространством не может превышать 16384 байт. Если необходимо хранить более 16000 байт данных, то часть текстовых полей можно преобразовать в тип LONG VARCHAR. При преобразовании поля в этот тип данных, в таблице сохраняется небольшой "локатор" ("locator"), а текущее поле данных (до 32000 байт на одно поле)
сохраняется в виде большого символьного объекта (Character Large Object, CLOB ). Использование CLOB позволяет увеличить емкость DAV (84*32000), однако вы должны использовать тип LONG VARCHAR, только если не можете поместить данные "линейно", так как CLOB работает медленнее и занимает больше дискового пространства, чем линейное хранение данных. При создании или обновлении DB2 Access View сервер Domino автоматически проверит DB2 Access View на превышение максимальной длины; таким образом, не придется вручную считать длину. Тем не менее, вы можете использовать рекомендации, приведенные в табл. 2.1, для оценки "линейной" длины данных.| Тип | Длина в DAV | Комментарии |
|---|---|---|
VARCHAR |
5 + заявленная длина | Например, для хранения VARCHAR(40) потребуется 45 байт |
LONG VARCHAR |
25 | Линейный локатор |
DOUBLE |
9 | Фиксированный размер |
TIMESTAMP |
11 | Фиксированный размер |
DATE |
5 | Фиксированный размер |
TIME |
4 | Фиксированный размер |
INTEGER |
9 | Фиксированный размер |
Allow truncation of Notes data (Позволить усечение данных Notes ). Иногда размер поля может быть больше, чем максимальная длина столбца, которую вы определили для элемента DB2 Access View. Когда вы разрешите усечение данных, содержание по достижении максимальной длины будет обрезаться. Если вы не разрешите усечение, то при достижении предела во время заполнения DB2 Access View на консоли сервера появится следующее сообщение: "Access Table field data exceeds defined length".В Domino 7 параметр Allow truncation of Notes data по умолчанию отключен. В дальнейшем мы настоятельно рекомендуем включить этот параметр для всех элементов DB2 Access View Entry, в которых содержатся текстовые данные. Однако существует одно исключение: если вы планируете делать SQL-запросы на обновление DB2 Access View из DB2, этот параметр дает разрешение на усечение данных до заданной длины, что может привести к потере данных.
Allow truncation of Notes data для всех элементов Access View.Тип данных Lotus Notes TIMEDATE позволяет хранить дату, время, временную зону, а также индикатор летнего времени, однако временная отметка DB2 позволяет хранить только дату и время. В DB2 считается, что все даты и время локальны по отношению к часовому поясу сервера DB2. Это может привести к неверному отображению времени при экспортировании данных с типом TIMEDATE в DB2 Access View или к чтению данных с типом TIMESTAMP из DB2 в Query View (вне зависимости от того, откуда они взяты: из DB2 Access View или же из других таблиц DB2).
Существует два варианта сохранения даты и времени в DB2 Access View: локальное (местное) время или время, измененное в соответствии с GMT (стандартизованное). Вы можете изменить способ работы с ними, используя параметр "Normalize to GMT for на закладке Advanced окна свойств Access View Entry.
При вставке или обновлении диапазонов дат в документе, расположенном внутри DB2 Access View через SQL, необходимо определить диапазоны дат в полном формате временной отметки DB2, например такой, как yyyy-mm-dd-hh.mm.ss.subsec (год-месяц-день-час.минута.секунда.миллисекунда) или 2005-12-12-08.06.30.123456. Если при выполнении данного этапа произошла ошибка, вставленное значение будет не определено или равно нулю.
При выборе DB2 Access View в Domino Designer показывается список всех DB2 Access View, находящихся в базе данных. Перед каждым DB2 Access View отобразится иконка, показывающая его статус. Данные иконки с соответствующими расшифровками приведены на рис 2.7.
(рис 2.7) Иконки, символизирующие статус каждого DB2 Access View
Вы можете создать сколь угодно много DB2 Access View в базе данных, например по одному на каждую форму. Но может оказаться проще создать один или два больших DB2 Access View и включить в них данные из всех форм, к которым вы хотите иметь доступ. Чтобы ограничить количество столбцов в DB2 Access View, попробуйте использовать одинаковое имя для соответствующих полей в разных формах.
Domino невероятно гибок, когда дело доходит до полей и соответствующих им типов данных. Два документа, основанных на одной и той же форме, в Lotus Notes и Domino могут иметь разные типы данных. Это преимущество в гибкости может вызвать проблемы, например когда вы попытаетесь создать DB2 Access View. DB2 крайне строга по отношению к типам данных. Необходимо будет часто чистить данные в базе данных, а также быть уверенным в том, что содержимое всех полей, использованных в DB2 Access View, обладает одним и тем же типом данных.
Если в документе Lotus Notes будет потеряно какое-либо поле, или значение этого поля будет отсутствовать, то никаких проблем не возникнет. В DB2 Access View значение такого поля будет просто установлено =NULL, и при любых запросах, касающихся этого поля, будет отображаться пустое значение. Поля с типом и formula не поддерживаются в DB2 Access View. Если вы включите такие поля в DB2 Access View, то сообщения об ошибке выдаваться не будет, но вместо содержимого поля будет отображаться NULL.
Размеры DB2 Access View и его элементов (таблиц, видов, триггеров и индексов) не включаются в итоговый размер файла базы данных Lotus Notes с поддержкой DB2, для которой оно было создано. Таким образом, если у вас есть множество DB2 Access View, связанных с базой данных Lotus Notes с поддержкой DB2, следует помнить, что они займут такое количество дискового пространства, которое будет превышать дисковое пространство, отведенное под саму базу данных Lotus Notes с поддержкой DB2. Но опасения, что DB2 Access Views будут занимать большее количество дискового пространства, оказались необоснованными. На ранних этапах тестирования в IBM было показано, что даже DB2 Access View с большим количеством столбцов обычно занимает всего лишь от 2% до 3 % от дискового пространства, занимаемого базой данных.
В нашем сценарии, приведенном в качестве примера, компании ITSO Electronics требуется использовать новую возможность Query Views, к обсуждению которой мы перейдем в п. 2.3, "Query Views". Для того чтобы подготовить базу данных к использованию Query Views, нам необходимо создать несколько DB2 Access View. В этом примере мы решили использовать только по одному DB2 Access View на каждую базу данных Lotus Notes приложения ITSO Electronics.
Для начала создадим DB2 Access View для базы данных ITSO Electronics Sales, которую назовем SALESDAV.
В табл. 2.2 представлены выбранные поля.
| Поле, включенное в DB2 Access View | Форма |
|---|---|
ANumber
|
Sales Activity
|
CustomerName
|
Sales Activity
|
Следующий DB2 Access View, который мы создадим в базе данных ITSO Electronics Customer, будет называться CUSTOMERDAV (см. табл. 2.3).
| Поле, включенное в DB2 Access View | Форма |
|---|---|
customerAddress
|
Customer
|
И, наконец, мы создадим DB2 Access View в базе данных ITSO Electronics Products и назовем его CUSTOMERDAV.
| Поле, включенное в DB2 Access View | Форма |
|---|---|
productDescription
|
Product
|
productName
|
Product
|
FORM |
Product, Supplier |
В дальнейшем мы используем эти DB2 Access Views при создании Query View, которое рассмотрено в п. 2.3, "Query Views".
Query Views – это новый тип видов в базе данных Notes (NSF). Они заполняются путем выполнения запросов, написанных на языке структурированных запросов (SQL). На первый взгляд кажется, что виды Query Views – это всего лишь еще один способ сбора и представления данных. Однако при более пристальном изучении становится очевидно, что Query Views заставляют вас по-новому посмотреть на данные в Lotus Domino. Здесь впервые возможно отображать информацию более чем из одной базы данных Lotus Notes в пределах одного вида. Вы можете использовать приведенные ниже конструкции SQL.
Join.Документы, находящиеся в несвязанных элементах разных DB2 Access View, объединяются в одну строку в Query View. Полностью этот процесс описан в п. 2.3.2, "Создание Query View с помощью оператора Join".
Union.Элементы из различных DB2 Access Views собираются в одно представление. Мы остановимся более подробно на этом аспекте в п. 2.3.3, "Создание Query View с помощью оператора Union".
Group by.Having.Запросы динамически строятся на основе языка SQL и не занимают места в базе данных. SQL-выражение, в свою очередь, может быть динамически построено с использованием языка формул Lotus Notes. Вы можете свободно использовать такие @-формулы, как @Username и @Today, не опасаясь возникновения проблем с индексированием, которые могли бы возникнуть в стандартных представлениях Lotus Notes. Можно даже управлять содержимым представления с помощью @-формулы взаимодействия пользователя с системой @Prompt. Описанием подобного рода аспектов мы займемся в п. 2.3.4, "Динамическое создание Query Views с помощью @-формул".
Query View не способен напрямую отображать данные документа Lotus Domino. Чтобы сделать это, необходимо в первую очередь, создать DB2 Access View, как описано в п. 2.2.1, "Создание DB2 Access Views". Затем можно приступить к созданию Query View, выполнив приведенную ниже последовательность действий.
(рис 2.8) Окно Create View"SELECT * FROM SALES.SALESDAV"Вы обращаетесь к DB2 Access View в базе данных, используя название схемы DB2 и название DB2 Access View:
DB2SCHEMANAME.DAVNAME. В п. 2.3.4, "Динамическое создание Query Views с помощью @-формул".
Notes Preview (Предварительный просмотр Notes). Обращаем ваше внимание на то, что кнопка Refresh на панели программирования не позволяет увидеть представление в Domino 7.Возможно, вы захотите разделить на части ваше SQL-выражение и записать его в несколько строк для удобочитаемости, как показано в примере 2.2, однако применение такого метода при написании SQL-выражений приведет к появлению сообщений об ошибках.
"SELECT SALES.SALESDAV.CUSTOMERNAME FROM SALES.SALESDAV"
Когда мы работали над созданием приложения ITSO Electronics, то пришли к выводу, что написание SQL-выражений в виде строк, объединенных знаком "+", позволяет достигнуть той же легкости при чтении и что, самое главное, они работают в Lotus Domino 7. См. . Каждая часть SQL-выражения должна быть заключена в кавычки.
"SELECT "+ "SALES.SALESDAV.CUSTOMERNAME "+ "FROM "+ "SALES.SALESDAV"
Язык SQL позволяет использовать упрощенный способ написания SQL-выражений, в котором используются псевдонимы для источников данных. Код программы, представленный в примере 2.3, можно переписать по-другому (см. ). Хотя фактически разницы нет, впоследствии этот способ написания SQL-выражений поможет вам понять более сложные примеры.
"SELECT "+ "S.CUSTOMERNAME "+ "FROM "+ "SALES.SALESDAV S"
В Lotus Domino 7 вы можете соединить данные из различных DB2 Access Views в один Query View. При этом не играет никакой роли, находятся ли DB2 Access Views в одной базе данных или в разных. Каждый элемент представления может показывать связанные данные, взятые из различных документов, что возможно благодаря DB2 Access Views.
На рис 2.9 показано, как информация из DB2 Access Views ORDERDAV и CUSTOMERDAV объединяется в ResultSet SQL.
(рис 2.9) Создание Query Views, с использованием оператора JoinВ примере 2.5 показано соответствующее SQL-выражение, которое было использовано для этой цели.
"SELECT "+ "S.AType, S.Anumber,S.Product1 , C.CUSTOMERNAME, C.OWNERNAME, "+ " S.CUSTOMERNUMBER, S.MadeSale "+ "FROM "+ "SALES.SALESDAV S "+ "Left outer JOIN "+ "CUSTOMER.CUSTOMERDAV C "+ "ON "+ "S.CustomerNumber=C.CustomerNumber "+ "WHERE "+ "C.OWNERNAME<>''"
На рис 2.10 показано представление Customer Sales, созданное на основе SQL-выражения, рассмотренного в примере 2.5.
(рис 2.10) Query View, созданный при помощи оператора Join
Компания ITSO Electronics настаивает на том, чтобы все ее внешние контакты были объединены в одно представление. При этом информация о поставщиках хранится в базе данных показано, как с помощью оператора Union происходит создание Query View из отдельных DB2 Access View.
(рис 2.11) Создание Query Views, с использованием оператора UnionВ примере 2.6 показано SQL-выражение, используемое для сбора данных представления, в котором содержатся все внешние контакты компании ITSO Electronics. Для того чтобы оператор Union заработал, необходимо, чтобы каждая формула отбора возвращала одинаковое число столбцов с одинаковыми именами столбцов. К тому же у соответствующих столбцов каждого набора результатов должны быть соответствующие типы полей.
"SELECT " + "C.CUSTOMERNUMBER as NO, C.CUSTOMERNAME as EXTERNALNAME, "+ "C.CUSTOMERADDRESS as ADDRESS, C.CUSTOMERDESCRIPTION as Description, "+ "C.Form as form "+ "FROM "+ "CUSTOMER.CUSTOMERDAV C " + "WHERE "+ "C.FORM='Customer' "+ "UNION ALL "+ "SELECT "+ "S.SUPPLIERNUMBER as NO, S.SUPPLIERNAME as EXTERNALNAME, "+ "S.SUPPLIERADDRESS as ADDRESS, S.SUPPLIERDESCRIPTION as Description, "+ "S.Form as form "+ "FROM "+ "PRODUCTS.PRODUCTDAV S " + "WHERE "+ "FORM ='Supplier'"
На рис 2.12 показан Query View, отображающий данные поставщиков и покупателей компании ITSO Electronics, располагающиеся в различных базах с использованием SQL-кода, приведенного в примере 2.6.
(рис 2.12) Query View, созданный с помощью объединения
Во всех приведенных и использованных до сих пор примерах применялись Query View. К счастью, Lotus Domino 7 позволяет составлять текст Query View на языке @-формул.
В примере 2.7 представлено простое SQL-выражение, которое "собирает" все мероприятия по сбыту для покупателя "ITSO" из DB2 Access View SALESDAV. Для этой цели в нем используется условие S.CUSTOMERNAME='ITSO'.
""SELECT "+ "S.CUSTOMERNAME, S.ATYPE,S.ANumber , S.MADESALE "+ "FROM "+ "SALES.SALESDAV S "+ "WHERE S.FORM='Sales Activity' AND S.CUSTOMERNAME='ITSO'"
Вместо этого статического выражения вы можете динамически выбрать название компании при открытии представления. Для достижения этой цели вам необходимо добавить в код команду .
_CUSTOMER:=@Prompt([OKCANCELEDIT];"Выбор компании"; "Пожалуйста, укажите название компании, которую хотели бы найти.";""); "SELECT "+ "S.CUSTOMERNAME, S.ATYPE,S.ANumber , S.MADESALE "+ "FROM"+ " SALES.SALESDAV S "+ "WHERE S.FORM='Sales Activity' AND S.CUSTOMERNAME='"+_CUSTOMER+"'"
Теперь каждый раз при запуске этого кода перед пользователем будет появляться запрос на ввод имени покупателя.
Как уже было отмечено в п. 2.3.1, "Создание Query View", вы не можете быть уверены в том, что название схемы SQL для базы данных останется тем же после того, как она будет скопирована или продублирована на другом сервере. Поэтому рекомендуется избегать статических ссылок на схему базы данных в ваших SQL-выражениях. Способ обхождения этого ограничения состоит в использовании функции @DB2Schema которая была внедрена в Lotus Notes и Domino 7. Описание данной функции см. в п. 4.5, "Дополнения к языку формул". Чтобы получить SQL DB2Schema для текущей базы данных, необходимо использовать команду @DB2Schema вместе с функцией @DBName. Если поместить эти команды в SQL-выражение из примера 2.7, мы получим код, похожий на тот, что представлен в примере 2.9.
_Schema:= @DB2Schema(@DBname); "SELECT "+ "S.CUSTOMERNAME, S.ATYPE,S.ANumber , S.MADESALE "+ "FROM "+ _Schema +".SALESDAV S "+ "WHERE S.FORM='Sales Activity' AND S.CUSTOMERNAME='ITSO'"
Также может возникнуть необходимость написать SQL-выражение, позволяющее получить доступ к DB2 Access View в другой базе данных. Если предположить, что эта база данных находится в той же папке, что и текущая, то SQL-выражение, основанное на примере 2.7, будет похоже на решение, представленное в примере 2.10.
_pathOnly:=@LeftBack(@Subset(@DbName;-1);"\\");_path:=@If(_pathOnly="";"";_ pathOnly+"\\");_Server:=@Subset(@DbName;1);_Schema:= @DB2Schema(_Server:@ Trim(_path+"Sales.nsf"));"SELECT "+"S.CUSTOMERNAME, S.ATYPE,S.ANumber , S. MADESALE "+"FROM "+_Schema +".SALESDAV S "+ "WHERE S.FORM='Sales Activity' "
Если при создании SQL-выражения вы не будете уверены в том, по какому пути находится база данных, к которой необходимо получить доступ, можно воспользоваться одной из приведенных ниже команд для получения информации о пути интересующей вас базы данных из конфигурационных документов:
@DBLookup@Environment@GetProfileFieldВ классическом представлении Lotus Notes каждая запись связана с документом напрямую. Таким образом, вы можете открывать, копировать и удалять документы из каждого представления. Однако для Query View, основанном на SQL-операторах, так бывает не всегда. Перед тем как вы сможете открывать, копировать и удалять какие-либо данные из Query View, необходимо выполнить ряд определенных условий. Строка Query View будет соединена с документом, находящимся в базе данных Notes, если вы включите столбец #NOTEID из DB2 Access View в ваш запрос и этот #NOTEID будет являться корректным Note ID в открытой базе данных Notes.
Например, в нашем исходном Query View, приведенном в качестве примера, мы выполнили следующий запрос:
SELECT * FROM SALES.SALESDAV
По сути этот запрос выбирает столбец #NOTEID из DB2 Access View, следовательно, создается связь между строками Query View и связанными с ними документами Notes. Приведенный ниже запрос не выбирает #NOTEID из DB2 Access View, поэтому строки в этом Query View не будут связаны с соответствующими документами и сгенерируется ошибка, если вы попытаетесь ими манипулировать (например, дважды щелкнете левой кнопкой мыши):
> SELECT CUSTOMERNAME FROM SALES.SALESDAV
Если вы выбираете ограниченное число столбцов из DB2 Access View, вам следует отдельно выбрать столбец #NOTEID, например:
> SELECT CUSTOMERNAME, #NOTEID FROM SALES.SALESDAV
Если вы выполняете операцию JOIN с несколькими DB2 Access Views, убедитесь в том, что вы точно выбрали столбец #NOTEID, который является корректным Note ID (идентификатором записи) в текущей базе данных Notes.
Простейшую связь между видом и документом Notes представляет собой #NOTEID. Тем не менее, некоторые функции, такие как копирование или создание ссылки на документ, требуют OID (идентификатор автора документа). Если вашему приложению требуется такого рода функциональность (или же вы хотите, чтобы взаимодействие с Query View было больше похоже на взаимодействие с обычными представлениями), включите опцию экспортирования #OID в DB2 Access View (ее можно включить на дополнительной закладке окна свойств DB2 Access View), а также включите в ваши запросы #OID.
Обратите внимание на то, что при выборе данных из разных DB2 Access View, необходимо конкретно указать, из каких DB2 Access View выбирать соответствующие столбцы, например:
SELECT S.AType, S.Anumber,S.Product1 , C.CUSTOMERNAME, C.OWNERNAME, C.#NOTEID, C.#OID, S.CUSTOMERNUMBER, S.MadeSale FROM SALES.SALESDAV S Left outer JOIN CUSTOMER. CUSTOMERDAV C ON S.CustomerNumber=C.CustomerNumber WHERE C.OWNERNAME<>''
В начальном релизе Lotus Domino 7.0, к сожалению, функция просмотра .
Несмотря на то, что Query View позволяет открывать документы в представлении, доступ к ним можно получить и с помощью LotusScript (см. п. 2.3.5, "Открытие документов из Query Views"). В нашем случае подойдет простой скрипт, приведенный в примере 2.11. Если вы не можете открыть документы из Query View, то скрипт вызовет ошибку времени выполнения "Object variable not set".
Sub Click(Source As Button)
Dim session As New notessession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As notesdocument
Dim Item As notesitem
Set db=session.currentdatabase
Set view =db.Getview("<ПРЕДСТАВЛЕНИЕ>")
Set doc=view.GetFirstDocument ' <===========================================
Do While Not doc Is Nothing
Set Item =doc.GetFirstItem("<ЭЛЕМЕНТ В БАЗЕ ДАННЫХ>")
Print(item.text)
Set doc=view.GetNextDocument(doc)
Loop
End Sub
Существует еще один способ получить доступ к данным в Query Views, не позволяющих открыть документы с помощью LotusScript. Доступ к таким представлениям необходимо осуществлять через класс View Entry, как показано в примере 2.12.
Sub Click(Source As Button)
Dim session As New notessession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As notesdocument
Dim Item As notesitem
Dim entry As NotesViewEntry
Set db=session.currentdatabase
Set view =db.Getview("<Имя Вашего представления>")
Set Entry = View.GetEntryByKey( "<Имя элемента представления>", True)
Msgbox(entry.ColumnValues(1))
End Sub
Как и любое другое представление, вы можете внедрить ). Для получения дополнительной информации о создании внедренных представлений, обратитесь к справке Lotus Domino 7 Designer, доступной по следующему адресу: http://www.lotus.com/ldd/doc/domino_notes/7.0/help7_designer.nsf
(рис 2.13) Query View, внедренный в форму Sales Person приложения ITSO Electronics
В этом разделе приведены дополнительные аспекты, касающиеся Query View.
В DB2 Access Views текстовые списки хранятся в виде текстовой строки, и поскольку Query View считывает данные из DB2 напрямую, именно эта текстовая строка и возвращается в Query View. Таким образом, если у вас есть списковый элемент, который вы хотите разделить в вашем Query View, необходимо использовать функцию @ в столбце, содержащем несколько значений. Чтобы убедиться в том, что представление способно работать с несколькими строками данных, в окне свойств View $$\Rightarrow$$ выберите закладку Style, после чего установите параметры Row Height и Shrink Rows to Content в соответствии с вашими данными.
Учитывая то, что Query Views можно построить из комбинаций данных Notes и интегрированных данных, обновление Query View зависит от содержания добавленных или измененных данных и от того, как эти данные были добавлены.
По умолчанию максимальное количество строк, возвращаемых по запросу SQL, равно 500. Существует два способа изменения этой величины:
DB2QueryViewRowLimit=величина в файле NOTES.INI.Установите значение величины, равное нулю, если хотите снять ограничение с количества возвращаемых строк.
(рис 2.14) Закладка Options в окне свойств View
До этого пункта мы занимались обсуждением Query Views, отображающих данные Lotus Domino путем выборки из DB2 Access View. Однако можно создать Query Views, способные отображать любые данные, видимые базе данных DB2, используя DB2 federation – мощный компонент интеграционной архитектуры DB2 и Domino. Интегрированные данные – это данные, которые хранятся в базах данных, не являющихся базами данных Lotus Domino (например, Oracle, Microsoft SQL или другие базы данных DB2). Их можно сделать видимыми для Lotus Domino, изменив конфигурацию базы данных Lotus Domino, включив в ней поддержку интеграции. Впоследствии вы можете создать Query Views, отображающие только данные Lotus Domino, либо только интегрированные данные, либо и то, и другое вместе.
При изменении конфигурации базы данных Lotus Domino в DB2 с целью включения в ней поддержки интеграции, позволяющей получать доступ к объектам, находящимся вне текущей базы данных (база данных определена в закладке DB2 серверного документа, находящегося в директории Domino), вы можете создавать так называемые "интегрированные объекты" (federated objects). Эти интегрированные объекты DB2 позволяют не только получать доступ к другим таблицам DB2, которые находятся в других базах данных DB2, но также и к другим системам управления базами данных (СУБД).
В приложении ITSO Electronics нам необходимо создать новый интегрированный Query View, который будет обращаться к информации отдельной базы данных DB2, принадлежащей отделу кадров и содержащей данные о персонале. В приведенной ниже последовательности действий показано, как изменить конфигурацию сервера DB2 для включения поддержки интеграции.
DB2_ALLOW_SETAUTH_WITH_REMOTECONNECT, чтобы Query View смог работать. Используйте следующие путь и команду:C:\Program Files\IBM\SQLLIB\BIN>db2set -i DB2 DB2_ALLOW_SETAUTH_WITH_REMOTECONNECT=1где
–i определяет имя вашего экземпляра DB2 (который обычно, как и в нашем сценарии, называется DB2 ).C:\Program Files\IBM\SQLLIB\BIN>db2 update dbm cfg using FEDERATED YES
(рис 2.16) Папка Federated Database Objects в DB2 Control Center
(рис 2.18) Папка Server Definitions в DB2 Control Center
(рис 2.19) Окно Create Server Definitions: кнопка Discover
(рис 2.22) Окно DB2 Control Center: User MappingsConnect (Подключиться), после чего введите ID пользователя и пароль. В приложении, использованном в нашем сценарии, мы применяли ID пользователя базы данных DB2DOMINO и его пароль.
(рис 2.25) Окно DB2 Control Center: Create New Nickname
(рис 2.28) Open Nickname: окно EMPLOYEEMANNYSANTANNA. Чтобы завершить этот этап, выполните приведенную ниже последовательность действий из командной строки или из DB2 Command Editor (Редактор команд DB2). Войдите в вашу базу данных в качестве пользователя сервера Lotus Domino или же в качестве другого администратора. Затем выполните одно из приведенных ниже действий:MANNYSANTANNA:GRANT SELECT ON DB2DOMINO.EMPLOYEE TO MANNYSANTANA
(рис 2.29) DB2 Command EditorТеперь вы можете создавать Query Views с интегрированными данными, благодаря чему ваше приложение Lotus Domino получает расширенные возможности доступа к данным.
После завершения настройки интеграции на сервере DB2 мы можем получать доступ к интегрированным данным путем создания интегрированных Query Views в нашем приложении ITSO Electronics. Чтобы создать интегрированный Query View в приложении ITSO Electronics, выполните следующие действия.
(рис 2.31) Представление HR Employees в Domino Designer
(рис 2.32) Интегрированный Query View HR EmployeesПри интеграции Lotus Domino и DB2 следует иметь в виду, что:
ACL ) все равно продолжают поддерживаться, как и поля Readers и Authors.NSF в DB2, Lotus Domino создает и управляет набором таблиц, необходимых для поддержки ваших данных NSF, но вы не можете получить доступ к этим таблицам напрямую. Данные доступны лишь после определения DB2 Access View.Notes на SQL через DB2 Access View защита на уровне пользователя всегда осуществляет проверку пользователя, обращающегося к этим данным, причем проверка осуществляется по связке имени пользователя Notes и имени пользователя DB2.Notes и имени DB2 также используется.Notes, можно управлять доступом к DB2 Access View с помощью механизма DB2 GRANT, добавив приведенный ниже параметр к файлу NOTES.INI на сервере DB2 Access:Allow_Anonymous_Access_From_DB2=значение
0 – отключает доступ по анонимной учетной записи;1 – включает доступ по анонимной учетной записи через механизм DB2 GRANT.
Когда параметры файла NOTES.INI активированы, будет осуществляться анонимный доступ к Lotus Notes всякий раз, когда имя пользователя DB2 не связано с именем пользователя Lotus Notes.
NSF ), связанной с DB2 Access View.DB2 не позволяет получать доступ в DB2 Access View в Lotus Domino, то вы получите следующее сообщение об ошибке:"com.ibm.db.DataException: A database manager error occurred.: [IBM][CLI Driver][DB2/NT] SQL0443N Routine "ISREADER3" (specific name "") has returned an error SQLSTATE with diagnostic text "14512 : No matching Notes user found for DB2 user and anony". SQLSTATE=04004
Дополнительную информацию по безопасности и интеграции DB2 можно получить в Lotus Domino 7 Designer Help в разделе DB2 Access View security по адресу: http://www.lotus.com/ldd/doc/domino_notes/7.0/help7_designer.nsf
В этом разделе мы рассмотрели только те аспекты безопасности, которые связаны с интеграцией DB2 и Domino. Для получения более полного обзора по безопасности в Lotus Domino вы можете обратиться к готовящемуся к выходу руководству Security Considerations in Notes and Domino 7, REDP-4104.
В этом разделе дается несколько советов по устранению проблем, связанных с интеграцией с DB2. Для получения дополнительных сведений перейдите к разделу DB2 Integration and
Если при интеграции Domino и DB2 возникают какие-либо проблемы, первое, что необходимо сделать, – проверить конфигурацию сервера DB2 Access. Инструмент DB2 NOTES.INI. Если все поля и параметры верны, этот инструмент приступает к проверке соединения между сервером DB2 Access и выбранным сервером Lotus Domino, проверяет, все ли функции и свойства присутствуют, определяет, корректен ли документ Connection на сервере DB2 Access, после чего пробует открыть директорию Domino на сервере DB2 Access. Если DB2
Configuration (Конфигурация).Connections (Соединения). Выберите документ DB2 Tools (Сервис) выберите DB2 Server => Test DB2 Access (Сервер DB2 $$\Rightarrow$$ Проверить доступ к DB2).На рис 2.33 показан результат работы инструмента DB2
(рис 2.33) Результат работы инструмента DB2 Access TestЕсли при использовании DB2 Access Views пользователи столкнутся с проблемой получения доступа к вашей базе данных Lotus Notes с поддержкой DB2, убедитесь в том, что элемент ACL для каждого пользователя идентичен первому элементу в поле User name в документе Person пользователя, хранящемся в директории Domino на сервере Domino.
Обычно, когда вы получаете сообщение об ошибке при открытии Query View, лучше всего взглянуть на серверную консоль на сервере Lotus Domino. Сообщения об ошибке, появляющиеся на серверной консоли, обычно напрямую указывают на источник той или иной проблемы.
В приведенном ниже списке представлены самые распространенные сообщения об ошибках и некоторая информация о них.
DB2-Authorization Violation (Нарушение авторизации DB2).Хотя сообщение об ошибке выглядит именно так, данная проблема никак не связана с безопасностью. Такую информацию можно увидеть на серверной консоли:
Failed when DB2 was collecting column info. DB2-Authorization violation.: 42S02 - [IBM][CLI Driver][DB2/NT] SQL0204N "SALES.SALESDAV" is an undefined name. SQLSTATE=42704 - *LOCAL.DB2.051103024144 (Ошибка DB2 при сборе информации о столбцах. Нарушение авторизации DB2.: 42S02 - [IBM][CLI Driver][DB2/NT] SQL0204N "SALES.SALESDAV" не определенное имя. SQLSTATE=42704 - *LOCAL.DB2.051103024144 ).Существует три возможные причины появления этого сообщения об ошибке:
Failed when DB2 was collecting column info. DB2-Authorization violation.: 42S22 - [IBM][CLI Driver][DB2/NT] SQL0206N "C.CUSTOMERNAM" is not valid in the context where it is used. SQLSTATE=42703 - *LOCAL.DB2.051103024144 (Ошибка DB2 при сборе информации о столбцах. Нарушение авторизации DB2.: 42S22 - [IBM][CLI Driver][DB2/NT] SQL0206N "C.CUSTOMERNAM" не верен в контексте, в котором он использован SQLSTATE=42703 - *LOCAL.DB2.051103024144 ).Одной из причин появления такой ошибки является то, что столбец, к которому был применен запрос, не существует в DB2 Access View; в этом примере таким столбцом является CUSTOMERNAM.
DB2-Dynamic SQL Error (Ошибка SQL в динамической DB2).Это сообщение об ошибке указывает на синтаксическую ошибку в SQL-выражении. Посмотрите на серверную консоль и проверьте SQL-выражение:
Failed when DB2 was collecting column info. DB2-Dynamic SQL error.: 42601 - [IBM][CLI Driver][DB2/NT] SQL0104N An unexpected token "FROMSALES2" was found following "SELECT *". Expected tokens may include: "<from>". SQLSTATE=42601 - G921557D. GD04.0088C6170623 (Ошибка DB2 при сборе информации о столбцах. Ошибка SQL в динамической DB2.: 42601 - [IBM][CLI Driver][DB2/NT] SQL0104N неожиданный символ "FROMSALES2" нашел следующее: SELECT *". Expected tokens may include: "<from>". SQLSTATE=42601 - G921557D.GD04.0088C6170623 ).
В этом примере в команде было пропущено место между FROM и SALES2.
Opening View: The given query cannot generate a result set and therefore has not been executed (Открытие представления: сделанный запрос не может сгенерировать набор результатов и, следовательно, не может быть выполнен).Из соображений безопасности SQL-выражения в Query View были ограничены до выражений, которые возвращают наборы результатов. Команды Update и Insert не работают, когда используются для выборки. Например, если вы хотите выполнить в качестве первой команды SELECT и допустили ошибку при наборе SQL-выражения, такую как написание команды SELCT вместо SELECT, это может вызвать ошибку.
This function is not implemented on this version of the server (Эта функция неприменима для этой версии сервера).Вероятнее всего, вы пытаетесь открыть Query View на локальной реплике или на системе, в которой не включена поддержка DB2.
Failed when DB2 was fetching a note. DB2-External function exception.: 38503 - [IBM][CLI Driver][DB2/NT] SQL0430N User defined function "DOMINO.ISREADER3" (specific name "SQL051024022301200") has abnormally terminated. SQLSTATE = 38503 - *LOCAL.DB2.051028175704 (Ошибка DB2 при выборке записи. DB2-внешнее исключение функции.: 38503 - [IBM][CLI Driver][DB2/NT] SQL0430N. Функция "DOMINO.ISREADER3" (собственное имя "SQL051024022301200" ), определенная пользователем, была аварийно завершена. SQLSTATE=38503 - *LOCAL. DB2.051028175704 ).Одна из возможных причин появления данной ошибки заключается в существовании более ранней версии Lotus Notes и Domino на данной системе. Для решения данной проблемы достаточно будет просто удалить более раннюю версию или переименовать папку.
Часто оказывается полезным собрать информацию, касающуюся диагностики. Это поможет вам, вашим коллегам или персоналу IBM найти источники проблемы.
NOTES.INI с сервера Lotus Domino и с сервера DB2 Access.Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.