NotesSession
NotesSession — это объектная модель и программный интерфейс (API), используемый в платформе IBM Lotus Notes (позднее — HCL Notes) для управления сеансом работы клиентского приложения с сервером Domino. В контексте разработки на языках LotusScript, Java, C++ и Formula Language NotesSession предоставляет доступ к корневым объектам среды выполнения, таким как текущая база данных, пользователь, сессионные настройки, безопасность и внешние ресурсы.
История и контекст
Платформа Lotus Notes была разработана компанией Lotus Development Corporation (позднее приобретена IBM) в 1989 году как система для групповой работы, электронной почты и документооборота. Основой архитектуры стала клиент-серверная модель, где клиентское приложение Notes Client взаимодействует с сервером Domino через протокол NRPC (Notes Remote Procedure Call). Для автоматизации задач и создания приложений внутри платформы были введены языки программирования: LotusScript (диалект Basic), Formula Language, а также поддержка Java и C++.
Объектная модель NotesSession была введена в LotusScript как точка входа для всех операций, выполняемых в контексте текущего сеанса. В версиях Notes/Domino 4.x и более ранних сеансы управлялись через глобальные переменные, но с выходом Notes 5.0 (1999 год) объект NotesSession стал стандартным способом доступа к среде. В последующих версиях (6.x, 7.x, 8.x и HCL Notes 9.x–14.x) API NotesSession расширялся, но сохранил обратную совместимость.
Архитектура и основные свойства
NotesSession является корневым объектом в иерархии объектной модели Notes. При запуске скрипта или агента на LotusScript автоматически создаётся экземпляр сеанса, доступный через ключевое слово Session (или NotesSession в Java). Основные свойства объекта включают:
- CurrentDatabase — ссылка на текущую базу данных (объект
NotesDatabase), с которой работает сеанс. - EffectiveUserName — имя пользователя, под которым выполняется сеанс (с учётом прав доступа).
- CommonUserName — отображаемое имя пользователя.
- Platform — строка, указывающая операционную систему клиента (например, «Windows/32», «Linux/64»).
- NotesVersion — версия клиента Notes (например, «9.0.1»).
- International — объект
NotesInternational, предоставляющий настройки локали (язык, формат даты, часовой пояс). - ACL — объект
NotesACL, управляющий списками контроля доступа текущей базы. - Log — объект
NotesLog, используемый для записи событий в журнал. - DocumentContext — для агентов, запускаемых из документов, содержит ссылку на текущий документ.
Методы NotesSession
Основные методы объекта NotesSession:
- GetDatabase(server, filepath) — возвращает объект
NotesDatabaseпо указанному серверу и пути. - GetCurrentDatabase() — возвращает текущую базу данных (аналог свойства
CurrentDatabase). - CreateDatabase(server, filepath, copyTemplate?) — создаёт новую базу данных.
- GetDocumentByUNID(unid) — ищет документ по уникальному идентификатору (UNID).
- GetDocumentByID(noteid) — ищет документ по идентификатору заметки (Note ID).
- GetEnvironmentString(varname) — возвращает значение переменной окружения Notes.
- SetEnvironmentVar(varname, value) — устанавливает переменную окружения.
- Evaluate(formula) — выполняет формулу Formula Language и возвращает результат.
- SendMail(recipients, subject, body, attachments?) — отправляет почтовое сообщение через сервер Domino.
- CreateLog(name) — создаёт объект журнала для записи событий.
Использование в разработке
LotusScript
В LotusScript объект NotesSession является глобальным и доступен без явного создания. Пример типичного использования:
``lotusscript Dim session As New NotesSession Dim db As NotesDatabase Set db = session.CurrentDatabase Msgbox "Текущая база: " & db.Title & " на сервере " & db.Server ``
В агентах, запускаемых из документов, свойство DocumentContext позволяет получить контекстный документ:
``lotusscript Dim doc As NotesDocument Set doc = session.DocumentContext If Not doc Is Nothing Then Msgbox "Заголовок: " & doc.GetItemValue("Subject")(0) End If ``
Java
В Java API NotesSession представлен классом lotus.domino.Session. Для его получения используется фабричный метод NotesFactory.createSession():
``java import lotus.domino.*; Session session = NotesFactory.createSession(); Database db = session.getCurrentDatabase(); System.out.println("База: " + db.getTitle()); ``
В версиях HCL Notes для Java также доступен метод Session.createSession().
Formula Language
В Formula Language объект сеанса неявно доступен через функции, такие как @UserName, @DbName, @MailSend. Однако прямой доступ к NotesSession из Formula Language отсутствует — все операции выполняются через встроенные функции.
Безопасность и ограничения
Объект NotesSession работает в контексте прав текущего пользователя. При выполнении агентов на сервере (серверные агенты) сеанс может создаваться от имени пользователя, указанного в настройках агента, или от имени сервера. В версиях Notes/Domino 8.5 и выше введены дополнительные уровни безопасности, такие как проверка подписей кода и ограничения на выполнение операций с файловой системой.
- EffectiveUserName может отличаться от имени, введённого при входе, если используется аутентификация через LDAP или единый вход (SSO).
- NotesSession не предоставляет доступа к системным ресурсам за пределами платформы Domino (например, к реестру Windows или файловой системе без явного разрешения).
- В многопоточных приложениях Java каждый поток должен иметь собственный экземпляр сеанса — объекты NotesSession не являются потокобезопасными.
Версии и совместимость
Объект NotesSession поддерживается во всех версиях Lotus Notes и HCL Notes начиная с 4.6. В версиях 6.x–8.x были добавлены новые свойства и методы, такие как International, NotesVersion, GetEnvironmentString. В HCL Notes 9.x–14.x API NotesSession остаётся стабильным, но рекомендуется использовать более современные подходы, такие как REST API Domino Data Service (DDS) для интеграции с внешними системами.
Основные различия по версиям:
- Notes 4.6–5.0: базовый набор свойств (
CurrentDatabase,EffectiveUserName), методыGetDatabase,CreateDatabase. - Notes 6.x–7.x: добавлены
International,Platform,NotesVersion,GetEnvironmentString. - Notes 8.x: улучшена поддержка Java, добавлены методы
CreateLog,Evaluate. - HCL Notes 9.x–14.x: обратная совместимость, исправления ошибок, поддержка 64-битных клиентов.
Примеры применения
Автоматизация отправки почты
``lotusscript Dim session As New NotesSession Dim recipients(0) As String recipients(0) = "user@domain.com" Call session.SendMail(recipients, "Тема", "Текст письма") ``
Получение списка баз на сервере
``lotusscript Dim session As New NotesSession Dim server As String server = session.CurrentDatabase.Server Dim dbDir As NotesDbDirectory Set dbDir = session.GetDbDirectory(server) Dim db As NotesDatabase Set db = dbDir.GetFirstDatabase(DB_TEMPLATE) While Not db Is Nothing ' обработка базы Set db = dbDir.GetNextDatabase Wend ``
Работа с переменными окружения
``lotusscript Dim session As New NotesSession Dim value As String value = session.GetEnvironmentString("MyVar") If value = "" Then Call session.SetEnvironmentVar("MyVar", "default") End If ``
Критика и альтернативы
Объект NotesSession критикуется за монолитность и тесную связь с платформой Domino. В современных сценариях интеграции (веб-приложения, мобильные клиенты, облачные решения) предпочтительнее использовать REST API Domino Data Service (DDS) или протоколы IMAP/POP3 для почты. Однако для внутренних скриптов, агентов и макросов NotesSession остаётся основным инструментом разработки в среде HCL Notes.
Также отмечается, что объектная модель NotesSession не поддерживает асинхронные операции, что ограничивает производительность при массовой обработке данных. В версиях HCL Notes 12.x и выше добавлены частичные улучшения в Java API, но полная поддержка асинхронности не реализована.
Источники
- IBM Lotus Notes/Domino 8.5 Application Development Guide (IBM Redbooks, 2010).
- HCL Notes Domino Application Development Help (HCL Software, 2023).
- LotusScript Language Reference for Notes/Domino 9.0 (IBM, 2014).
- «Lotus Notes and Domino 6 Programming Bible» (K. Taylor, 2003).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →