Использование IBM DB2 в приложениях Lotus Domino 7

В Lotus Domino 7 предоставлена возможность использования DB2 в качестве хранилища данных. Данная функциональная возможность позволяет вам использовать обе базы данных (DB2 и Domino), получая доступ и просматривая данные, хранящиеся в обоих форматах. Это дает возможность использовать лучшее из DB2 и Domino в вашей среде. Пользователи Notes получают доступ к возможностям DB2, таким как реляционные структуры и виды, основанные на языке SQL (System Query Language). Пользователи DB2 могут воспользоваться возможностями Domino, такими как репликация и защита.

DB2 как дополнительная возможность для хранения позволяет пользователям Lotus Domino сохранять внутреннее представление своих сообщений и данных для совместной работы в корпоративной реляционной базе данных, поддерживая полную совместимость с NSF-функциональностью. Кроме того, Domino 7 предоставляет две функции, DB2 Access Views (DAVs) и Query Views, которые позволяют разработчикам Domino-приложений использовать в полном объеме реляционные возможности с данными Domino и DB2.

В данной статье кратко описываются эти виды, как их можно использовать и как разрабатывать такие приложения. Мы полагаем, что вы уже разрешили использование DB2 на вашем Domino-сервере, установили ее и запустили, а также имеете некоторый опыт работы с Domino Designer.

Примечание: Domino 7 с DB2 доступен всем пользователям Lotus Domino только для оценки (не предоставляется поддержка) через DB2 Feature Trial. Существует также программа Limited Availability Program для квалифицированных пользователей по использованию возможностей DB2 с технической поддержкой и доступом к ресурсам IBM Development.

Разработка приложений в среде DB2

Для создания приложений, использующих общие возможности сервера Domino, а также мощные возможности системы транзакций сервера IBM WebSphere и возможности хранения в базе данных DB2, вы можете использовать Domino Designer. Его можно использовать для создания сквозных (end-to-end) бизнес-решений, таких как управление системой поставок, автоматизация продаж или управление взаимоотношениями с покупателями.

Применяя технологию Java-сервлетов, вы можете совместно использовать код с приложениями IBM WebSphere и связываться с ними. Single Sign-On (SSO), общая служба аутентификации, также позволяют плавно интегрировать приложения Lotus Domino и WebSphere.

Как уже упоминалось, Domino Designer 7 содержит два новых типа элементов проектирования, помогающих управлять данными, которые хранятся в DB2-базах данных Lotus Notes:

  • DB2 Access View (DAV) - это общий ресурс, позволяющий определять DB2-вид данных Lotus Notes.
  • Query View - это новый тип NSF-вида. Этот вид использует SQL-запросы. Query View позволяет показывать DB2-данные в Notes-виде. Если вы хотите создать Query View на основе данных базы данных Notes, размещенной в DB2, то должны сначала определить и заполнить DAV.

DB2 Access View

Когда сервер использует DB2, пользовательские данные не меняются в реляционных таблицах напрямую. Меняется только внутреннее представление пользовательских данных в Domino в табличных форматах. Вы никогда не должны напрямую управлять этими таблицами. Однако разработчики приложений могут определить свои собственные виды DB2 Access с помощью Domino Designer.

Большая часть информации в Domino состоит из данных для системы обмена сообщениями и совместной работы, непригодных для хранения в реляционных хранилищах. То есть, разработчики приложений могут теперь выбрать только те данные/поля, которые им нужны для реляционной обработки. После определения DAV в Domino Designer вы можете создать соответствующий DB2-вид, который будет заполняться данными Domino из указанных полей. После этого все ваши SQL-приложения, например, Crystal Reports, могут работать с Domino-данными через этот DB2-вид (см. рисунок 1). Кроме того, сервер Domino будет отвечать за поддержку целостности данных при любых обновлениях как через Domino, так и через DB2 при разрешенных в Domino функциях защиты.

Рисунок 1. Обзор DB2 Access Views

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

  • Предоставить Domino-данные для других реляционных приложений, таких как инструментальные средства построения отчетов.
  • Использовать опыт разработки SQL-приложений для работы с Domino-данными.
  • Предоставить Domino-данные так, чтобы их можно было объединить с использованием соединений с другими базами данных Domino или SQL-приложениями.

Query View

Эта функциональная возможность предназначена для тех разработчиков Domino-приложений, которые знакомы с Notes-видами. Она позволяет определить Domino-вид, используя SQL. При помощи Domino Designer вы можете определить Domino-вид, данные которого основаны на SQL-запросе. Это позволяет приложению получить данные (через соединение) из мест, из которых ранее этого сделать было нельзя. Источником данных могут быть другие реляционные таблицы/виды DB2 или другие DAV баз данных Domino, использующих DB2.

Query View является динамическим. SQL-запрос будет выполняться заново при каждом обновлении Domino-вида (см. рисунок 2).

Рисунок 2. Динамические Query View

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

  • Поместить данные из других источников, используя стандартный SQL.
  • Создать вид, используя SQL-возможности Domino-данных.

Создание Query View

Для использования Query View с DAV, вы должны, прежде всего, убедиться в том, что в Domino разрешено использование DB2 в качестве хранилища данных, и NSF, который вы планируете использовать, должен храниться в DB2. Также должен быть установлен и корректно настроен DB2 Access Server. Кроме того, все пользователи Notes, обращающиеся к Query Views, должны иметь корректные пользовательские учетные записи DB2, которые должны быть установлены из Domino Administration Client перед развертыванием. Также, администратором должны быть установлены нужные DB2-привилегии для DB2-объектов, если через Query View осуществляется доступ к каким-либо "родным" DB2-данным. За все эти требования ответственен администратор Domino и/или DB2, но эта тема выходит за рамки рассмотрения данной статьи.

После выполнения этих требований и разрешения серверу использовать DB2, любые базы данных, создаваемые на этом сервере, будут использовать DB2. Вы можете быстро проверить, использует ли база данных DB2, нажав File - Database - Properties и выбрав вторую страницу "i" в информационном окне Database properties. В ней отобразится сообщение 'Database is DB2-enabled', как показано на рисунке 3.

Рисунок 3. На странице Database properties показано, что база данных использует DB2

Обратите внимание на то, что некоторые системные базы данных (например, Names.nsf и Events4.nsf) не поддерживают DB2.

Если база данных использует DB2, Domino хранит NSF в виде набора таблиц в DB2. Вы не можете просматривать эти данные; это скрытые данные в Domino. Вы можете просматривать NSF-данные в DB2, только создавая DAV для них. DAV делает данные доступными непосредственно через SQL. Сторонние приложения, использующие Open Database Connectivity (ODBC), тоже могут читать данные.

Сейчас мы рассмотрим пошаговый пример, показывающий процесс создания базы данных DB2 и процесс создания ваших собственных Query View. Предоставленные примеры используют базу данных, создаваемую шаблоном Discussion, поставляемым с дистрибутивом Notes-клиента.

Если база данных Domino использует DB2, Domino создает для нее схему, а также набор таблиц в этой схеме для хранения Notes-данных. Имя схемы основано на имени NSF-файла. Любые DAV, создаваемые вами, тоже будут размещены в этой схеме. Если бы вы включили все сообщения из NSF в одну DAV-таблицу, это было бы не эффективно для SQL-доступа. Дело в том, что набор сообщений обычно не имеет унифицированного набора полей (или столбцов в базе данных DB2) и, следовательно, не может быть сгруппирован способом, имеющим смысл для SQL-запросов. Для того чтобы сделать SQL-доступ полезным и управляемым, вы должны определить DB2-виды, указывающие поля, к которым вы хотите обращаться через SQL, и набор сообщений, принадлежащих этому DB2-виду (эти сообщения формируют строки DB2-вида).

Шаг 1. Создание DAV

Прежде чем поместить какие-либо Domino-данные в DB2 Query View в Lotus Notes Client, вы должны создать DAV (DB2-виды, которые помещают в базу только DB2-данные, не требуют DAV). В DAV в качестве записей должны быть созданы те же поля, которые будут отображаться в столбцах вида. DAV используют много места, поскольку каждый DAV дублирует данные в базе данных, поэтому рекомендуется иметь один (или очень мало) DAV, содержащий все необходимые поля для различных Query View.

Запишите названия всех полей в столбцах вида. Для данного примера Query View будет использовать аналогичный формат для вида All Documents в Discussion. Используя формулу SQL Query, мы назначим "динамические" категории вместо категорий, находящихся в самих сообщениях. Наш список полей будет таким: Form, From, AltFrom, Subject, Readers, ExpireDate.

Запустите Domino Designer и выберите параметр DB2 Access Views в Shared Resources (см. рисунок 4).

Рисунок 4. Диалоговое окно, показывающее параметр DB2 Access Views

Нажмите New для создания нового DAV. В диалоговом окне свойств введите DAV SUMMARY2. Вставьте поля по вашему списку полей. Отметьте флажок All forms в диалоговом окне DAV properties, как показано на рисунке 5. Это будет гарантировать, что все документы в базе данных включены в DAV. Сохраните изменения и выйдите из DAV.

Рисунок 5. Диалоговое окно DAV properties, показывающее отмеченный флажок All forms

Чтобы завершить создание DAV, нужно создать его в DB2 и заполнить информацией. На вершине списка DAV в Designer нажмите кнопку Create/Update in DB2. Затем нажмите кнопку Populate in DB2. Это действие передаст в сервер Domino запрос на заполнение DAV. Обращаем внимание на то, что для большой базы данных это займет некоторое время. Для проверки нажмите кнопку Refresh Status (см. рисунок 6).

Рисунок 6. Кнопка DAV Refresh Status

Когда DAV будет готов к использованию, слева от имени DAV в Designer появится галочка, как показано на рисунке 7.

Рисунок 7. Галочка, указывающая на готовность DAV к использованию

Шаг 2. Создание Query View

Query View - это еще один тип Notes-вида. Аналогично другим типам Notes-видов, Query View - это элементы проектирования, являющиеся частью Domino-приложений. Query View использует формулу, которая формирует SQL-запрос для заполнения его данными, вместо использования формулы выбора. Для создания Query View, основанного на данных в базе данных Notes, размещенных в DB2, вы должны, прежде всего, определить и заполнить DAV для этой базы данных (см. Шаг 1). Поскольку Query View не являются персистентными, они не занимают места в базе данных Notes. Существующие виды не могут быть преобразованы в Query View; вы должны указать то, что вид является видом Query View при его создании.

Доступ и управление данными в базах данных DB2 осуществляется через SQL-запросы. Когда вы создаете новый вид в базе данных DB2, создается новое условие выбора, называемое By SQL Query. Если вы не знаете сразу, какая должна быть ваша формула SQL Query, введите двойные кавычки в поле формулы. Обратите внимание на то, что вводимый вами SQL Query является формулой, формирующей SQL Query.

Для данного примера мы создадим вид Query View с названием New SQL view. Нажмите кнопку Copy From и выберите вид All Documents. Затем выберите условие выбора By SQL Query и введите "" в качестве формулы (см. рисунок 8).

Рисунок 8. Диалоговое окно Create View, показывающего выбранный By SQL Query

Нажмите кнопку Save and Customize. Когда этот вид откроется в Domino Designer, удалите все столбцы, кроме Date и Topic, и добавьте столбец категорий слева, как показано на рисунке 9.

Рисунок 9. Столбец категорий

После сохранения вида вы можете различать виды SQL Query View по серой и синей пиктограмме, появляющейся слева от названия вида в Domino Designer (см. рисунок 10). Если вы поместите курсор мышки над пиктограммой, будет показано, что ваш вид является видом DB2 Query View.

Рисунок 10. Серая и синяя пиктограмма рядом с названием вида

Шаг 3. Создание SQL Query Formula

Важно: Выражение Select формулы SQL Query должно включать все поля, на которые есть ссылка в столбцах вида.

Измените новый Query View. Просмотрите формулу каждого столбца и запишите на листе бумаги поле (поля), на которое есть ссылка в этих формулах. Например, мы создали вид на основе вида All Documents базы данных discussion. Вот поля, которые мы записали:

Столбец  Поле (поля) 
Categories Categories
Мы не будем здесь использовать данные из поля Categories. Это будет динамический столбец, генерируемый формулой SQL Query.
Date Нет поля. Этот столбец использует all @functions.
Topic From
AltFrom
Readers
ExpireDate
Subject

Следующий шаг - создание SQL Query. Самым важным элементом SQL query является выражение Select. Правила для выражений Select следующие:

  • Весь SQL-запрос должен быть заключен в двойные кавычки.
  • В запрос должны быть включены все поля, на которые есть ссылка в столбцах вида.
  • Названия полей разделяются запятой.
  • Если Query View ссылается на Domino-данные через DAV и выбирает #NOTEID из DAV, вы можете открыть сообщение.
  • Необходима корректная ссылка на Schema. Когда база данных Domino хранится в DB2, информация содержится в таблицах, размещенных в одной группированной структуре, называемой схемой. Все ссылки на эти таблицы используют имя таблицы, следующее за именем схемы и отделенное точкой (например, "schema.table"). Быстрым и простым способом определить имя схемы DB2-базы данных Domino является использование @function @DB2Schema, которая при использовании в формуле запроса возвращает имя DB2-схемы для указанной DB2-базы данных Domino.
  • На DAV нужно ссылаться корректно.

При изменении SQL Query View в Domino Designer на панели программиста отображается новое событие SQL Query, как показано на рисунке 11.

Рисунок 11. Панель программиста показывает новое событие SQL Query event

Вы можете записать SQL Query так же, как записали бы формулу выбора. Следующий код - это выражение Select, созданное для нашего нового вида с использованием DISCUSSION_DAV, который мы создали на Шаге 1 на основе показанной выше таблицы полей. Обратите внимание на то, что жесткие возвраты каретки не поддерживаются в SQL-части формулы. Должен быть один параграф, заключенный в двойные кавычки.

REM {DB2 schema};
MySchema:=@DB2Schema(@DbName);
REM {DAV name constructed with schema};
MyTable:=MySchema + ".SUMMARY2";

"with categorized (categories, #noteid, from, form, altfrom, readers, 
  expiredate, subject) as (select 'Agendas', 
#noteid, from, form, altfrom, readers, expiredate, subject from " + MyTable 
  + " where (lcase(subject) 
like '%meeting%' or lcase(subject) like '%agenda%') UNION ALL select 
  'Backup/Restore', #noteid, from, 
form, altfrom, readers, expiredate, subject from " + MyTable + " where 
  (lcase(subject) like '%backup%') 
UNION ALL select 'Performance', #noteid, from, form, altfrom, readers, expiredate, 
  subject from " + MyTable 
+ " where (lcase(subject) like '%performance%') UNION ALL select 'Tools', #noteid, 
  from, form, altfrom, 
readers, expiredate, subject from " + MyTable + " where (lcase(subject) like '%tools%' ) 
  UNION ALL select 
'Admin', #noteid, from, form, altfrom, readers, expiredate, subject from " + MyTable + 
  " where (lcase(subject) 
like '% db2 %') ) select * from categorized";

Ниже приведена SQL-часть формулы, разбитая на фрагменты:

Первая часть называется "регулярным табличным выражением". Она создает виртуальную таблицу "CATEGORIZED" с набором столбцов, предоставленным из внутренних запросов. Каждый внутренний запрос должен совпадать с этими столбцами по положению и типу данных. "with categorized (categories, #noteid, from, form, altfrom, readers, expiredate, subject) as

  • categorized - это имя, которое мы даем таблице.
  • categories - это имя, которое мы даем первому столбцу; он будет динамическим.
  • #noteid - как упоминалось выше, помещается здесь для того, чтобы можно было открыть сообщения.
  • from, form.... subject - это имена полей, которые будут отображаться в Query View.

Это один из внутренних запросов, предоставляющий виртуальной таблице категорий данные из реляционных таблиц (в данном случае, MyTable):

(select 'Agendas', #noteid, from, form, altfrom, readers, expiredate, subject from " + MyTable + " where (subject like '% meeting %' or subject like '% agenda %')

В этом примере результат этого внутреннего запроса комбинируется с результатами других внутренних запросов с ключевыми словами UNION ALL:

UNION ALL 

select 'Backup/Restore', #noteid, from, form, altfrom, readers, expiredate, subject from " + MyTable + " 
where (lcase(subject) like '%backup%')

UNION ALL 

... (следующий внутренний запрос)

Столбцы во внутренних запросах отображаются непосредственно в столбцы виртуальной таблицы CATEGORIZED, то есть:

  • 'Agendas' или 'Backup/Restore' - это значения, отображающиеся в столбец categories виртуальной таблицы categorized. Обратите внимание на то, что в этом примере это динамические, литеральные значения. Значения могут порождаться любым выражением на языке SQL.
  • from, form... subject - это поля, которые будут отображаться. Они должны совпадать по положению и типу данных со столбцами виртуальной таблицы CATEGORIZED.

Также, обратите внимание на то, что выражение Select из любого внутреннего запроса могло бы поместить столбцы из любой другой таблицы, имеющие любое другое имя, но только если выбранные столбцы совпадают по типу данных со столбцами в любой другой виртуальной таблице CATEGORIZED. Вот пример:

(select 'Somewhere Else', foreign_noteid, somefrom, myform, 
  youraltfrom, the_readers,   the_expiredate, topic from " 
+ AnotherTable + "where topic like '% this isn't that hard, really %')

Это работает, пока foreign_noteid, somefrom, myform, youraltfrom, the_readers, the_expiredate и topic совпадают по типу данных со столбцами в виртуальной таблице CATEGORIZED (то есть, #noteid, from, form, altfrom, readers, expiredate, subject).

В дополнение:

  • UNION ALL - это ключевое слово, объединяющее все выражения Select. Оно отображает данные нескольких выражений Select как один поток в виде. Это один из способов того, как мы можем получить данные из нескольких NSF (или даже нескольких таблиц) в Query View. Другим способом является использование соединения (join).
  • select * from categorized - это конечное Select-выражение. В полной форме (без использования группового символа *) оно выбирает categories, #noteid, from, form, altfrom, readers, expiredate, subject.

Новый SQL-вид теперь готов для просмотра в Notes-клиенте. При открытии вида панель состояния показывает полное Select-выражение, которое вы создали. На рисунке 12 изображен созданный нами вид.

Рисунок 12. Созданный SQL-вид

Заключение

В Domino 7 у нас имеется "родной" способ хранения Domino-данных в реляционной базе данных DB2. Кроме того, нам предоставлена среда разработки Domino-приложений с двумя новыми главными возможностями DB Access views и Query Views для улучшения существующих приложений и разработки новых приложений, основанных на реляционных концепциях.

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


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=2917