Export & Update Excel->LotusNotes


Приложение написанное на Lotus Notes для импорта и обновления информации из файлов Excel.

Приложение работает достаточно медленно так как используется метод db.search но это позволяет гибко подходить к задачи поска документов при обновлении.

Приложение можно отнести к малой автоматизации и не претендует на использование как продукт.

Скачать можно здесь: ExcelImport.zip

ExcelImport

LotusScript: бага или фича


Я бы отнес это скорее к багу, чем к фиче.

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

  1. Если получать документ в NotesDocumentCollection, тогда там будет ссылка на ранее объявленный документ, то есть содержащий изменения.
  2. Если получать документ напрямую Getdocumentbykey или GetDocumentByUNID, тогда вы получите документ который реально хранится в базе, то есть без ранее сделанных изменений.

Все это показано на скрипте ниже.


Dim session As New NotesSession
Dim db As NotesDatabase
Dim nv As NotesView
Dim dc As NotesDocumentCollection
Dim doc1 As NotesDocument
Dim doc2 As NotesDocument

Set db = session.Currentdatabase
Set nv = db.Getview("LookupByDocUNID")
Set doc1 = nv.Getdocumentbykey("7E697F4EEBC18C3343257F090030BADC", True)
Call doc1.Replaceitemvalue("F1", "TEST111") 'replace 'test1' -> 'TEST111'
Call doc1.Replaceitemvalue("F2", "TEST222") 'replace 'test2' -> 'TEST222'

'NOT Save doc1 !!!!!!!!!!!!!!!

'v1
Set dc = nv.Getalldocumentsbykey("7E697F4EEBC18C3343257F090030BADC", true)
Set doc2 = dc.Getfirstdocument()
Print doc2.F1(0) 'Printed 'TEST111'
Print doc2.F2(0) 'Printed 'TEST222'

'v2
Set doc2 = nv.Getdocumentbykey("7E697F4EEBC18C3343257F090030BADC", true)
Print doc2.F1(0) 'Printed 'test1'
Print doc2.F2(0) 'Printed 'test2'

Import DBF files to Lotus Notes


Ниже приведен код агента который импортирует все DBF файлы из указанной директории.

Обращаю внимание, если у Вас Windows 7 x64 тогда для настройки ODBC источника необходимо использовать ODBC 32.

c:\Windows\SysWOW64\odbcad32.exe


%REM
Agent ImportDBF
Created Aug 5, 2015 by Nikolay Tarasenko
Description: Import DBF files
%END REM
Option Public
Option Declare

UseLSX "*LSXODBC"
Sub Initialize
On Error GoTo ErrorTrap
Dim session As New NotesSession
Dim ws As New NotesUIWorkspace
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim con As New ODBCConnection
Dim qry As New ODBCQuery
Dim result As New ODBCResultSet
Dim Status As Integer
Dim i As Integer
Dim fieldInfo As String
Dim ODBCSourceName As String

Set db = session.Currentdatabase

Dim dirDBF As String
dirDBF = "C:\DBF\UBF1\"
ODBCSourceName = "TEK"

REM =================================
status = con.ConnectTo( ODBCSourceName )
If Not con.IsConnected Then
MessageBox "Could not connect to " & ODBCSourceName & " database -- Did you register the ODBC Data Source???",, "Error"
Exit Sub
End If
Set qry.Connection = con
Set result.Query = qry
'====================================

'GET DBF Files
Dim pathname As String, filename As String
pathname = "C:\DBF\UBF1\*.dbf"
filename = Dir(pathname, 16)
Do While filename<>""

qry.SQL = |SELECT * FROM "|+filename+|"|
If qry.GetError <> DBstsSUCCESS Then
MessageBox qry.GetExtendedErrorMessage,, "Query Error" & qry.GetError & " " & qry.GetErrorMessage
Exit Sub
End If

Call result.Execute

If result.IsResultSetAvailable Then
Do
result.NextRow
REM Create a Notes Document, assign values, save the document. Do it until we're done.
Set doc = db.CreateDocument ' Create a new Notes Document for this record
doc.form = "REC"
Call doc.Replaceitemvalue("File",dirDBF+filename)
doc.ImportDateTime = Now

For i = 1 To result.NumColumns
Call doc.Replaceitemvalue(result.FieldName(i),result.GetValue( result.FieldName(i) ))
Next

Call doc.save( True, False )
Loop Until result.IsEndOfData

End if

REM =================================
result.Close( DB_CLOSE )
'====================================

filename=Dir()
Loop

Exit Sub
ErrorTrap:
MsgBox CStr(Err) & ": " & Error
Exit Sub
End Sub

Как создать собственную библиотеку в Visual Studio и использовать в Lotus Notes


Как можно создать свою библиотеку в C# и использовать ее в Lotus Notes.

Программу Microsoft Visual Studio можно скачать с сайта Microsoft бесплатно и использовать ее так же можно бесплатно.

Сценарий такого взаимодействия следующий: вы создаете библиотеку (DLL файл) и регистрируете его как COM библиотеку на компьютере пользователя, не забываем, что для корректной работы требуется .NET.Framework 4.5, в Lotus Notes создаете объект посредством оператора CreateObject и используете методы этого объекта.

Ниже показано как создать такую библиотеку.

Шаг 1. Создание проекта

image002

 

Шаг 2. Настройка проекта

image004

image006

image008

Шаг 3. Разработка методов

Создаем класс Math – это будет калькулятор, он будет выполнять простейшие действия, но так же можно добавить в проект форму и тогда при обращении к методу у вас будет появляться на экране форма VS.

image010

Шаг 4. Сборка и публикация библиотеки

Для сборки и публикации библиотеки необходимо запустить Visual Studio с правами администратор, так как будет внесена информация в реестр.
За автоматическую регистрацию отвечает настройка Build -> Register for COM interop

Шаг 5. Разработка LotusScript

Пример того как используется созданная ранее библиотек «TNALib.Math» в LotusScript.

image012

Как получить путь к временным файлам Lotus Notes


Функция на LotusScript

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

Для чего это надо. Существует несколько потребностей, например при создании печатной формы из шаблона или вам надо распечатать автоматически несколько JPEG файлов и т.п.


Option Declare

Declare Function w32_OSGetSystemTempDirectory Lib "nnotes" Alias "OSGetSystemTempDirectory" ( ByVal S As String) As Integer
Declare Function mac_OSGetSystemTempDirectory Lib "NotesLib" Alias "OSGetSystemTempDirectory" ( ByVal S As String) As Integer
Declare Function linux_OSGetSystemTempDirectory Lib "libnotes.so" Alias "OSGetSystemTempDirectory" ( ByVal S As String) As Integer
Const ERR_UNSUPPORTED_PLATFORM = 20300 ' or other value you choose.

Function GetNotesTempDirectory() As String
' Returns the path of the temporary directory used by Notes.
Dim session As New NotesSession
Dim d As String * 256
Dim s%
Select Case session.Platform
Case "Linux"
s% = linux_OSGetSystemTempDirectory(d)
Case "Macintosh"
s% = mac_OSGetSystemTempDirectory(d)
Case "Windows/32"
s% = w32_OSGetSystemTempDirectory(d)
Case Else
Error ERR_UNSUPPORTED_PLATFORM, "In GetNotesTempDirectory, platform not supported: " & session.Platform
End Select
GetNotesTempDirectory = Left$(d, s%)
End Function