Discussion (4)2
Log in or sign up to continue

Yes, because the Edge is usually remote, so I used but calling the remote Web Service:

1. Create the web service client from the WSDL http://<IP>:<PORT>/<NAMESPACE>/csp/healthshare/hsedge/HS.Gateway.HSWS.WebServices.cls?wsdl. (more details: https://docs.intersystems.com/hs20221/csp/docbook/DocBook.UI.Page.cls?KE...)

1.1 To create the web service client classes do (https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls...):

set r=##class(%SOAP.WSDL.Reader).%New() 
GSOAP>set url="http://<IP>:<PORT>/<NAMESPACE>/csp/healthshare/hsedge/HS.Gateway.HSWS.WebServices.cls?wsdl"
GSOAP>d r.Process(url, "targetpackagename")

2. Use the SOAP generated class to consume EPRSave():

Class package.NameOperation Extends Ens.BusinessOperation

Parameter ADAPTER = "EnsLib.SOAP.OutboundAdapter";
Parameter INVOCATION = "Queue";
Method SendSDA(pRequest As pack.WSReq, Output pResponse As pack.Resp) As %Status
  Set tSC = 1
  Set sda = ""
  Set pResponse = ##class(pack.Resp).%New() 

  Try {
    While 'pRequest.sda.AtEnd {
      Set sda = sda_pRequest.sda.ReadLine() 
    Set request = ##class(hcd.ECRUpdateRequest).%New()
    Set request.UpdateECRDemographics = 1
    Set request.AllowFacilityAsAssigningAuthority = 0
    Set request.StreamContentType = "SDA3"
    Set request.ContentStream = sda
    Set client = ##class(hcd.HS.Gateway.HSWS.WebServicesSoap).%New()
    Do ##class(Ens.Util.Log).LogInfo($classname(),"SendSDA","Send SDA to: "_client.Location)
    Set client.SSLConfiguration = "HCD_SSL"
    Set cred = ##class(Ens.Config.Credentials).%OpenId("HS_Services")
    Set wsuser = cred.Username
    Set wspass = cred.Password  
    Do client.WSSecurityLogin(wsuser,wspass) 
    Do client.EPRSave(request, .response)
    Set pResponse.response = "OK"
    Set pResponse.response = "SDA sent"
  } Catch ex {
    Set tSC = 1
    Do ##class(Ens.Util.Log).LogError($classname(),"SendSDA",$System.Status.GetErrorText(%objlasterror))
    Set pResponse.response = "Not OK"
    Set pResponse.response = "Error while sending SDA. Details: "_$System.Status.GetErrorText(%objlasterror)
    Set ..SuspendMessage = 1

  Return tSC

XData MessageMap
  <MapItem MessageType="pack.WSReq">


Hi Yuri, thank you for your sample, I noticed you don't handle/consider the response from EPRSave().

Are you actually using that API in a production system?

The response is a string code only, so if we don't have error, the edge was sucessful, otherwise I try to suspend to try again after

In your sample the response from EPRSave() is never used/tested.

Do client.EPRSave(request, .response)

Are you actually using that API in a production system?