Domino Web Service: Part 1


Предыстория этой статьи следующая, Заказчику надо организовать регулярное обновление информации с его баз во внутренней сети на сервере Domino который находится во вне, но открыть порт 1352 он не может, а на сервере который внешний нет smtp, осталось задействовать протокол HTTP (80) порт.

Начнем с базы приемника, которая находится на внешнем сервере. Надо создать Web Service Provider его назначение — принимать поток BASE64, преобразовывать его в DXL а потом трансформировать в объекты Lotus Notes (документы, виды, формы, агенты и т.п.).

Option Public
%INCLUDE «LSXSD.LSS»

Class wsdl

Function upload(docid As String, v As XSD_BASE64BINARY)
On Error Goto ErrHandler
Dim session As New NotesSession
Dim db As NotesDatabase
Set db = session.CurrentDatabase
Dim stream As NotesStream
Set stream = session.CreateStream
Set stream = v.getValueAsNotesStream()

Dim importer As NotesDXLImporter
Set importer = session.CreateDXLImporter(stream, db)
importer.ReplaceDBProperties = True
importer.ReplicaRequiredForReplaceOrUpdate = False
‘importer.InputValidationOption=VALIDATE_NEVER
importer.DocumentImportOption = DXLIMPORTOPTION_UPDATE_ELSE_CREATE
Call importer.Process

Dim doc As NotesDocument
Dim sdoc As NotesDocument
Dim ndoc As NotesDocument
Set doc = db.GetDocumentByID(importer.GetFirstImportedNoteId)
If Not doc Is Nothing Then
If doc.universalID<>docid Then
Set ndoc = db.CreateDocument
Call doc.copyallitems(ndoc,True)
ndoc.UniversalID = docid
Call ndoc.Save(False,False)
Call doc.remove(True)
End If
End If

End
ErrHandler:
Resume Next
End Function
End Class

После написания провайдера надо в свойствах все сделать правильно:

Programming model: RPC
SOAP message format: RPC/encoded
PortType class: wsdl
Service element name: wsdlService
Service port name: Domino