1

Тема: Агент экспорта данных в вебсервис

Данный агент выбирает все новые и модифицированные документы и шлет их на определенный вебсервис.

Опции

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

Поделиться