Lotus Notes + Почта России


У Почты России имеется API для отслеживания посылок, регистрация для частного лица бесплатная, но в день можно сделать только 100 запросов. Хотите больше, надо заключать договор.

Техническое описание здесь https://tracking.pochta.ru/specification

Мне необходимо было организовать отслеживание отправлений непосредственно в Lotus Notes. Для этого я разработал агента на Java и запускал его на сервере, отправлений было не очень много, по этому я укладывался в рамки 100 запросов.

Из странного, трек который отдавал сервис не всегда совпадает с треком который выдается на сайте. Объяснение только одно, базы разные.

Пример можно скачать по ссылке: Download NSF

ActiveMQ and Lotus Notes


Использование сервиса очередей в приложениях Lotus Notes и Lotus Domino значительно упрощают жизнь разработчикам.

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

Ниже я приведу пример демонстрационного приложения которое имитирует работу универсального нумератора. Предположим, у Вас есть три приложения которым требуется уникальная нумерация своих событий (регистрация писем, событий в логе и т.д.). Приложение, делает запрос в очередь со своим идентификатором, это сообщение считывается программой нумератором, она обрабатывает запрос и выдает номер, размещая ответ в другой очереди, приложение уже ждет ответа и слушает эту очередь, как только в нее появится ответ, приложение считывает его и использует для своих нужд.

Кажется, что это все сложно, но вы изолируете друг от друга две системы, приложению не требуется права на запись в файл не надо заботиться о миграции подсистем, вы всегда можете переместить нумератор на другой сервер изменив запись в DNS.

Рецепт быстрого приготовления:

Скачайте ActiveMQ и установите на свой компьютер или сервер.

В настройках Lotus Notes необходимо разрешить выполнять java приложения в файле C:\Program Files\IBM\Lotus\Notes\jvm\lib\security\java.policy в самый конец файла добавьте:

grant { permission java.security.AllPermission; };

Скопируйте библиотеку C:\activemq\activemq-all-5.15.3.jar в C:\Program Files\IBM\Lotus\Notes\jvm\lib\ext

Перезапустите Lotus Notes, для того, чтобы заработала новая политика и загрузилась библиотека

Скачайте пример на Lotus Notes numerator

  1. Откройте приложение
  2. Перейдите в представление «Apps»
  3. Выделите настройку приложения «App2»
  4. Запустите агента «Actions->App->set app.in» для загрузки запроса номера из центрального «нумератора»
  5. Запустите агента «Actions->GetAgent» — он считывает запрос из очереди «app.in» находит по идентификатору приложения настройку в которой храниться последний выданный номер, получает следующий номер и размещает его в очереди «app.out»
  6. Выделите настройку «App2» и запустите агента «Actions->App->get app.out» который  считывает из очереди запись и записывает полученный номер в настройку.

http://activemq.apache.org/

Convert Lotus Document to HTML vs RTF


Как получить HTML из Lotus Notes документа не используя HTTP сервер.

Первое, мы создаем форму с одним полем «body» формата NotesRichtextItem в эту форму бы будем помещать образ документа командой  doc.Rendertortitem(rtRTF), а потом преобразуем полученный документ в HTML используя класс NotesMIMEEntity.

Очень важно, перед конвертацией отключить преобразование в MIME командой session.Convertmime = false

Ниже приводится часть кода по преобразованию и записи документа Lotus Notes в файл HTML.

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

  1. Создаем временный документ
  2. Переносим все поля
  3. Вычисляем все временные переменные и записываем результат во временный документ
  4. Преобразуем документ командой doc.Rendertortitem

 

Dim session As New NotesSession

Dim doc As NotesDocument

session.Convertmime = False

 

Dim RTF As NotesDocument

Set RTF = session.Currentdatabase.Createdocument()

Dim rtRTF As NotesRichTextItem

Set rtRTF = New NotesRichTextItem(RTF,<em>"Body"</em>)

Call doc.Rendertortitem(rtRTF)

Call doc.Copyallitems(RTF, false) 'копировать все пересенные

Call RTF.Converttomime(<em>2</em>) 'конвертируем документв в HTML

Call RTF.Computewithform(False, False)

Call RTF.save(True,False)

Dim mime As NotesMIMEEntity

Set mime = RTF.Getmimeentity()

If Not mime Is Nothing Then

If mime.Contenttype=<em>"multipart"</em> Then

Dim out As NotesStream

Set out = session.Createstream()

Dim sFile1 As String

sFile1 = <em>"c:\\temp\\"</em>+RTF.Universalid+<em>".txt"</em>

If Not out.Open(sFile1) Then

Print <em>"Не могу создать файл"</em>

Exit Sub

End If

Dim sFile2 As String

sFile2 = <em>"c:\\temp\\"</em>+RTF.Universalid+<em>".html"</em>

Dim child1 As NotesMIMEEntity

Dim child2 As NotesMIMEEntity

Set child1 = mime.Getfirstchildentity()

While (Not child1 Is Nothing)

Call out.Writetext(child1.Contentastext(), <em>0</em>)

If child2 Is Nothing Then

Set child2 = child1.getNextSibling()

If Not child2 Is Nothing Then

Set child2 = child2.getNextSibling()

End If

End If

Set child1 = child2

Wend

Call out.Close()

Call DecodeFile(sFile1, sFile2)

End If

End If

session.Convertmime = True

В коде используется вызов  Call DecodeFile(sFile1, sFile2) из библиотеки. libMD5

Lotus и Anviz СКД


Для тех у кого на предприятии используется Lotus Notes и есть потребность в организации учета рабочего времени или контроле доступа в помещения.

Нам потребуется:

  1. биометрический датчик Anviz T5 стоимостью 7800 рублей
  2. контроллер управления дверными магнитами и задвижками SC011 стоимостью 2200 рублей
  3. магнит на дверь, ориентировочно 3000 рублей
  4. блок питания Uвх=220В AC, Uвых=12V DC(стабилизир.), Iвых =5.0 A примерно 2500 рублей
  5. кабель для соединения всего этого хозяйства и подключения датчика в вашу локальную сеть

Если устанавливать магнит нет необходимости, тогда все значительно упрощается. Магнит, контроллер и блок питания нам не потребуются.

После установки датчика мы добавляем пользователей с помощью мастер-карты или бесплатного ПО, поставляемого с датчиком.

Остается решить вопрос со сбором информации. Я написал приложение на Lotus с использованием Java API которое позволяет подключаться к датчику по локальной сети и скачивать информации о событиях, а потом стоить отчеты по каждому пользователю.

Для корректной работы Java агентов требуется внести изменения в java.policy который располагается по пути Lotus\Notes\jvm\lib\security

grant{
permission java.security.AllPermission;
};

Приложение рассчитано для работы с несколькими датчиками.

Скачать приложение

 

Интеграция Domino и сервис Яндекс.Касса


Для интеграции сервиса Яндекс.Касса с Lotus Domino я выбрал метод EMAIL, суть которого заключается в получении на электронную почту сообщений о поступлении денежных средств.

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

Агент, расшифровывает сообщение, потом разбирает его и создает документ в базе pays.nsf

Скачать текст агента