Invoking Web services via LotusScript
If you don't want to use the IBM SOAP Connect examples, SearchDomino.com Giles Hinton provides an alternative class in LotusScript code that uses the Microsoft XMLHTTP parser to invoke and return values from a Web service.
If you don't want to use the IBM SOAP Connect examples, this class uses the Microsoft XMLHTTP parser to invoke and return values from a Web service. This was developed for and used with C# Web services.
Here's a LotusScript example, followed by the class code. I like to keep my class in a script library. If you choose to do the same, don't forget the using statement in your agent or form. This particular example is passing a parameter to the Web service -- but you don't have to do this. If you don't want to pass parameters, just omit the ws.wsParams line.
Dim ws As New WebService("http://localhost/pathToWebService/",_ "CSharpWebService.asmx", "HelloWorld") ws.wsParams("param1") = "testing parameters" ws.Invoke %REM Title: Web Service Invoker Script Library Version: 1.0 Alpha Author: Giles Hinton Last Updated: 17-Mar-2006 %END REM Public Const ERROR_CONNECTION = 20001 Public Const ERROR_XMLPARSER_NOT_INSTALLED = 20002 Public Const ERROR_WEBSERVICE_SERVER_ERROR = 20003 ' ' Begin Class declaration Public Class MonitorWebService Public wsParams List As String Private wsSoapFault As SOAPFault Private wsSession As NotesSession Private wsXMLResponse As String Private wsSoapEnvelope As String Private wsURL As String Private wsFileName As String Private wsMethod As String Private wsRunSuccess As Boolean ' Constructor Public Sub New(WebServiceURL As String, WebServiceFileName As String,_ WebServiceMethod As String) Set wsSession = New NotesSession wsURL = WebServiceURL wsFileName = WebServiceFileName wsMethod = WebServiceMethod End Sub Public Sub Invoke() Dim objHttp As Variant, objResponse As Variant Dim soapRequest As String ' Open syntax is Http Method, URL, async, username and password Set objHttp = CreateObject("Microsoft.XMLHTTP") objHttp.open "POST", wsURL & wsFileName, False If objHttp Is Nothing Then Error ERROR_XMLPARSER_NOT_INSTALLED, "XML Parser is not installed." objHttp.setRequestHeader "Content-Type", "text/xml" objHttp.setRequestHeader "SOAPAction", wsURL + wsMethod soapRequest = Me.BuildSoapEnvelope() objHttp.setRequestHeader "Content-Length", Len(soapRequest) objHttp.send(soapRequest) ' Soap Fault If Instr(1, objHttp.ResponseText, "<soap:fault>", 5) <> 0 Then Set wsSoapFault = BuildSoapFault(Strleft(Strright (objHttp.ResponseText, "<soap:fault>", 5), "</soap:fault>", 5)) wsRunSuccess = False Error ERROR_WEBSERVICE_SERVER_ERROR, "Soap Error Encountered." ' Server not found Elseif objHttp.Status <> 200 Then Error ERROR_CONNECTION, "Could not connect to web service provider." wsRunSuccess = False Else Set objResponse = CreateObject("Msxml2.DOMDocument") Call objResponse.loadXML(objHttp.ResponseText) wsXMLResponse = objResponse.xml wsRunSuccess = True End If Set objHttp = Nothing Set objResponse = Nothing End Sub Private Function BuildSoapFault (SoapFaultXML As String) As SoapFault Dim faultcode As String, faultstring As String, faultActor As String faultCode = GetTagContent("faultcode", SoapFaultXML) faultString = GetTagContent("faultstring", SoapFaultXML) faultActor = GetTagContent("faultactor", SoapFaultXML) Set BuildSoapFault = New SoapFault (faultActor, faultCode, faultString) End Function Private Function GetTagContent(TagName As String, Source As String) As String GetTagContent = Strleft(Strright(Source, "<" & TagName & ">", 5), "</" & TagName & ">", 5) End Function Private Function BuildSoapEnvelope() As String Dim tmpEnv As String tmpEnv = |<?xml version="1.0" encoding="utf-8"?>| &_ |<soap:Envelope xmlns:xsi= "https://www.w3.org/2001/XMLSchema-instance" | &_ |xmlns:xsd="https://www.w3.org/2001/XMLSchema" | &_ |xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">| &_ |<soap:Body>| &_ |<| & wsMethod & | xmlns="| & wsURL & |">| ' If parameters have been specified for the web service add them now If Islist(wsParams) Then Dim paramTag As String Forall params In wsParams paramTag = Listtag(params) tmpEnv = tmpEnv & |<| & paramTag & |>| & params & |</| & paramTag & |>| End Forall End If tmpEnv = tmpEnv & |</| & wsMethod & |>| &_ |</soap:Body>| &_ |</soap:Envelope>| BuildSoapEnvelope= tmpEnv End Function ' ********* Properties ************ Public Property Get Successful As Boolean Successful = wsRunSuccess End Property Public Property Get XmlResponse As String XmlResponse = wsXMLResponse End Property Public Property Get ServiceURL As String ServiceURL = wsURL End Property Public Property Set ServiceURL As String wsURL = ServiceURL End Property Public Property Get ServiceFileName As String ServiceFileName = wsFileName End Property Public Property Set ServiceFileName As String wsFileName = ServiceFileName End Property Public Property Get ServiceMethodName As String ServiceMethodName = wsMethod End Property Public Property Set ServiceMethodName As String wsMethod = ServiceMethodName End Property Public Property Get ServiceSoapFaults As SoapFault Set ServiceSoapFaults = wsSoapFault End Property End Class Class SOAPFault Private fActor As String Private fCode As String Private fString As String Public Sub New(a As String, c As String, s As String) fActor = a fCode = c fString = s End Sub Public Property Get FaultActor As String FaultActor = fActor End Property Public Property Get FaultCode As String FaultCode = fCode End Property Public Property Get FaultString As String FaultString = fString End Property End Class
Do you have comments on this tip? Let us know.
This tip was submitted to the SearchDomino.com tip library by member Giles Hinton. Please let others know how useful it is via the rating scale below. Do you have a useful Lotus Notes, Domino, Workplace or WebSphere tip or code snippet to share? Submit it to our monthly tip contest and you could win a prize.