1

Тема: LotusScript агент, обращающийся к веб-сервису.

Пример 1.

Делаем простейший агент, который обращается к вебсервису и получает какой-то ответ от него.
Вот адресс вебсервиса:
http://_.webservicex.net/stockquote.asmx?WSDL

В лотусе в клиенте не ниже 9 версии, создаем новый  "web service consumers", импортируем WSDL файл от существующего вебсервиса, вставив ссылку вебсервиса - пункт "URL that points to a WSDL file".
Получаем такой сгенерированный лотусом код:

%INCLUDE "lsxsd.lss"
Const n0 = "http://_.webserviceX.NET/"
Class StockQuoteSoap_n0 As PortTypeBase
    
    Sub NEW
        Call Service.Initialize ("HttpWwwWebserviceXNETStockQuote", _
        "StockQuote.StockQuoteSoap", "http://_.webservicex.net/stockquote.asmx", _
        "StockQuoteSoap_n0")
        
    End Sub
    
    Function GetQuote(symbol As XSD_STRING) As XSD_STRING
        Set GetQuote = Service.Invoke("GetQuote", symbol)
    End Function
    
End Class

Далее создаем агент на LotusScript, который на любой запрос отвечает словом "исключение / exceptoin".

Option Public
Option Declare
Use "web"

Sub Initialize
    On Error GoTo er
    Print "weebtest"
    'Dim ws As  NotesUIWorkspace
    Dim sq As New StockQuoteSoap_n0()
    Dim symbol As String
    symbol= "JAVA" ' любой текст - запрос в вебсервис
    Dim sh As New XSD_STRING()
    Call sh.setValueFromString(symbol)
    Set sh = sq.GetQuote(sh) ' GetQuote - вызываемая функция в вебсервисе
    Print  "ответ вебсервиса: " & sh.getValueAsString()
    Print "END weebtest"
    Exit Sub    
er:
    Print "Произошла ошибка " & Error$ & " в строке "& CStr(Erl)
    Exit Sub    
End Sub

Поделиться

2

Re: LotusScript агент, обращающийся к веб-сервису.

Пример 2.  Агент послвает два числа X1 и X2 на вебсервис, в ответ получает их сумму.

WSDL - web service consumers:

%INCLUDE "lsxsd.lss"
Class LicInfo As PortTypeBase
    
    Sub NEW
        Call Service.Initialize ("UrnDefaultNamespaceLicInfoService", _
        "LicInfoService.Domino", "http://justice....../licInfo?OpenWebService", "LicInfo")
        
    End Sub
    
    Function SUM(X1 As Integer, X2 As Integer) As Integer
        Let SUM = Service.Invoke("SUM", X1, X2)
    End Function
    
End Class

Код агента:

Option Public
Option Declare
Use "licenz"

Sub Initialize
    On Error GoTo er
    Print "агент LITC Initialize"
    Dim session As New NotesSession, db As NotesDatabase
    
    Dim otvet As Integer
    Dim objectclass As New LicInfo ()
    Dim argument As New Xsd_integer
    
    Dim X1 As Integer, X2 As Integer 
    X1 = 1
    X2 = 2    
    argument.Setvaluefromstring(X1)
    argument.Setvaluefromstring(X2)

otvet =  objectclass.SUM(X1,X2) 
    Print "ответ: " & CStr(otvet)
    Print "LITC отработал"
    Exit Sub    
er:
    Print "Произошла ошибка " & Error$ & " в строке "& CStr(Erl)
    Exit Sub    
End Sub

Поделиться

3

Re: LotusScript агент, обращающийся к веб-сервису.

Пример 3. Агент посылает вебсервису UNID документа, получает по нему поле документа - "название" / FULLNAME.

Web service consumers:

Class ULNAMEARRAY As XSD_ANYTYPE
    Public MAINMASSIV() As POLIAYURL
End Class

Class POLIAYURL As XSD_ANYTYPE
    Public FULLNAME As String
    Public SHORTNAME As String
.....
Class Yurclass As PortTypeBase
    
    Sub NEW
        Call Service.Initialize ("UrnDefaultNamespaceYurclassService", _
        "YurclassService.Domino", "http://192.168:80/GSS-base/ArhJ.nsf/YurServiceGTKbyID?OpenWebService", _
        "Yurclass")
        Call Service.SetCredentials("LOGIN", "123123123")
    End Sub
    
    Function GETFK(FKOD As String, YURNAME As String, REGNUM As String, SERPASSP As String, _
    NUMPASSP As String, FIO As String, UNIDSALL As String, FPREDPREEM As Integer, FRESP As Integer) As ULNAMEARRAYLITE
        Set GETFK = Service.Invoke("GETFK", FKOD, YURNAME, REGNUM, SERPASSP, NUMPASSP, FIO, UNIDSALL, FPREDPREEM, FRESP)
    End Function

Function GETULBYID(ULUNID As String, ULUNIDSALL As String) As ULNAMEARRAY
        Set GETULBYID = Service.Invoke("GETULBYID", ULUNID, ULUNIDSALL)
    End Function

Код агента:

Option Public
Option Declare

Use "GTK"
Sub Initialize
    On Error GoTo er    
    Print "GTK Initialize"
    Dim session As New NotesSession, db As NotesDatabase
    dim arg As New XSD_String
    Dim otv As ULNAMEARRAY
    Dim objectclass As New Yurclass ()
    Dim Ulunid As String, Ulunidsall As String
 
    Ulunid="1017E32767EE3511C22579B80048B293"
    Ulunidsall = ""    
    arg.Setvaluefromstring(Ulunid)
    arg.Setvaluefromstring(Ulunidsall)
    
    Set otv = objectclass.Getulbyid(Ulunid, Ulunidsall)
    Print otv.Mainmassiv(0).FULLNAME
    Print "УРА - GTK  агент  отработал!"
    Exit Sub
er:
    Print "Произошла ошибка " & Error$ & " в строке "& CStr(Erl)    
End Sub

Поделиться

4

Re: LotusScript агент, обращающийся к веб-сервису.

Хотим послать с лотуса данные не на вебсервис, а как некий урл страничку в интернете.
Изначально проверяем, открывается ли страничка сайта в эксплорере.

Запрос из LotusScript к веб странице с помошью Msxml2.XMLHTTP  - GET метод.

Sub Click(Source As Button)
    
    Dim xml As String
    Dim xmlhttp As Variant
    Set xmlhttp = CreateObject("Msxml2.XMLHTTP")
    Set DOMDocument = CreateObject("MSXML2.DOMDocument")
    xml = |https://192.168./api/v1/execute_query?username=ebn@gos&password=123&pact_id=42&query={"FullName":"Шериф"}|
    Call xmlhttp.open("GET",xml, False,"","")
    Call xmlhttp.send()
    readyState = xmlhttp.readyState
    getAllResponseHeaders = xmlhttp.getAllResponseHeaders()
    responseText = xmlhttp.responseText
    Set DOMDocument = xmlhttp.responseXML
    domtext =   DOMDocument.text
    Status =  xmlhttp.Status    ' 12029 для ошибки "cannot connect".
End Sub

POST метод.

Sub Click(Source As Button)
    On Error Goto ErrH
    Dim xml As Variant
    Dim xmlhttp As Variant
    Set xmlhttp = CreateObject("Msxml2.XMLHTTP")
    'Set DOMDocument = CreateObject("MSXML2.DOMDocument")
    
    Call xmlhttp.open("POST","https://192.168./api/v1/execute_query", False,"","")
    Call xmlhttp.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded")
    Call xmlhttp.setRequestHeader ("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)")
    
    xml =  |username=ebn@gos&password=123&pact_id=42&query={"FullName":"Шер"}|
    Call xmlhttp.send (xml)
    readyState = xmlhttp.readyState
    Status =  xmlhttp.Status
    If Status = 200 Then ' ответ веб сервера - всё ок
        getAllResponseHeaders = xmlhttp.getAllResponseHeaders()
        responseText = xmlhttp.responseText
        ok = Instr(responseText, "Запрос получен успешно0")        
        If ok>1 Then
            Msgbox responseText
        End If
    'Set DOMDocument = xmlhttp.responseXML
    'domtext =   DOMDocument.text
    End If
    Exit Sub
ErrH:
    Errmy$ = "Ошибка: " & Error(Err) & " в строке " & Erl
End Sub

Где
"Content-Type", "application/x-www-form-urlencoded" - кодировка запроса
"User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"  - юзер агент

readyState - Номер состояния запроса 0 - Unitialized 1 - Loading 2 - Loaded 3 - Interactive     4 - Complete
status -  200 - OK, 404 - Not Found

Поделиться