Разработка приложений в Lotus Domino 7

Использование интеграции с DB2 для улучшения приложения ITSO Electronics

Разбить на страницы
Показывать лекцию целиком

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

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

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

    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 $$\text{\textregistered}$$ 5LTM.

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

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

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

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

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

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

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

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

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

  • Установить Domino 7 на сервере Domino.
  • Установить приведенные ниже элементы на сервере DB2:
  • DB2 UDB Enterprise Server Edition версии 8.2.2, включая следующие файлы:
  • DB2 UDB Enterprise Server V8.2;
  • DB2 Universal Database версии 8 с пакетом исправлений 9a.
  • Разблокирующий ключ ограниченного доступа.
  • Установить DB2 Run-Time Client на сервере Domino.
  • Установить сервер DB2 Access на том же компьютере, что и сервер DB2.
  • Замечание Убедитесь в том, что вы удалили с компьютера, на котором собираетесь устанавливать сервер DB2 Access, все версии Lotus Notes и Domino, вышедшие раньше версии 7.0. В противном случае система не будет работать. Если есть необходимость сохранить раннюю версию сервера Lotus Notes/Domino, то переименуйте папку, в которой хранятся файлы этой программы. Убедитесь в том, что nnotes.dll не находится в PATH.

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

  • Lotus Domino Administration 7 Help, "Domino и DB2": http://www.lotus.com/ldd/doc/domino_notes/7.0/help7_admin.nsf/;
  • Readme70.pdf (на компакт-диске);
  • обучающие ресурсы по DB2, размещенные на Web-сайте IBM: http://www.ibm.com/software/sw-lotus/services/education.nsf/wdocs/educationhomepage
  • Developing applications with IBM Lotus Domino Enabled For DB2, E-learning Edition: Self Paced (N7D400SP): http://www.ibm.com/software/sw-lotus/services/education.nsf/81F04813DC9CE3C7852566DA004C5CB2/A6DF60493B0D2B13852570A7006C7E9B;
  • Introducing IBM DB2 Concepts (N7D020): https://education.lotus.com/rw/lewwschd.nsf/5FDC13DD71D1143185256575001E5133/E55E8003DCEC00FA8525701A006959C4.
  • Совет Во время установки необходимо определить несколько имен пользователей DB2. Имена пользователей DB2 должны соответствовать приведенным ниже правилам присвоения имен и быть написаны заглавными буквами:
  • ID (идентификаторы) пользователей в системах, построенных на основе Linux $$\text{\textregistered}$$ и UNIX $$\text{\textregistered}$$ , могут содержать до 8 символов.
  • Имена пользователей в системах, построенных на основе Microsoft Windows, могут содержать до 30 символов. Однако практически у систем Microsoft Windows NT$$\text{\textregistered}$$ , 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, обращающееся к данным 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 нет необходимости.

    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

  • Откройте базу данных, в которой активирована поддержка DB2 в Lotus Domino Designer 7.0.
  • На панели проектирования выберите Shared Resources => DB2 Access views.
  • Щелкните по кнопке .(рис 2.3) Закладка основных свойств DB2 Access View
  • В окне 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.
  • Перейдите к закладке .(рис 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, к которым обращаются пользователи, находящиеся в разных часовых поясах.

  • Закройте окно свойств DB2 Access View.
  • Нажмите кнопку .(рис 2.5) Окно DB2 Access View Choose Field
  • В окне Choose 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 будет пустым).

    Замечание Если использовался метод 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.

  • Замечание Если имеется целое число ( 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, для оценки "линейной" длины данных.
    Виды данных и их длина в 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.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 значение такого поля будет просто установлено =NULL, и при любых запросах, касающихся этого поля, будет отображаться пустое значение. Поля с типом rich text и 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 % от дискового пространства, занимаемого базой данных.

    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 представлены выбранные поля.

    DB2 Access View SALESDAV в базе данных Sales
    Поле, включенное в DB2 Access View Форма
    ANumber

    AType

    ContactName

    Sales Activity

    Sales Activity

    Sales Activity

    CustomerName

    CustomerNumber

    MadeSale

    Product1

    Product2

    Product3

    Product4

    SName

    SNumber

    SPhone

    STitle

    FORM

    Sales Activity

    Sales Activity

    Sales Activity

    Sales Activity

    Sales Activity

    Sales Activity

    Sales Activity

    Sales Activity, Sales Person

    Sales Activity, Sales Person

    Sales Person

    Sales Person

    Sales Activity, Sales Person

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

    DB2 Access View CUSTOMERDAV в базе данных Customer
    Поле, включенное в DB2 Access View Форма
    customerAddress

    CustomerDescription

    customerName

    customerNumber

    ownerName

    FORM

    Customer

    Customer

    Customer

    Customer

    Customer

    Customer

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

    DB2 Access View CUSTOMERDAV в базе данных Customer
    Поле, включенное в DB2 Access View Форма
    productDescription

    SupplierAddress

    SupplierDescription

    SupplierName

    SupplierNumber

    Product

    Supplier

    Product, Supplier

    Supplier

    Product, Supplier

    productName

    productNumber

    Product

    Product

    FORM Product, Supplier

    В дальнейшем мы используем эти DB2 Access Views при создании 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 Views собираются в одно представление. Мы остановимся более подробно на этом аспекте в п. 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 Views". Затем можно приступить к созданию Query View, выполнив приведенную ниже последовательность действий.

  • В Domino Designer перейдите к представлениям ( .(рис 2.8) Окно Create View
  • Далее введите SQL-выражение для создаваемого представления. В п. 2.3.4, "Динамическое создание Query Views с помощью @-формул", будет рассказано, как вы можете динамически создавать SQL-выражения, основываясь на языке @-формул. Для того чтобы воспользоваться этой возможностью, статические операторы SQL необходимо заключить в кавычки, как показано в примере 2.1.
    "SELECT * FROM SALES.SALESDAV"
    Вы обращаетесь к DB2 Access View в базе данных, используя название схемы DB2 и название DB2 Access View: DB2SCHEMANAME.DAVNAME. В п. 2.3.4, "Динамическое создание Query Views с помощью @-формул".
  • Когда вы написали SQL-выражение, можно определить столбцы представления. Это делается так же, как и в случае с обычными представлениями.
  • Чтобы посмотреть результат, щелкните по кнопке 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"

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

    В 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

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

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

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

    Во всех приведенных и использованных до сих пор примерах применялись статические SQL-выражения. Однако во многих случаях лучше создавать SQL-выражения на лету, во время открытия 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
  • 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 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<>''

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

    В начальном релизе Lotus Domino 7.0, к сожалению, функция просмотра .

    2.3.7 Query View и LotusScript

    Несмотря на то, что 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

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

    Как и любое другое представление, вы можете внедрить ). Для получения дополнительной информации о создании внедренных представлений, обратитесь к справке 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.3.9 Подробный анализ Query Views

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

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

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

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

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

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

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

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

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

  • В закладке ).
  • (рис 2.14) Закладка Options в окне свойств View

    2.4 Работа с интегрированными данными DB2

    До этого пункта мы занимались обсуждением 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, либо только интегрированные данные, либо и то, и другое вместе.

    2.4.1 Включение поддержки интеграции для базы данных

    При изменении конфигурации базы данных 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 ).
  • Перезапустите DB2 для того, чтобы переменная окружения начала работать. Обратите внимание на то, что с помощью приведенного ниже пути и команды можно обновить конфигурацию DB2 Database Manager, для того чтобы активировать интеграцию в DB2:
    C:\Program Files\IBM\SQLLIB\BIN>db2 update dbm cfg using FEDERATED YES
  • Подключитесь к вашей базе данных Lotus Domino в DB2 Control Center (центре управления DB2). Убедитесь в том, что в базе данных Lotus Domino включена поддержка интеграции. Для этого щелкните правой кнопкой мыши по вашему экземпляру DB2 и выберите из контекстного меню ). Прокрутите это окно вниз до раздела (рис 2.15) Окно DB2 Control Center: DBM Configuration
  • Для того чтобы создать интеграционную оболочку в DB2 для внешней базы данных DB2 (в нашем сценарии это база данных DB2 отдела кадров), необходимо вернуться в DB2 Control Center и для базы данных Lotus Domino перейти к папке .(рис 2.16) Папка Federated Database Objects в DB2 Control Center
  • В результате откроется окно ). На закладке Wrapper из выпадающего списка Data source выберите источник данных, в качестве которого в нашем сценарии мы будем использовать DB2 UDB. Введите название оболочки в поле (рис 2.17) Окно Create Wrapper
  • После того как вы создадите оболочку, она появится в папке ). Выберите папку .(рис 2.18) Папка Server Definitions в DB2 Control Center
  • В окне .(рис 2.19) Окно Create Server Definitions: кнопка Discover
  • Щелкните по кнопке . Введите соответствующие значения во все поля закладки . Все введенные в эти поля данные соответствуют нашему сценарию. Для поля (рис 2.20) Окно Server Definition Properties
  • Перейдите к закладке ) и введите название базы данных DB2 в поле (рис 2.21) Окно Server Definitions Properties: закладка Settings
  • Теперь нам надо добавить привязку пользователей к этой интеграционной оболочке, присваивая пользователя сервера Lotus Domino к имени и паролю пользователя удаленного соединения. В нашем сценарии в качестве пользователя сервера Lotus Domino мы взяли .(рис 2.22) Окно DB2 Control Center: User Mappings
  • Откроется окно ). На закладке (рис 2.23) Окно Create User Mappings
  • Перейдите к закладке . (На нашем сервере DB2 также есть ID пользователя (рис 2.24) Окно Create User Mappings: закладка SettingsЗамечание Если вы столкнетесь с какими-либо проблемами при установке и настройке привязки пользователей, вернитесь в DB2 Control Center, выберите базу данных, к которой хотите подключиться, щелкните по ней правой кнопкой мыши из контекстного меню, выберите пункт Connect (Подключиться), после чего введите ID пользователя и пароль. В приложении, использованном в нашем сценарии, мы применяли ID пользователя базы данных DB2DOMINO и его пароль.
  • В DB2 Control Center создайте псевдоним, связывающий локальный объект с внешним объектом. Псевдоним используется в SQL-выражении .(рис 2.25) Окно DB2 Control Center: Create New Nickname
  • Откроется окно . Щелкните по кнопке (рис 2.26) Create Nicknames: окно Discover
  • Затем окно . Щелкните по кнопке (рис 2.27) Окно Create Nicknames
  • После этого будет создан псевдоним .(рис 2.28) Open Nickname: окно EMPLOYEE
  • Завершающий этап состоит в присвоении привилегий объекту псевдонима, необходимость которых объясняется тем, что из всех пользователей DB2 нужно выбрать тех, которым вы хотите разрешить доступ к интегрированной таблице. В нашем сценарии мы хотим предоставить доступ пользователю с идентификатором MANNYSANTANNA. Чтобы завершить этот этап, выполните приведенную ниже последовательность действий из командной строки или из DB2 Command Editor (Редактор команд DB2). Войдите в вашу базу данных в качестве пользователя сервера Lotus Domino или же в качестве другого администратора. Затем выполните одно из приведенных ниже действий:
  • из командной строки выполните приведенную ниже команду, чтобы предоставить привилегии доступа какому-либо пользователю, в данном случае мы присвоили эти привилегии пользователю MANNYSANTANNA:
    GRANT SELECT ON DB2DOMINO.EMPLOYEE TO MANNYSANTANA
  • выполните эту же команду из DB2 Command Editor (см. рис 2.29).
  • (рис 2.29) DB2 Command Editor

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

    2.4.2 Реализация доступа к интегрированным данным DB2 в приложении ITSO Electronics

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

  • Откройте базу данных ITSO Electronics ). В поле "Имя" введите (рис 2.30) Окно Create View
  • Добавьте новые столбцы, в которых будут отображены ). Для каждого столбца определите соответствующее имя столбца из интегрированной таблицы в виде формулы значения столбца.(рис 2.31) Представление HR Employees в Domino Designer
  • После сохранения представления и добавления представления в .(рис 2.32) Интегрированный Query View HR Employees
  • 2.5 Вопросы при интеграции Lotus Domino и DB2

    При интеграции Lotus Domino и DB2 следует иметь в виду, что:

  • Хотя базы данных Lotus Domino хранятся на сервере DB2, списки контроля доступа ( ACL ) все равно продолжают поддерживаться, как и поля Readers и Authors.
  • Когда вы сохраняете 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 не связано с именем пользователя Lotus Notes.

    Замечание Хотя активирование анонимного доступа и позволяет избавиться от привязки имен, Domino все же продолжает управлять доступом к DB2 Access View. Чтобы включить поддержку анонимного доступа, сервер Lotus Domino должен разрешить анонимный доступ и уровень доступа по умолчанию к базе данных ( NSF ), связанной с DB2 Access View.
  • Если вы попробуете посмотреть на 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 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 $$\Rightarrow$$ Проверить доступ к DB2).
  • На рис 2.33 показан результат работы инструмента DB2 Access Test.

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

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

    Если при использовании DB2 Access Views пользователи столкнутся с проблемой получения доступа к вашей базе данных 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.
  • Страницы:

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

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

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

    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 $$\text{\textregistered}$$ 5LTM.

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

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

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

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

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

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

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

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

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

  • Установить Domino 7 на сервере Domino.
  • Установить приведенные ниже элементы на сервере DB2:
  • DB2 UDB Enterprise Server Edition версии 8.2.2, включая следующие файлы:
  • DB2 UDB Enterprise Server V8.2;
  • DB2 Universal Database версии 8 с пакетом исправлений 9a.
  • Разблокирующий ключ ограниченного доступа.
  • Установить DB2 Run-Time Client на сервере Domino.
  • Установить сервер DB2 Access на том же компьютере, что и сервер DB2.
  • Замечание Убедитесь в том, что вы удалили с компьютера, на котором собираетесь устанавливать сервер DB2 Access, все версии Lotus Notes и Domino, вышедшие раньше версии 7.0. В противном случае система не будет работать. Если есть необходимость сохранить раннюю версию сервера Lotus Notes/Domino, то переименуйте папку, в которой хранятся файлы этой программы. Убедитесь в том, что nnotes.dll не находится в PATH.

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

  • Lotus Domino Administration 7 Help, "Domino и DB2": http://www.lotus.com/ldd/doc/domino_notes/7.0/help7_admin.nsf/;
  • Readme70.pdf (на компакт-диске);
  • обучающие ресурсы по DB2, размещенные на Web-сайте IBM: http://www.ibm.com/software/sw-lotus/services/education.nsf/wdocs/educationhomepage
  • Developing applications with IBM Lotus Domino Enabled For DB2, E-learning Edition: Self Paced (N7D400SP): http://www.ibm.com/software/sw-lotus/services/education.nsf/81F04813DC9CE3C7852566DA004C5CB2/A6DF60493B0D2B13852570A7006C7E9B;
  • Introducing IBM DB2 Concepts (N7D020): https://education.lotus.com/rw/lewwschd.nsf/5FDC13DD71D1143185256575001E5133/E55E8003DCEC00FA8525701A006959C4.
  • Совет Во время установки необходимо определить несколько имен пользователей DB2. Имена пользователей DB2 должны соответствовать приведенным ниже правилам присвоения имен и быть написаны заглавными буквами:
  • ID (идентификаторы) пользователей в системах, построенных на основе Linux $$\text{\textregistered}$$ и UNIX $$\text{\textregistered}$$ , могут содержать до 8 символов.
  • Имена пользователей в системах, построенных на основе Microsoft Windows, могут содержать до 30 символов. Однако практически у систем Microsoft Windows NT$$\text{\textregistered}$$ , 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, обращающееся к данным 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 нет необходимости.

    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

  • Откройте базу данных, в которой активирована поддержка DB2 в Lotus Domino Designer 7.0.
  • На панели проектирования выберите Shared Resources => DB2 Access views.
  • Щелкните по кнопке .(рис 2.3) Закладка основных свойств DB2 Access View
  • В окне 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.
  • Перейдите к закладке .(рис 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, к которым обращаются пользователи, находящиеся в разных часовых поясах.

  • Закройте окно свойств DB2 Access View.
  • Нажмите кнопку .(рис 2.5) Окно DB2 Access View Choose Field
  • В окне Choose 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 будет пустым).

    Замечание Если использовался метод 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.

  • Замечание Если имеется целое число ( 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, для оценки "линейной" длины данных.
    Виды данных и их длина в 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.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 значение такого поля будет просто установлено =NULL, и при любых запросах, касающихся этого поля, будет отображаться пустое значение. Поля с типом rich text и 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 % от дискового пространства, занимаемого базой данных.

    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 представлены выбранные поля.

    DB2 Access View SALESDAV в базе данных Sales
    Поле, включенное в DB2 Access View Форма
    ANumber

    AType

    ContactName

    Sales Activity

    Sales Activity

    Sales Activity

    CustomerName

    CustomerNumber

    MadeSale

    Product1

    Product2

    Product3

    Product4

    SName

    SNumber

    SPhone

    STitle

    FORM

    Sales Activity

    Sales Activity

    Sales Activity

    Sales Activity

    Sales Activity

    Sales Activity

    Sales Activity

    Sales Activity, Sales Person

    Sales Activity, Sales Person

    Sales Person

    Sales Person

    Sales Activity, Sales Person

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

    DB2 Access View CUSTOMERDAV в базе данных Customer
    Поле, включенное в DB2 Access View Форма
    customerAddress

    CustomerDescription

    customerName

    customerNumber

    ownerName

    FORM

    Customer

    Customer

    Customer

    Customer

    Customer

    Customer

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

    DB2 Access View CUSTOMERDAV в базе данных Customer
    Поле, включенное в DB2 Access View Форма
    productDescription

    SupplierAddress

    SupplierDescription

    SupplierName

    SupplierNumber

    Product

    Supplier

    Product, Supplier

    Supplier

    Product, Supplier

    productName

    productNumber

    Product

    Product

    FORM Product, Supplier

    В дальнейшем мы используем эти DB2 Access Views при создании 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 Views собираются в одно представление. Мы остановимся более подробно на этом аспекте в п. 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 Views". Затем можно приступить к созданию Query View, выполнив приведенную ниже последовательность действий.

  • В Domino Designer перейдите к представлениям ( .(рис 2.8) Окно Create View
  • Далее введите SQL-выражение для создаваемого представления. В п. 2.3.4, "Динамическое создание Query Views с помощью @-формул", будет рассказано, как вы можете динамически создавать SQL-выражения, основываясь на языке @-формул. Для того чтобы воспользоваться этой возможностью, статические операторы SQL необходимо заключить в кавычки, как показано в примере 2.1.
    "SELECT * FROM SALES.SALESDAV"
    Вы обращаетесь к DB2 Access View в базе данных, используя название схемы DB2 и название DB2 Access View: DB2SCHEMANAME.DAVNAME. В п. 2.3.4, "Динамическое создание Query Views с помощью @-формул".
  • Когда вы написали SQL-выражение, можно определить столбцы представления. Это делается так же, как и в случае с обычными представлениями.
  • Чтобы посмотреть результат, щелкните по кнопке 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"

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

    В 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

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

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

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

    Во всех приведенных и использованных до сих пор примерах применялись статические SQL-выражения. Однако во многих случаях лучше создавать SQL-выражения на лету, во время открытия 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
  • 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 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<>''

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

    В начальном релизе Lotus Domino 7.0, к сожалению, функция просмотра .

    2.3.7 Query View и LotusScript

    Несмотря на то, что 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

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

    Как и любое другое представление, вы можете внедрить ). Для получения дополнительной информации о создании внедренных представлений, обратитесь к справке 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.3.9 Подробный анализ Query Views

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

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

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

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

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

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

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

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

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

  • В закладке ).
  • (рис 2.14) Закладка Options в окне свойств View

    2.4 Работа с интегрированными данными DB2

    До этого пункта мы занимались обсуждением 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, либо только интегрированные данные, либо и то, и другое вместе.

    2.4.1 Включение поддержки интеграции для базы данных

    При изменении конфигурации базы данных 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 ).
  • Перезапустите DB2 для того, чтобы переменная окружения начала работать. Обратите внимание на то, что с помощью приведенного ниже пути и команды можно обновить конфигурацию DB2 Database Manager, для того чтобы активировать интеграцию в DB2:
    C:\Program Files\IBM\SQLLIB\BIN>db2 update dbm cfg using FEDERATED YES
  • Подключитесь к вашей базе данных Lotus Domino в DB2 Control Center (центре управления DB2). Убедитесь в том, что в базе данных Lotus Domino включена поддержка интеграции. Для этого щелкните правой кнопкой мыши по вашему экземпляру DB2 и выберите из контекстного меню ). Прокрутите это окно вниз до раздела (рис 2.15) Окно DB2 Control Center: DBM Configuration
  • Для того чтобы создать интеграционную оболочку в DB2 для внешней базы данных DB2 (в нашем сценарии это база данных DB2 отдела кадров), необходимо вернуться в DB2 Control Center и для базы данных Lotus Domino перейти к папке .(рис 2.16) Папка Federated Database Objects в DB2 Control Center
  • В результате откроется окно ). На закладке Wrapper из выпадающего списка Data source выберите источник данных, в качестве которого в нашем сценарии мы будем использовать DB2 UDB. Введите название оболочки в поле (рис 2.17) Окно Create Wrapper
  • После того как вы создадите оболочку, она появится в папке ). Выберите папку .(рис 2.18) Папка Server Definitions в DB2 Control Center
  • В окне .(рис 2.19) Окно Create Server Definitions: кнопка Discover
  • Щелкните по кнопке . Введите соответствующие значения во все поля закладки . Все введенные в эти поля данные соответствуют нашему сценарию. Для поля (рис 2.20) Окно Server Definition Properties
  • Перейдите к закладке ) и введите название базы данных DB2 в поле (рис 2.21) Окно Server Definitions Properties: закладка Settings
  • Теперь нам надо добавить привязку пользователей к этой интеграционной оболочке, присваивая пользователя сервера Lotus Domino к имени и паролю пользователя удаленного соединения. В нашем сценарии в качестве пользователя сервера Lotus Domino мы взяли .(рис 2.22) Окно DB2 Control Center: User Mappings
  • Откроется окно ). На закладке (рис 2.23) Окно Create User Mappings
  • Перейдите к закладке . (На нашем сервере DB2 также есть ID пользователя (рис 2.24) Окно Create User Mappings: закладка SettingsЗамечание Если вы столкнетесь с какими-либо проблемами при установке и настройке привязки пользователей, вернитесь в DB2 Control Center, выберите базу данных, к которой хотите подключиться, щелкните по ней правой кнопкой мыши из контекстного меню, выберите пункт Connect (Подключиться), после чего введите ID пользователя и пароль. В приложении, использованном в нашем сценарии, мы применяли ID пользователя базы данных DB2DOMINO и его пароль.
  • В DB2 Control Center создайте псевдоним, связывающий локальный объект с внешним объектом. Псевдоним используется в SQL-выражении .(рис 2.25) Окно DB2 Control Center: Create New Nickname
  • Откроется окно . Щелкните по кнопке (рис 2.26) Create Nicknames: окно Discover
  • Затем окно . Щелкните по кнопке (рис 2.27) Окно Create Nicknames
  • После этого будет создан псевдоним .(рис 2.28) Open Nickname: окно EMPLOYEE
  • Завершающий этап состоит в присвоении привилегий объекту псевдонима, необходимость которых объясняется тем, что из всех пользователей DB2 нужно выбрать тех, которым вы хотите разрешить доступ к интегрированной таблице. В нашем сценарии мы хотим предоставить доступ пользователю с идентификатором MANNYSANTANNA. Чтобы завершить этот этап, выполните приведенную ниже последовательность действий из командной строки или из DB2 Command Editor (Редактор команд DB2). Войдите в вашу базу данных в качестве пользователя сервера Lotus Domino или же в качестве другого администратора. Затем выполните одно из приведенных ниже действий:
  • из командной строки выполните приведенную ниже команду, чтобы предоставить привилегии доступа какому-либо пользователю, в данном случае мы присвоили эти привилегии пользователю MANNYSANTANNA:
    GRANT SELECT ON DB2DOMINO.EMPLOYEE TO MANNYSANTANA
  • выполните эту же команду из DB2 Command Editor (см. рис 2.29).
  • (рис 2.29) DB2 Command Editor

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

    2.4.2 Реализация доступа к интегрированным данным DB2 в приложении ITSO Electronics

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

  • Откройте базу данных ITSO Electronics ). В поле "Имя" введите (рис 2.30) Окно Create View
  • Добавьте новые столбцы, в которых будут отображены ). Для каждого столбца определите соответствующее имя столбца из интегрированной таблицы в виде формулы значения столбца.(рис 2.31) Представление HR Employees в Domino Designer
  • После сохранения представления и добавления представления в .(рис 2.32) Интегрированный Query View HR Employees
  • 2.5 Вопросы при интеграции Lotus Domino и DB2

    При интеграции Lotus Domino и DB2 следует иметь в виду, что:

  • Хотя базы данных Lotus Domino хранятся на сервере DB2, списки контроля доступа ( ACL ) все равно продолжают поддерживаться, как и поля Readers и Authors.
  • Когда вы сохраняете 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 не связано с именем пользователя Lotus Notes.

    Замечание Хотя активирование анонимного доступа и позволяет избавиться от привязки имен, Domino все же продолжает управлять доступом к DB2 Access View. Чтобы включить поддержку анонимного доступа, сервер Lotus Domino должен разрешить анонимный доступ и уровень доступа по умолчанию к базе данных ( NSF ), связанной с DB2 Access View.
  • Если вы попробуете посмотреть на 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 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 $$\Rightarrow$$ Проверить доступ к DB2).
  • На рис 2.33 показан результат работы инструмента DB2 Access Test.

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

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

    Если при использовании DB2 Access Views пользователи столкнутся с проблемой получения доступа к вашей базе данных 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.
  • Вернуться к учебному плану