Предыстория этой статьи следующая, Заказчику надо организовать регулярное обновление информации с его баз во внутренней сети на сервере 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