Тема: Агент экспорта данных в вебсервис
Данный агент выбирает все новые и модифицированные документы и шлет их на определенный вебсервис.
Опции
Option Public
Option Declare
Use "Библиотека"
Библиотека
%INCLUDE "lsxsd.lss"
Const n1 = "http://вебсервис/"
Const n0 = "http://schemas.microsoft.com/2003/10/Serialization/"
Class IMUService_n1 As PortTypeBase
Sub NEW
Call Service.Initialize ("HttpTService", _
"MUService.BasicHttpBinding_IMUService", "http://IP вебсервиса:порт/M_S", _
"IMUService_n1")
Call Service.SetCredentials("логин", "пароль")
End Sub
Function SetData(procName As XSD_STRING, args As XSD_STRING) As XSD_STRING
Set SetData = Service.Invoke("SetData", procName, args)
End Function
End Class
Код агента
Sub Initialize
On Error Goto errr
Dim session As New NotesSession, db As NotesDatabase
Dim collection As NotesDocumentCollection, collresp As NotesDocumentCollection
Dim doc As NotesDocument, docresp As NotesDocument
Dim kol As Long, i As Integer, countSetdata As Integer, j As Long, collPrav As Integer
Dim client As New IMUService_n1, procName As New XSD_String, arg As New XSD_String
Dim st As String, b As Boolean, s As String, l_name As String
Dim item As NotesItem
procName.Setvaluefromstring("SetOrg")
Set db = session.CurrentDatabase
Set collection = db.UnprocessedDocuments
Print(Cstr(Now)+" будет Отправленно:"+Cstr(collection.count)+" записей")
Set doc = collection.GetFirstDocument
Kol=0
i=0
j=0
countSetdata=0
b=True
While Not(doc Is Nothing)
st=st+{<row}
st=st+{ org_id="}+doc.IdShareDoc(0) '(string) - общий unid
st=st+{" doc_id="}+doc.IdDoc(0) '(string) - unid документа
st=st+{" s_name="}+r(Cstr(doc.ShortName(0))) '(string) - краткое наименование
st=st+{"/>}
i=i+1
If i=500 Then
j=j+1
Print "Пакет №"+Cstr(j)+" - "+Cstr(Lenb(st))+" bytes"
arg.Setvaluefromstring({<root>}+st+"</root>")
nxt1:
On Error Goto erorSetData
Call client.SetData(procName,arg)
i=0
st=""
On Error Goto errr
countSetdata=0
End If
Set doc = collection.GetNextDocument(doc)
kol=kol+1
Wend
If i<>0 Then
b=False
arg.Setvaluefromstring("<root>"+st+"</root>")
On Error Goto erorSetData
nxt2:
Call client.SetData(procName,arg)
End If
Call collection.UpdateAll
nxtend:
Print(Cstr(Now)+" Отправленно:"+Cstr(kol)+"/"+Cstr(collection.count)+" записей ")
Exit Sub
erorSetData:
Print "Произошла ошибка " & Error$ & " в строке "& Cstr(Erl)
countSetdata=countSetdata+1
If countSetdata=10 Then
Print "Не могу отправить данные("+Cstr(countSetdata)+" попыток)"
Resume nxtend
End If
Sleep ( 10 )' пауза 10 сек
If b Then
Print "попытка "+Cstr(countSetdata+1)
Resume nxt1
Else 'если последний пакет
Print "!попытка "+Cstr(countSetdata+1)
Resume nxt2
End If
errr:
Print(Cstr(Now)+" Отправленно:"+Cstr(kol)+"/"+Cstr(collection.count)+" записей ")
Print "Произошла ошибка " & Error$ & " в строке " & Cstr(Erl)&" в документе:"& Cstr(doc.Universalid)
Resume Next
End Sub