(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Книга по Lotus. Разработка приложений в среде Domino 7: Глава 2

Команда Авторов International Technical Support Organization, специалисты International Technical Support Organization, IBM

Глава 1

В этой главе мы обсудим новые возможности, возникающие при интеграции IBM Lotus Notes и Domino 7 с IBM DB2 Universal Database (UDB). Там, где это необходимо, мы используем в качестве примера приложение ITSO Electronics для объяснения новых возможностей разработки приложений.

Ниже вы найдете информацию, в которой будут раскрыты следующие темы:

  • Введение в интеграцию Domino и DB2.
  • DB2 Access Views.
  • Query Views.
  • Интегрированные данные DB2 из DB2.
  • Анализ безопасности DB2 и Lotus Domino.
  • Поиск и устранение неисправностей в DB2 и Lotus Domino.

Замечание. IBM Lotus Notes и Domino 7 с DB2 были выпущены с ограниченной доступностью (Limited Availability); как таковые они недоступны для общего пользования, а рассчитаны только для оценки их возможностей. Для получения дополнительной информации о программе Limited Availability, а также другой важной информации, касающейся этой темы, посетите страницу в Интернете http://www.ibm.com/lotus/nsfdb2.

2.1 Введение в интеграцию Domino и DB2

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Т 5LTM.

Локальная установка DB2

При настройке интеграции Domino и DB2 можно выбирать между локальной или удаленной установкой. При выборе локальной установки оба сервера, и Domino и DB2, будут установлены на одной вычислительной машине. Локальную установку лучше использовать для тестовой среды или же для системы с малой производительностью. На рис. 2.1 показана система с локальной установкой.

Рис. 2.1. Локальная установка: сервер Domino и сервер DB2 установлены на одном компьютере

Рис. 2.1. Локальная установка: сервер Domino и сервер DB2 установлены на одном компьютере

Удаленная установка DB2

Для систем с высокой нагрузкой на сервер, лучше, скорее всего, будет выполнить удаленную установку. В таком случае сервер Domino и сервер DB2 будут установлены на разных компьютерах. На рис. 2.2, представлен пример удаленной установки.

Рис. 2.2. Удаленная установка: сервер Domino и сервер DB2 установлены на разных компьютерах

Рис. 2.2. Удаленная установка: сервер Domino и сервер DB2 установлены на разных компьютерах

Существует два уровня интеграции DB2. В первом случае сервер Domino и сервер DB2 устанавливаются на одном и том же компьютере, а во втором случае на разных компьютерах.

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

  1. Установить Domino 7 на сервере Domino.
  2. Установить приведенные ниже элементы на сервере DB2:
    1. DB2 UDB Enterprise Server Edition версии 8.2.2, включая следующие файлы:
      1. DB2 UDB Enterprise Server V8.2;
      2. DB2 Universal Database версии 8 с пакетом исправлений 9a.
    2. Разблокирующий ключ ограниченного доступа.
  3. Установить сервер DB2 Access.

Если вы решили устанавливать оба сервера, Domino и DB2, на разных компьютерах, то вам необходимо выполнить приведенную ниже процедуру.

  1. Установить Domino 7 на сервере Domino.
  2. Установить приведенные ниже элементы на сервере DB2:
    1. DB2 UDB Enterprise Server Edition версии 8.2.2, включая следующие файлы:
      1. DB2 UDB Enterprise Server V8.2;
      2. DB2 Universal Database версии 8 с пакетом исправлений 9a.
    2. Разблокирующий ключ ограниченного доступа.
  3. Установить DB2 Run-Time Client на сервере Domino.
  4. Установить сервер DB2 Access на том же компьютере, так как этот компьютер будет являться сервером DB2.

Замечание. Убедитесь в том, что вы удалили с компьютера, на котором вы собираетесь устанавливать сервер DB2 Access все версии Lotus Notes и Domino, вышедшие раньше версии 7.0. В противном случае система не будет работать. Если есть необходимость сохранить раннюю версию сервера Lotus Notes/Domino, то переименуйте папку, в которой хранятся файлы этой программы. Убедитесь в том, что nnotes.dll не находится в PATH.

В данном издании мы заостряем внимание на новых элементах разработки приложений, появившихся в Domino 7. Поэтому рассматривается только основные моменты процесса установки. Для получения более подробной информации о том, как установить и обслуживать интеграцию Domino и DB2, обратитесь к следующим источникам:

Совет. Во время установки необходимо определить несколько имен пользователей DB2. Имена пользователей DB2 должны соответствовать приведенным ниже правилам присвоения имен и всегда должны быть написаны заглавными буквами:

  • ID (идентификаторы) пользователей в системах, построенных на основе Linux® и UNIX® могут содержать до 8 символов.
  • Имена пользователей в системах, построенных на основе Microsoft Windows, могут содержать до 30 символов. Однако практически у систем Microsoft Windows NT®, Windows 2000, Windows XP, Windows Server 2003 предел составляет 20 символов.
  • Когда не используется клиентская идентификация, клиенты 32-битовых не Windows-систем, подключающиеся к Windows NT, Windows 2000, Windows XP и Windows Server 2003, с именами пользователей длиннее 8 символов, поддерживаются только в том случае, если имя пользователя и пароль определены в явной форме.
  • Имена и ID пользователей не могут:
    • быть USERS, ADMINS, GUESTS, PUBLIC, LOCAL или любыми другими зарезервированными словами SQL (Structured Query Language);
    • начинаться со слов IBM, SQL или SYS;
    • включать символ ударения.

2.2 DB2 Access Views

В Lotus Notes и Domino применяется иной принцип хранения данных по сравнению с тем, что используется в реляционных базах данных, таких как DB2. В реляционных базах данных информация упорядочивается и распределяется по хорошо определенным таблицам, а в базе данных Domino документы или «записки» («notes»), состоящие из списка полей, сохраняются в формате неструктурированного файла. Такой способ хранения информации усложняет доступ к данным Domino из DB2. Для решения данной проблемы в Domino 7 были введены DB2 Access Views, общие ресурсы, позволяющие отделить DB2 views от данных 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 включается поддержка DB, Domino создает схему базы данных DB2, чтобы поддерживать доступные для пользователей виды просмотров данных в базе данных Lotus Notes. Имя схемы основывается на имени файла NSF. Любые созданные вами DB2 Access Views будут также расположены в этой схеме.

Когда вы создаете DB2 Access View, информация копируется и резервируется в таблице DB2. После создания и инициализации данных в DB2 Access View Domino автоматически синхронизирует обновления между неструктурированными данными Domino и структурированными данными столбцов в DB2 Access View. Следовательно, обновлять DB2 Access View нет необходимости.

2.2.1 Создание DB2 Access Views

Для создания нового DB2 Access View вам необходимо выполнить приведенные ниже действия. К тому же вы можете обратиться к справке Lotus Domino 7 Designer, которую можно найти по следующему адресу в Интернете:
http://www.lotus.com/ldd/doc/domino_notes/7.0/help7_designer.nsf

  1. Откройте базу данных, в которой активирована поддержка DB2, в Lotus Domino Designer 7.0.
  2. На панели проектирования выберите Shared Resources Ю DB2 Access views.
  3. Щелкните по кнопке New DB2 Access view (Создать новый DB2 Access View). Откроется окно, показанное на рис. 2.3.

    Рис. 2.3. Закладка основных свойств DB2 Access View

    Рис. 2.3. Закладка основных свойств DB2 Access View

  4. В окне DB2 Access View вы можете:
    • Присвоить имя DB2 Access View.
    • Выбрать форму или формы, связанные с DB2 Access View.
      Вы можете выбрать, какие именно документы включать, базируясь на содержании поля Form документа. Можно либо выбрать все формы, либо выбрать некоторые из доступных форм, приведенных в списке. Если у документа отсутствует поле формы, то он будет включен в 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.
  5. Перейдите к закладке Advanced (Дополнительные) окна DB2 Access View, как показано на рис. 2.4.

    Рис. 2.4. Закладка Advanced окна DB2 Access View

    Рис. 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, к которым обращаются пользователи, находящиеся в разных часовых поясах.
  6. Закройте окно свойств DB2 Access View.
  7. Нажмите кнопку Choose Field (Выбрать поле), после чего на вашем экране появится окно, показанное на рис. 2.5.

    Рис. 2.5. Окно DB2 Access View Choose Field

    Рис. 2.5. Окно DB2 Access View Choose Field

  8. В окне Choose Field вы можете:
    1. Выбрать поля, которые вы хотите включить из каждой формы.
      В Domino 7 DB2 Access View может содержать максимум 84 столбца. Если вам понадобится большее количество данных, придется определить несколько DB2 Access Views.
    2. Щелкните по кнопке ОК для подтверждения выбора.
      Список выбранных элементов DB2 Access View появится в рабочей области.
  9. Нажмите кнопку Insert Field (Вставить поле), чтобы включить дополнительные поля.

    Возможно, вы захотите добавить поля, находящиеся вне выбранных форм. Например, возьмем поле Form. Вы можете вручную добавить его с помощью командной кнопки Insert Field. Каждый раз, когда вы используете подобное действие, появляется безымянный элемент DB2 в рабочей области.

  10. Дважды щелкните по каждому элементу Access View Entry, чтобы отредактировать его свойства. См. рис. 2.6.

    Рис. 2.6. Свойства Access View Entry

    Рис. 2.6. Свойства Access View Entry

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

    • Field Name (Название поля).
      В это поле необходимо ввести соответствующее имя поля для столбца DB2 в DB2 Access View, поэтому необходимо ввести реальное имя поля, которое появится в записи (в противном случае соответствующее поле найдено не будет и столбец при просмотре в DB2 будет пустым). Замечание. Если использовался метод Choose Field при определении полей для 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 type. Замечание. Если имеется целое число (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») сохраняется «линейно» («inline») (для пересчета через предел в 16384 байта) и текущее поле данных (до 32000 байт на одно поле) сохраняется в виде большого символьного объекта (Character Large Object, CLOB). Использование CLOB позволяет увеличить емкость DAV (84?32000), однако если вы не можете поместить данные «линейно», то придется использовать только тип LONG VARCHAR,,так как CLOB работает медленнее и занимает больше дискового пространства, чем линейное хранение данных. При создании или обновлении DB2 Access View сервер Domino автоматически проверит DB2 Access View на превышение максимальной длины; таким образом, не придется вручную считать длину. Тем не менее, вы можете использовать рекомендации, приведенные в табл. 2.1, для оценки «линейной» длины данных.

Таблица 2.1. Виды данных и их длина в DB2 Access View

Тип

Длина в 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.

2.2.2 Экспортирование данных с типом TIMEDATE в DB2 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 time zone conversions» на закладке Advanced окна свойств Access View Entry.

Замечание. Если этот параметр изменен в существующем DB2 Access View, вы должны будете перестроить DB2 Access View.

2.2.3 Размещение диапазонов дат в DB2 Access View

При вставке или обновлении диапазонов дат в документе, расположенном внутри DB2 Access View через SQL, необходимо определить диапазоны дат в полном формате временной отметки DB2, например такой, как yyyy-mm-dd-hh.mm.ss.subsec (год-месяц-день-час.минута.секунда.миллисекунда) или 2005-12-12-08.06.30.123456. Если при выполнении данного этапа произошла ошибка, вставленное значение будет не определено или равно нулю.

2.2.4 Проверка статуса DB2 Access View

При выборе DB2 Access View в Domino Designer показывается список всех DB2 Access View, находящихся в базе данных. Перед каждым DB2 Access View отобразится иконка, показывающая его статус. Данные иконки с соответствующими расшифровками приведены на рис. 2.7.

Рис. 2.7. Иконки, символизирующие статус каждого DB2 Access View

Рис. 2.7. Иконки, символизирующие статус каждого DB2 Access View

2.2.5 Дополнительный анализ создания 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 значение такого поля будет просто установлено на нуль, и при любых запросах, касающихся этого поля, будет отображаться пустое (нулевое) значение. Поля с типом rich text и formula, не поддерживаются в DB2 Access View. Если вы включите такие поля в DB2 Access View, то сообщения об ошибке выдаваться не будет, но вместо содержимого поля будет отображаться нуль.

Размеры DB2 Access View и его элементов (таблиц, видов, триггеров и индексов) не включаются в итоговый размер файла базы данных Lotus Notes с поддержкой DB2, для которой оно было создано. Таким образом, если у вас есть множество DB2 Access View, связанных с базой данных Lotus Notes с поддержкой DB2, следует помнить, что они займут такое количество дискового пространства, которое будет превышать дисковое пространство, отведенное под саму базу данных Lotus Notes с поддержкой DB2. Тем не менее, в результате долгих дискуссий сотрудники корпорации IBM пришли к тому, что использование большого количества дискового пространства часто оказывается необоснованным. На ранних этапах развертывания было показано, что даже DB2 Access View с большим количеством столбцов обычно занимает всего лишь от 2% до 3 % от дискового пространства, занимаемого базой данных.

2.2.6 Применение DB2 Access View в рамках приложения ITSO Electronics

В нашем сценарии, приведенном в качестве примера, компании 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 представлены выбранные поля.

Таблица 2.2. DB2 Access View SALESDAV в базе данных Sales

Поле, включенное в DB2 Access View

Форма

ANumber Sales Activity
AType Sales Activity
ContactName Sales Activity
CustomerName Sales Activity
CustomerNumber Sales Activity
MadeSale Sales Activity
Product1 Sales Activity
Product2 Sales Activity
Product3 Sales Activity
Product4 Sales Activity
SName Sales Activity, Sales Person
SNumber Sales Activity, Sales Person
SPhone Sales Person
STitle Sales Person
FORM Sales Activity, Sales Person

Следующий DB2 Access View, который мы создадим в базе данных ITSO Electronics Customer, будет называться CUSTOMERDAV (см. табл. 2.3).

Таблица 2.3. DB2 Access View CUSTOMERDAV в базе данных Customer

Поле, включенное в DB2 Access View

Форма

customerAddress Customer
CustomerDescription Customer
customerName Customer
customerNumber Customer
ownerName Customer
FORM Customer

И наконец, мы создадим DB2 Access View в базе данных ITSO Electronics Products и назовем его PRODUCTSDAV.

Таблица 2.4. DB2 Access View PRODUCTSDAV в базе данных Products

Поле, включенное в DB2 Access View

Форма

productDescription Product
SupplierAddress Supplier
SupplierDescription Product, Supplier
SupplierName Supplier
SupplierNumber Product, Supplier
productName Product
productNumber Product
FORM Product, Supplier

В дальнейшем мы используем эти DB2 Access View при создании Query View, которое рассмотрено в п. 2.3, «Query Views».

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 View собираются в одно представление. Мы остановимся более подробно на этом аспекте в п. 2.3.3, «Создание Query View с помощью оператора Union».
  • Условие Group by.
  • Условие Having.

Запросы динамически строятся на основе языка SQL и не занимают места в базе данных. SQL-выражение, в свою очередь, может быть динамически построено с использованием языка формул Lotus Notes. Вы можете свободно использовать такие @-формулы, как @Username и @Today, не опасаясь возникновения проблем с индексированием, которые могли бы возникнуть в стандартных представлениях Lotus Notes. Можно даже управлять содержимым представления с помощью @-формулы взаимодействия пользователя с системой @Prompt. Описанием подобного рода аспектов мы займемся в п. 2.3.4, «Динамическое создание Query Views с помощью @-формул».

2.3.1 Создание Query View

Query View не способен напрямую отображать данные документа Lotus Domino. Чтобы сделать это, необходимо в первую очередь, создать DB2 Access View, как описано в п. 2.2.1, «Создание DB2 Access View». Затем можно приступить к созданию Query View, выполнив приведенную ниже последовательность действий.

  1. В Domino Designer перейдите к представлениям (Views). Щелкните по кнопке New View. В окне Create View,в разделе Selection conditions выберите By SQL Query (В соответствии с запросом SQL), как это показано на рис. 2.8.

    Рис. 2.8. Окно Create View

    Рис. 2.8. Окно Create View

  2. Далее введите SQL-выражение для создаваемого представления. В п. 2.3.4 «Динамическое создание Query Views с помощью @-формул», будет рассказано, как вы можете динамически создавать SQL-выражения, основываясь на языке @-формул. Для того чтобы воспользоваться этой возможностью, статические операторы SQL необходимо заключить в кавычки, как это показано в примере 2.1.

    Пример 2.1. Операторы SQL должны быть заключены в кавычки "SELECT * FROM SALES.SALESDAV"

    Вы обращаетесь к DB2 Access View в базе данных, используя название схемы DB2 и название DB2 Access View: DB2SCHEMANAME.DAVNAME. В примере 2.1 DB2 Access View было присвоено имя SALES.SALESDAV. Когда вы размещаете базу данных на сервере, название схемы DB2 обычно является частью имени файла без расширения «.NSF». В нашем примере SALES.NSF стало SALES. Если такое название схемы DB2 уже используется, то она будет называться SALES2, SALES3 и т. д.

    Важно. Когда вы создаете SQL-выражение для Query View, точно не известно, будет ли текущее название схемы DB2 окончательным. Для того чтобы быть уверенным в том, что вы ввели правильное название схемы, лучше всего использовать динамические SQL-выражения, речь о которых пойдет в п. 2.3.4, «Динамическое создание Query Views с помощью @-формул».
  3. Когда вы написали SQL-выражение, можно определить столбцы представления. Это делается так же, как и в случае с обычными представлениями.
  4. Чтобы посмотреть результат, щелкните по кнопке Notes Preview (Предварительный просмотр Notes). Обращаем ваше внимание на то, что кнопка Refresh на панели программирования не позволяет увидеть представление в Domino 7.

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

Пример 2.2. Такой способ написания SQL-выражений вызовет появление сообщений об ошибках

"SELECT
SALES.SALESDAV.CUSTOMERNAME
FROM
SALES.SALESDAV"

Когда мы работали над созданием приложения ITSO Electronics, то пришли к выводу, что написание SQL-выражений в виде строк, объединенных знаком «+», позволяет достигнуть той же легкости при чтении и что, самое главное, они работают в Lotus Domino 7. Пример представлен в примере 2.3. Каждая часть SQL-выражения должна быть заключена в кавычки.

Пример 2.3. Этот способ написания SQL-выражений удобочитаем и работает

"SELECT "+
"SALES.SALESDAV.CUSTOMERNAME "+
"FROM "+
"SALES.SALESDAV"

Язык SQL позволяет использовать упрощенный способ написания SQL-выражений, в котором используются псевдонимы для источников данных. Код программы, представленный в примере 2.3, можно переписать по-другому (см. пример 2.4). Хотя фактически разницы нет, впоследствии этот способ написания SQL-выражений поможет вам понять более сложные примеры.

Пример 2.4. SQL-выражение, написанное более простым способом с помощью псевдонимов

"SELECT "+
"S.CUSTOMERNAME "+
"FROM "+
"SALES.SALESDAV S"

2.3.2 Создание Query View с помощью оператора Join

В Lotus Domino 7 вы можете соединить данные из различных DB2 Access View в один Query View. При этом не играет никакой существенной роли, находятся ли DB2 Access View в одной базе данных или же в разных. Каждый элемент представления может показывать связанные данные, взятые из различных документов, что возможно благодаря DB2 Access View.

На рис. 2.9 показано, как информация из DB2 Access View ORDERDAV и CUSTOMERDAV объединяется в ResultSet SQL.

Рис. 2.9. Создание Query View, используя оператор Join

Рис. 2.9. Создание Query View, используя оператор Join

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

Пример 2.5. SQL-выражение, использующее оператор Join для создания Query View

"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

Рис. 2.10. Query View, созданный при помощи оператора Join

2.3.3 Создание Query View с помощью оператора Union

Компания ITSO Electronics настаивает на том, чтобы все ее внешние контакты были объединены в одно представление. При этом информация о поставщиках хранится в базе данных Products, а данные покупателей хранятся в базе данных Customer. В Lotus Notes и Domino Release 6 данную задачу можно выполнить, лишь создав отдельную базу данных, в которую помещается информация. Однако с появлением Lotus Domino 7 у нас появилась возможность создать Query View с помощью оператора Union в пределах нашего SQL-выражения. На рис. 2.11 показано, как с помощью оператора Union происходит создание Query View из отдельных DB2 Access View.

Рис. 2.11. Создание Query View, используя оператор Union

Рис. 2.11. Создание Query View, используя оператор Union

В примере 2.6 показано SQL-выражение, используемое для сбора данных представления, в котором содержатся все внешние контакты компании ITSO Electronics. Для того чтобы оператор Union заработал, необходимо, чтобы каждая формула отбора возвращала одинаковое число столбцов с одинаковыми именами столбцов. К тому же у соответствующих столбцов каждого набора результатов должны быть соответствующие типы полей.

Пример 2.6. SQL-выражение для объединения

"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, созданный с помощью объединения

Рис. 2.12. Query View, созданный с помощью объединения

Динамическое создание Query Views с помощью @-формул

Во всех приведенных и использованных до сих пор примерах применялись статические SQL-выражения. Однако во многих случаях лучше создавать SQL-выражения на лету, когда Query View уже открыто. К счастью, Lotus Domino 7 позволяет подсчитывать Query View на языке @-формул.

В примере 2.7 представлено простое SQL2.3.4-выражение, которое «собирает» все мероприятия по сбыту для покупателя «ITSO» из DB2 Access View SALESDAV. Для этой цели в нем используется условие S.CUSTOMERNAME=‘ITSO’.

Пример 2.7. Статическое SQL-выражение

""SELECT "+
"S.CUSTOMERNAME, S.ATYPE,S.ANumber , S.MADESALE "+
"FROM "+
"SALES.SALESDAV S "+
"WHERE S.FORM='Sales Activity' AND S.CUSTOMERNAME='ITSO'"

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

Пример 2.8. Динамически составляемое SQL-выражение, использующее язык формул

_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.

Пример 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.

Пример 2.10. Динамическая ссылка на базу данных, находящуюся в той же папке, что и сервер Lotus Domino

_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


2.3.5 Открытие документов из Query Views

В классическом представлении 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 View, убедитесь в том, что вы точно выбрали столбец #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<>''

2.3.6 Открытие Query View с помощью Web-браузеров

В начальном релизе Lotus Domino 7.0, к сожалению, функция просмотра Query View через Web-браузеры недоступна. Корпорация IBM планирует внедрить поддержку Web-браузеров в последующих релизах Lotus Domino. Для получения дополнительной информации, касающейся обновлений, которые позволяют обеспечить поддержку Web-браузеров, посетите Web-сайт IBM с документацией по продуктам линейки Lotus: http://www.lotus.com/ldd/doc.

2.3.7 Query View и LotusScript

Несмотря на то, что Query View позволяет открывать документы в представлении, доступ к ним можно получить и с помощью LotusScript (см. п. 2.3.5, «Открытие документов из Query Views»). В этом случае подойдет даже простой скрипт, приведенный в примере 2.11. Если вы не можете открыть документы из Query View, то в отмеченной строке этого скрипта переменная с типом Object установлена не будет.

Пример 2.11. Простой LotusScript, организующий циклическое прохождение через представление

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. Доступ к таким представлениям необходимо осуществлять через класс элементов представления, как это показано в примере 2.12.

Пример 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

2.3.8 Внедрение Query View в приложение ITSO Electronics

Как и с любыми другими представлениями, вы можете внедрить Query View в форму, подформу, страницу или в документ. В нашем приложении ITSO Electronics в качестве примера мы выполнили внедрение представления Customer Sales Query View в форму Sales Person. Пользователи, обращающиеся к документу Sales Person, теперь могут без особых затруднений увидеть информацию из представления Customer Sales, не закрывая документ (см. рис. 2.13). Для получения дополнительной информации о создании внедренных представлений, обратитесь к справке 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

Рис. 2.13. Query View, внедренное в форму Sales Person приложения ITSO Electronics

2.3.9 Дальнейший анализ Query View

В этом разделе приведены дополнительные рассуждения, касающиеся Query View.

Разделение списковых элементов

В DB2 Access View текстовые списки хранятся в виде текстовой строки, и поскольку Query View считывает данные из DB2 напрямую, то именно эта текстовая строка и возвращается в Query View. Таким образом, если у вас есть списковый элемент, который вы хотите разделить в вашем Query View, необходимо использовать функцию @Explode в столбце, содержащем несколько значений. Чтобы убедиться в том, что представление способно работать с несколькими строками данных, в окне свойств View Ю выберите закладку Style, после чего установите параметры Row Height и Shrink Rows to Content в соответствии с вашими данными.

Обновление Query View

Учитывая то, что Query View можно построить из комбинаций данных Notes и интегрированных данных, обновление Query View зависит от содержания добавленных или измененных данных и от того, как эти данные были добавлены.

Установка максимального числа строк в запросах SQL

По умолчанию максимальное количество строк, возвращаемых по запросу SQL, равно 500. Существует два способа изменения этой величины:

  • Параметр DB2QueryViewRowLimit=величина в файле NOTES.INI.

    Установите значение величины, равное нулю, если хотите снять ограничение с количества возвращаемых строк.

  • В закладке Options окна свойств View выберите параметр Maximum rows returned by a SQL query (Максимальное количество строк, возвращаемое по SQL-запросу) и задайте количество строк (см. рис. 2.14).

Если задействованы оба способа, будет использоваться наименьшее значение из двух.

Рис. 2.14. Закладка Options в окне свойств View

Рис. 2.14. Закладка Options в окне свойств View

2.4 Интегрированные данные DB2 из DB2

До этого пункта мы занимались обсуждением Query Views, отображающих данные Lotus Domino путем опрашивания DB2 Access View. Однако можно создать Query View, способные отображать любые данные, видимые базе данных DB2, используя DB2 federation - мощный компонент интеграционной архитектуры DB2 и Domino. Интегрированные данные - это данные, которые хранятся в базах данных, не являющихся базами данных Lotus Domino (например, Oracle, Microsoft SQL, другие базы данных DB2). Их можно сделать видимыми для Lotus Domino, изменив конфигурацию базы данных Lotus Domino, включив в ней поддержку интеграции. Впоследствии вы можете создать Query View, отображающие только данные Lotus Domino, либо только интегрированные данные, либо и то, и другое вместе.

2.4.1 Включение поддержки интеграции DB2 и Notes

При изменении конфигурации базы данных Lotus Domino в DB2 с целью включения в ней поддержки интеграции, позволяющей получать доступ к объектам, находящимся вне текущей базы данных (база данных определена в закладке DB2 серверного документа, находящегося в директории Domino), вы можете указать, какие именно объекты будут рассматриваться как интегрированные. Эти интегрированные объекты DB2 позволяют вам не только получать доступ к другим таблицам DB2, которые находятся в других базах данных DB2, но также и к другим системам управления базами данных (СУБД).

В приложении ITSO Electronics нам необходимо создать новый интегрированный Query View, который будет обращаться к информации отдельной базы данных DB2, принадлежащей отделу кадров и содержащей данные о служащих. В приведенной ниже последовательности действий показано, как изменить конфигурацию сервера DB2 для включения поддержки интеграции.

  1. Установите переменную окружения, 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).

  2. Перезапустите DB2 для того, чтобы переменная окружения начала работать.

    Обратите внимание на то, что с помощью приведенного ниже пути и команды  можно обновить конфигурацию DB2 Database Manager, для того чтобы активировать интеграцию в DB2:

    C:\Program Files\IBM\SQLLIB\BIN>db2 update dbm cfg using FEDERATED YES

  3. Подключитесь к вашей базе данных Lotus Domino  в DB2 Control Center (центре управления DB2). Убедитесь в том, что в вашей базе данных Lotus Domino включена поддержка интеграции. Для этого щелкните правой кнопкой мыши по вашему экземпляру DB2 и выберите из контекстного меню Configure Parameters (Изменить параметры). Откроется окно DBM Configuration (см. рис. 2.15). Прокрутите это окно вниз до раздела Environment. Найдите ключевое слово FEDERATED и убедитесь, что в поле Value стоит значение Yes. Если же в поле Value стоит No, однако в поле Pending Value стоит Yes, и вы выполнили команду db2set, которую мы рассматривали на этапе 1, необходимо перезапустить DB2, чтобы в поле Value ключевого слова FEDERATED появилось слово Yes.

    Рис. 2.15. Окно DB2 Control Center: DBM Configuration

    Рис. 2.15.  Окно DB2  Control Center: DBM Configuration

  4. Для того чтобы создать интеграционную оболочку в DB2 для внешней базы данных DB2, (в нашем сценарии это база данных DB2 отдела кадров) необходимо вернуться в DB2 Control Center и для базы данных Lotus Domino перейти к папке Federated Database Objects. Далее щелкните по Create New Wrapper (Создание новой оболочки), так же, как на рис. 2.16.

    Рис. 2.16. Папка Federated Database Objects в DB2 Control Center

    Рис. 2.16.  Папка  Federated Database Objects в DB2 Control Center

  5. В результате откроется окно Create Wrapper (см. рис. 2.17). На закладке Wrapper из выпадающего списка Data source выберите источник данных, в качестве которого в нашем сценарии мы будем использовать DB2 UDB. Введите название оболочки в поле Wrapper name; в нашем случае мы использовали DB2WRAP. Щелкните по кнопке ОК.

    Рис. 2.17. Окно Create Wrapper

    Рис. 2.17. Окно Create Wrapper

    Замечание. Для получения дополнительной информации, касающейся оболочек, а также включения поддержки интегрированных данных в DB2, посетите Информационный центр DB2, который находится по следующему адресу в Интернете: http://publib.boulder.ibm.com/infocenter/db2help/index.jsp

  6. После того как вы создадите оболочку, она появится в папке Federated Database Objects в DB2 Control Center (рис. 2.18). Выберите папку Server Definitions (Описания сервера) и щелкните по командной кнопке Create New Server Definition (Создать новое описание сервера). Откроется окно Create Server Definitions, представленное на рис. 2.19.

    Рис. 2.18. Папка Server Definitions в DB2 Control Center

    Рис. 2.18.  Папка Server  Definitions в  DB2 Control Center

  7. В окне Create Server Definitions щелкните по кнопке Discover (Найти). Появится список объектов. Выберите подходящий объект, которым в нашем сценарии является база данных SAMPLE (так называется база данных DB2 отдела кадров), см. рис. 2.19.

    Рис. 2.19. Окно Create Server Definitions: кнопка Discover

    Рис. 2.19.  Окно Create  Server Definitions: кнопка Discover

  8. Щелкните по кнопке Properties (Свойства), откроется окно Server Definition Properties (Свойства описания сервера), которое показано на рис. 2.20. Введите соответствующие значения во все поля закладки Server Definition, которая представлена на рис. 2.20. Все введенные в эти поля  данные соответствуют нашему сценарию. Для поля Type (Тип) из выпадающего списка выберите DB2/UDB. Для поля Version (Версия) из выпадающего списка выберите 8.2, а в полях User ID (Идентификатор пользователя) и Password (Пароль) используйте соответствующие данные пользователя DB2 (или администратора DB2) у которого есть доступ  к внешней базе данных DB2 (в нашем случае это база данных DB2 отдела кадров).

    Рис. 2.20. Окно Server Definition Properties

    Рис. 2.20. Окно Server Definition  Properties

  9. Перейдите к закладке Settings (Параметры), (см. рис. 2.21) и введите название базы данных DB2 в поле Value (Значение) для параметра DBNAME. В нашем сценарии это название базы данных отдела кадров -  SAMPLE. Кнопка ОК станет доступной. Щелкните по ней.

    Рис. 2.21. Окно Server Definitions Properties: закладка Settings

    Рис. 2.21.  Окно Server  Definitions Properties: закладка Settings

  10. Теперь нам надо добавить привязку пользователей к этой интеграционной оболочке, присваивая пользователя сервера Lotus Domino к удаленному соединению, используя имя и пароль пользователя. В нашем сценарии в качестве пользователя сервера Lotus Domino мы взяли DB2DOMINO и такую же учетную запись, предназначенную для разблокирования сервера. В DB2 Control Center под недавно созданным описанием сервера для базы данных SAMPLE щелкните по кнопке Create New User Mapping (Создать новую привязку пользователя), как показано на рис. 2.22.

    Рис. 2.22. Окно DB2 Control Center: User Mappings

    Рис. 2.22.  Окно DB2  Control Center: User Mappings

  11. Откроется окно Create New User Mapping (рис. 2.23). На закладке Users (Пользователи) выберите один или несколько идентификаторов (ID) локальных пользователей, которые необходимо связать с удаленным идентификатором. В нашем сценарии мы выбрали ID пользователя DB2DOMINO.

    Рис. 2.23. Окно Create User Mappings

    Рис. 2.23. Окно Create User Mappings

  12. Перейдите к закладке Settings и введите соответствующие значения в поля Value параметров REMOTE_AUTHID и REMOTE_PASSWORD. В нашем сценарии мы использовали значения DB2DOMINO и DB2DOMINO соответственно, для того чтобы появились параметры, представленные на рис. 2.24. (На нашем сервере DB2 также есть ID пользователя DB2DOMINO, мы применяли его для реализации привязки пользователя. Тем не менее, привязка между ID пользователя, с помощью которого Domino подключается к DB2 (в нашем примере в качестве него использован DB2DOMINO), и ID пользователя, который зарегистрирован на удаленном компьютере DB2 (параметры REMOTE_AUTHID и REMOTE_PASSWORD), могут быть названы идентификаторами пользователя). После этого станет доступной кнопка ОК. Щелкните по ней.

    Рис. 2.24. Окно Create User Mappings: закладка Settings

    Рис. 2.24.  Окно Create  User Mappings: закладка Settings

    Замечание. Если вы столкнетесь с какими-либо проблемами при установке и настройке привязки пользователей, вернитесь в DB2 Control Center, выберите базу данных, к которой хотите подключиться, щелкните по ней правой кнопкой мыши из контекстного меню выберите пункт Connect (Подключиться), после чего введите ID пользователя и пароль. В приложении, использованном в нашем сценарии, мы применяли ID пользователя базы данных DB2DOMINO и его пароль.

  13. В DB2 Control Center создайте псевдоним, связывающий локальный объект с внешним объектом. Псевдоним используется в SQL-выражении Query View. Выберите папку Nicknames (Псевдонимы) и щелкните по командной кнопке Create New Nickname (Создать новый псевдоним), как показано на рис. 2.25.

    Рис. 2.25. Окно DB2 Control Center: Create New Nickname

    Рис. 2.25.  Окно DB2  Control Center: Create New Nickname

  14. Откроется окно Create Nicknames (Создание псевдонимов). Щелкните по кнопке Discover, после чего откроется окно Discover, которое представлено на рис. 2.26. Щелкните по кнопке ОК.

    Рис. 2.26. Create Nicknames: окно Discover

    Рис. 2.26.  Create Nicknames: окно Discover

  15. Затем окно Create Nicknames заполнится объектами, которым вы можете присвоить псевдонимы. В приложении ITSO Electronics для достижения поставленных целей необходимо нажать на кнопку Uncheck All (Снять все), а затем поставить флажок в столбце Create (Создать) для псевдонима EMPLOYEE, как видно из рис. 2.27. Щелкните по кнопке ОК.

    Рис. 2.27. Окно Create Nicknames

    Рис. 2.27. Окно Create Nicknames

  16. После этого будет создан псевдоним EMPLOYEE, в этом можно убедиться в DB2 Command Center. Дважды щелкните по псевдониму, чтобы отобразить интегрированную таблицу EMPLOYEE, представленную на рис. 2.28.

    Рис. 2.28. Open Nickname: окно EMPLOYEE

    Рис. 2.28.  Open Nickname: окно EMPLOYEE

  17. Завершающий этап состоит в присвоении привилегий объекту псевдонима, необходимость в которых объясняется тем, что из всех пользователей DB2 необходимо выбрать тех, которым вы хотите разрешить доступ к интегрированной таблице. В нашем сценарии мы хотим предоставить доступ пользователю с идентификатором MANNYSANTANNA. Чтобы завершить этот этап, выполните приведенную ниже последовательность действий из командной строки или из DB2 Command Editor (Редактор команд DB2. Войдите в вашу базу данных в качестве пользователя сервера Lotus Domino или же в качестве другого администратора. Затем выполните одно из приведенных ниже действий:

    • из командной строки выполните приведенную ниже команду, чтобы предоставить привилегии доступа какому-либо пользователю, в данном случае мы присвоили эти привилегии пользователю MANNYSANTANNA:

      GRANT SELECT ON DB2DOMINO.EMPLOYEE TO MANNYSANTANA

    • выполните эту же команду из DB2 Command (см. рис. 2.29).

      Рис. 2.29. DB2 Command Editor

      Рис. 2.29. DB2 Command  Editor

      Теперь вы можете создавать Query View с интегрированными данными, благодаря чему значительно ускоряется доступ к данным вашего приложения Lotus Domino.

2.4.2 Реализация интеграции DB2 Notes в приложении ITSO Electronics

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

  1. Откройте базу данных ITSO Electronics Sales в Lotus Domino Designer и выберите пункт меню  Create ? View. Откроется окно Create View (Создать представление) (рис. 2.30). В поле «Имя» и введите HR Employees; под таким именем будет значиться ваш новый интегрированный Query View; после чего установите переключатель Selection conditions в положение By SQL Query. Введите строку запроса SQL и щелкните по кнопке Save and Customize (Сохранить и настроить), чтобы настроить представление и добавить новые столбцы.

    Рис. 2.30. Окно Create View

    Рис. 2.30. Окно Create View

  2. Добавьте новые столбцы, в которых будут отображены Employee No (Числовое значение), First name и Last Name из интегрированной таблицы Employee (рис. 2.31). Для каждого столбца определите соответствующее имя столбца из интегрированной таблицы в виде формулы значения столбца.

    Рис. 2.31. Представление HR Employees в Domino Designer

    Рис. 2.31.  Представление  HR Employees в  Domino Designer

  3. После сохранения представления и добавления представления в схему Outline, выберите интегрированный Query View HR Employees в клиенте Lotus Notes, чтобы отобразить информацию из таблицы HR Employees, также как на рис. 2.32.

    Рис. 2.32. Интегрированный Query View HR Employees

    Рис. 2.32. Интегрированный Query View HR Employees

2.5 Анализ безопасности в DB2 и Lotus Domino

При запуске DB2 и Lotus Domino следует помнить о том, что:

  • Хотя базы данных Lotus Domino хранятся на сервере DB2, список контроля доступа все равно продолжает обслуживаться, так же как и поля читателей и авторов.
  • Когда вы сохраняете NSF в DB2, Lotus Domino создает и управляет набором таблиц, необходимых для поддержки ваших данных NSF, но вы не можете получить доступ к этим таблицам напрямую. Данные доступны лишь после определения DB2 Access View.
  • Зашифрованные данные могут храниться в базе данных, основанной на DB2, но они недоступны в DB2 Access View.
  • В Lotus Notes и Domino 7 при обращении к данным Notes на SQL через DB2 Access View защита на уровне пользователя всегда осуществляет проверку пользователя, обращающегося к этим данным, причем проверка осуществляется по связке имени пользователя Notes и имени пользователя DB2.
  • Если вы обращаетесь к DB2 Access View вне Notes/Domino на языке SQL, по умолчанию связка имени пользователя 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 Access View в DB2 Control Center, а ваша учетная запись 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 Notes.

Замечание. Хотя активирование анонимного доступа и позволяет избавиться от привязки имен, Domino все же продолжает управлять доступом к DB2 Access View. Чтобы включить поддержку анонимного доступа, сервер Lotus Domino должен разрешить анонимный доступ и уровень доступа по умолчанию к базе данных (NSF), связанной с DB2 Access View, который в свою очередь, должен обеспечивать достаточными правами, необходимыми для осуществления запрошенной операции SQL, например разрешения SELECT для читателя, разрешение INSERT для автора и т. д.

Дополнительную информацию по безопасности и интеграции 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.

2.6 Поиск и устранение неисправностей в DB2 и Lotus Domino

В этом разделе предоставляется несколько советов по устранению проблем, связанных с интеграцией DB2. Для получения дополнительных сведений перейдите к разделу DB2 Integration and Troubleshooting в справке Lotus Domino 7 Designer.

Если при интеграции Domino и DB2 возникают какие-либо проблемы, первое, что необходимо сделать, - проверить конфигурацию сервера DB2 Access. Инструмент DB2 Access Test тестирует все поля параметров сервера DB2 Access, начиная с серверного документа и заканчивая всеми параметрами сервера DB2 Access из файла NOTES.INI. Если все поля и параметры верны, этот инструмент приступает к проверке соединения между сервером DB2 Access и выбранным сервером Lotus Domino, проверяет, все ли функции и свойства присутствуют, определяет, корректен ли документ Connection на сервере DB2 Access, после чего он пробует открыть директорию Domino на сервере DB2 Access. Если же DB2 Access Test обнаруживает какие-либо проблемы, то информация о неполадке возвращается в консоль сервера Lotus Domino или же в клиент Lotus Domino Administrator. Для того чтобы воспользоваться инструментом DB2 Access Test, сделайте следующее:

  • В Lotus Domino Administrator перейдите к закладке Configuration (Конфигурация).
  • Щелкните по кнопке Connections (Соединения). Выберите документ DB2 Access Server Connection.
  • В панели Tools (Сервис) выберите DB2 Server - Test DB2 Access(Сервер DB2 ? Проверить доступ к DB2).

На рис. 2.33 показан результат работы инструмента DB2 Access Test.

Рис. 2.33. Результат работы инструмента DB2 Access Test

Рис. 2.33. Результат  работы инструмента DB2 Access Test

2.6.1 Список контроля доступа (ACL), необходимый для DB2 Access View

Если при использовании DB2 Access View пользователи столкнутся с проблемой получения доступа к вашей базе данных Lotus Notes с поддержкой DB2, убедитесь в том, что элемент ACL для каждого пользователя идентичен первому элементу в поле User name в документе Person пользователя, хранящемся в директории Domino на сервере Domino.

2.6.2 Ошибки, возникающие при открытии Query View

Вообще, когда вы получаете сообщение об ошибке при открытии 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).

    Существует три возможные причины появления этого сообщения об ошибке:

    • схема DB2 Sales в данном примере не существует;
    • доступ DB2 SALESDAV в этом примере не существует;
    • DB2 Access View не заполнен.
  • 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 на данной системе. Для решения данной проблемы достаточно будет просто удалить более раннюю версию или переименовать папку.

Совет. Упростите код или конструкцию вашего приложения пошаговым образом до тех пор, пока ошибки не прекратят появляться. Очень часто после выполнения такой операции раскрываются истинные причины той или иной проблемы. Во многих случаях решение проблемы становится очевидным.

2.6.3 Данные, которые могут оказаться полезными при поиске истинных источников проблем

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

  • Точная информация, о программных компонентах, которые вы используете:
    • операционная система;
    • сервер DB2;
    • клиент Runtime;
    • Lotus Notes и Domino;
    • Сервер DB2 Access.
  • Информация об используемых патчах, а также об используемых локализациях.
  • Снимки экранов со всеми сообщениями об ошибках.
  • В случае нарушения работы одного из перечисленных ниже компонентов будет создан файл NSD с информацией о диагностике:
    • клиент Lotus Notes,
    • сервер Lotus Domino,
    • сервер DB2 Access.
  • Вся доступная информация из журнала.
  • Дизайн базы данных.
  • Пошаговое описание действий, сделанных до того, как появилась проблема.
  • Файл NOTES.INI с сервера Lotus Domino и с сервера DB2 Access.


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 08.02.2007 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
IBM DOMINO COLLABORATION EXPRESS AUTHORIZED USER ANNUAL SW SUBSCRIPTION & SUPPORT RENEWAL
IBM Domino Messaging Client Access License Authorized User License + SW Subscription & Support 12 Months
IBM DOMINO ENTERPRISE CLIENT ACCESS LICENSE AUTHORIZED USER ANNUAL SW SUBSCRIPTION & SUPPORT RENEWAL
IBM Domino Enterprise Server Processor Value Unit (PVU) Annual SW Subscription & Support Renewal
IBM DOMINO COLLABORATION EXPRESS AUTHORIZED USER LICENSE + SW SUBSCRIPTION & SUPPORT 12 MONTHS
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
Программирование в AutoCAD
Новые материалы
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100