Думаю, многие слышали о системе Lotus Notes. Некоторые даже имели с ним дело, и им возможно понравилась, а возможно и нет концепция данной СУБД (если можно так выразиться). Почему я высказал сомнения о СУБД? Очень просто, для этого есть несколько причин:
. это не реляционная база данных, а документоориентированная (то есть за основу берется не запись, а документ, у которого есть свои поля, при чем от документа к документу набор полей может быть разным);
. это более чем система управления базами данных, поскольку в ней так же интегрирован и WEB сервер, а также система обмена почтовыми сообщениями (дрожите фанатики ²Exchange Server⌡.a и ²Microsoft Offic⌡.a)
. предусмотрена очень хорошая система репликации данных: в каждом районном центре Украины стоит минимум один клиент Лотус Ноутс, с базой, которая реплицируется по иерархической линейке (район - область - столица) и проблемы, которые возникали при репликации, практически всегда были связаны только с неправильной настройкой даты на компьютерах.
. Поддерживается очень четкая система ведения логов. Можно выудить отчет о том, сколько времени пользователь сидел подключенным к данной базе и сколько документов прочитал и изменил.
. Также предусмотрена система разработки логики управления этими документами (приложение и база данных интегрированы в одном файле).
. Расширенные правила безопасности, по которым некоторому Пользователю можно давать/запрещать доступ к любому полю документа.
.
Но вместе с тем есть и некоторые недостатки данной системы.
Одним из недостатков это то, что у нас мало специалистов, которые занимаются разработкой приложений в Lotus Notes, другой недостаток. это плохая интегрированость с другими продуктами.
Именно второй недостаток мы сегодня и попробуем если не ²удалить⌡ то хотя бы приблизить до нуля.
Итак, мы будем интегрировать Lotus Notes с нашим приложением, написанным на Delphi.
Есть два варианта интеграции:
1. Чтение/запись данных в базу (с преобразованием документоориентированости в частичную реляционность)
2. отправка почты из программы через систему Lotus Notes и вся работа с документами, схожая на ту, которую клиент делает в Lotus Notes.
В первом варианте интеграции системы Lotus Notes есть свои два варианты решения (по крайней мере, я знаю только 2) Назовем их: ²вариант А⌡ и ²вариант Б⌡
Прошу принять во внимание, что подключаемся мы к документоориентированной базе. В ней в любом документе какое-нибудь поле может присутствовать, а может и отсутствовать. В этом случае заносить все таки все поля. Если в каком то документе какое-нибудь поле ненужно, лучше его просто внести как пустое, потому что если у нас будет несоответствие количества полей от документа к документу . то мы не сможем получить нормальную таблицу, и в лучшем случае у нас выплывет ошибка.
Итак ²вариант А⌡:
Устанавливаем NotesSQL ODBC driver, и, после настройки ODBC Data Source получаем такой доступ к базе как будто у нас не документоориентированная база, а простая реляционная база данных. У этого варианта есть один плюс и один минус. Плюс.это то, что мы работаем так же как и с стандартной СУБД, то есть пишем запросы на SQL и получаем наши результаты. Минус.это то, что такой вариант подключения достаточно медленный.
Здесь вроде все понятно и не должно вызвать никаких проблем. В настройках ODBC Data Source нужно только поставить галочку ²Return Notes implicit fields⌡. Это нам позволит видеть поля с уникальными кодами идентификаторами, которые Лотус выставляет каждому документу (можно использовать как ключевое поле для связей между таблицами). Кстати в это поле будет уникальное для всей распределенной базы данных (то есть, если у нас есть два филиала, у которых свои реплики, то система гарантирует уникальность этого поля на этапе внесения документа в базу данных). Согласитесь, это очень хорошо для программиста, который пишет распределенную базу.
Теперь рассмотрим ²вариант Б⌡ подключения к базе данных Lotus Notes:
Запускаем свой любимый браузер и вносим ему такой линк:
http://www.geocities.com/skolchin
Это страничка, на которой несколько российских разработчиков (а именно Sergey Kolchin, Sergey Kucherov, Sergey Okorochkov) держат свое детище с названием ²Lotus Notes object layer⌡. Фактически это библиотека, которая выступает как обертка вокруг Lotus Notes API (nnotes.dll). Так же нужно еще скачать компонент который с помощью ²Lotus Notes object layer⌡ покажет нам данные в стандартном датасете, называется сей компонент ²Notes/Delphi components⌡ (далее я буду называть его NDC). Все эти библиотеки freeware, что немаловажно для отечественных разработчиков.
В состав NDC входят:
TLnDatabase Инкапсулирует TNotesDatabase класс.
TLnTable Это изюминка библиотеки. TDataset-наследник компонент, который позволяет работать с Notes базами и views как со стандартными BDE таблицами. ВСЕ Data Controls будут работать с ним, будь то Grid или editors.
TLnAddressEdit Позволяет вводить одну или несколько Notes адресов с возможностью перелистывания их в базе Address book.
TLnAddressDlg Инкапсуляция of LnAddress функции . выбор адреса адресата
TLnBrowseDlg Инкапсуляция LnBrowse функции . показывает диалог выбора базы данных на сервере или локальном диске. (Очень похож на стандартный Open dialog в самой системе Lotus Notes)
TLnSendMailDlg Mail sender . с помощью этого компонента можно отослать почту
Используя первых два компонента из этого набора мы получаем доступ к базе данных Lotus Notes. Минусом такого варианта подключения к базе на Lotus Notes это то, что TLnTable не поддерживает SQL (это вроде и так понятно, хотя жаль, что нет аналога TQuery). Плюс же такого способа обмена данными . это намного большая скорость обмена.
А теперь перейдем ко второму варианту интеграции с Lotus Notes, а именно
²отправка почты из программы через систему Lotus Notes и вся работа с документами, схожая на ту, которую клиент делает в Lotus Notes⌡.
Для отправки почты, нам хватит компонентов LDC.(использкуя TLnAddressEdit, TLnAddressDlg, TLnSendMailDlg).
А вот для более конкретной работы с Lotus Notes мы будем использовать именно ²Lotus Notes object layer⌡:
В этой библиотеке есть целый набор классов, которые позволяют делать практически всю работу Lotus Notes через наше приложение.
Иерархия Список классов ²Lotus Notes object layer⌡:
-ELotusNotes
---ELnFormulaCompile
--TNotesACL
--TNotesACLEntry
--TNotesDatabase
--TNotesDirectory
--TNotesDocument
--TNotesDocumentCollection
---TNotesView
----TNotesFolder
--TNotesItem
---TNotesRichTextItem
-TNotesName
Несколько примеров, которые я взял из справочной системы к ²Lotus Notes object layer⌡:
Пример отправки почты средствами ²Lotus Notes object layer⌡:
procedure SendMail (anAddress, aSubject, aBody: string);
var
MailDb: TNotesDatabase;
MailDoc: TNotesDocument;
begin
MailDb := TNotesDatabase.create;
try
MailDb.OpenMail;
MailDoc := MailDB.CreateDocument;
try
MailDoc.SendTo := anAddress;
MailDoc.Subject := aSubject;
MailDoc.BodyAsString := aBody;
MailDoc.CheckAddress;
MailDoc.Send (False, '');
finally
MailDoc.free;
end;
finally
MailDb.free;
end;
end;
Вот один из примеров работы с базой (как удалить все документы из данной формы):
procedure DeleteAll (Db: TNotesDatabase; FormName: string);
var
Docs: TNotesDocumentCollection;
i: integer;
begin
Docs := Db.Search ('Form=" + FormName + '"');
try
for i := 0 to Docs.count-1 do Db.Delete (Docs.DocumentId[i]);
finally
Docs.free;
end;
end;
Думаю, теперь можно сказать что Lotus Notes это не такой уже и страшный зверь и что все таки можно интегрировать его с другими средствами разработки программного обеспечения (здесь я двумя руками голосую за Borland Delphi). И в этом нам помогли ребята из России: Sergey Kolchin, Sergey Kucherov, Sergey Okorochkov. Большое им спасибо за это.
Кстати, вот что написано в одном из отзывов на сайте автора:
By Julian 2003/06/04.
Posted at Oct 6, 2002:
Very interesting - 8 years Notes/Domino experience with VB. Used to program in Pascal, so interested in developing in Delphi.
Вот и все что я хотел Вам рассказать. Добавлю лишь то, что с помощью такой системы как Lotus Notes с ее отличительной чертой . очень хорошей системой репликации, а так же средства разработки приложений Borland Delphi . можно достаточно быстро и эффективно создавать воистину огромные системы обработки информации государственного уровня.
Использованная литература.
. Документарные базы Lotus Notes http://msk.nestor.minsk.by/kg/1999/kg9911/kg94428.html
. ²Lotus Notes object layer⌡ home page http://www.geocities.com/skolchin/lndelphi_desc.html
. Lotus Notes . миф и реальность http://www.interface.ru/fset.asp?Url=/misc/news/n020213141.htm
|