User bio

Dynamic and results-driven Integration Interface Specialist with over two decades of success leading a wide range of corporate IT initiatives. Proven track record in designing and implementing integrated solutions that align with and support strategic business objectives. Adept at bridging the gap between technical systems and operational needs to create robust, scalable environments.

Core Specialties:

  • Design and development of Microsoft and Oracle SQL databases
  • HL7 ancillary systems integration
  • Intersystems Ensemble and IRIS solutions
  • Legacy systems expertise including eGate, DART, JDBC, and custom interface components

Professional Highlights:

  • Deep expertise in Intersystems technologies, particularly Ensemble and Cache ObjectScript, developed through hands-on problem-solving and active engagement with the Intersystems Developer Community.
  • Known for a self-driven learning style—asking the right questions, exploring solutions independently, and collaborating effectively when needed.
  • Strong background in legacy integration platforms, with years of experience developing and maintaining systems and handling non-standard integration challenges.
Show all
Member since Mar 2, 2016
Replies:
Scott Roth · 15 hr ago go to post

While this shows how to send the report to a Stream Object, how are you able to call the InterSystems (Logi) Report within the CSP page to render?

I have many of examples of handling this using JDBC connection to Microsoft SQL Server. Either you can build an all-encompassing Custom Business Operation or use the EnsLib.SQL.Operation.ProcOperation. When inserting data into a table depending on how busy your Process is, I would suggest using Stored Procedures to insert the data.

Using a Dynamic SQL statement can cause some overhead because the Query is not Cached, so you are building it on your machine, then having to build it again when it is sent to the external connection. With a Patient Demographic (ADT) HL7 interface that extra overhead could cause everything to slow down.

The Begining of my Custom Business Operation looks like this...

Include (EnsSQLTypes, %occODBC) 

Class osuwmc.Visit.VisitDBWriteOperation Extends Ens.BusinessOperation [ ClassType = "", ProcedureBlock ] 
{ 

Parameter ADAPTER = "EnsLib.SQL.OutboundAdapter"; 

Parameter INVOCATION = "Queue"; 

Property InitDSN As %String; 

Method OnInit() As %Status 
{ 
Set ..InitDSN = ..Adapter.DSN 
//Set ..Adapter.ConnectAttrs = "QueryTimeout:45" ; try this too just in case... 
Kill $$$EnsRuntimeAppData(..%ConfigName) 

Quit $$$OK 
} 

Then for each stored procedure I call I have a different Method that uses its own Data Message Class Structure, the Message Map takes the incoming Data Message Class, and it knows which Method to call.

Method InsertCaseScheduleSp(pRequest As osuwmc.Visit.DataStructures.InsertCaseSchedule, Output pResponse As Ens.Response) As %Status 
{ 
set SPQuery = "{ ?= call dbo.usp_Interfaces_Insert_CaseSchedule_Ens(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}" 
set par = 15 
set par(1) = pRequest.CSN 
set par(2) = pRequest.MRN 
set par(3) = pRequest.CaseNum 
set par(4) = pRequest.SchedDate 
set par(5) = pRequest.OrderNum 
set par(6) = pRequest.LocationDescription 
set par(7) = pRequest.Duration 
set par(8) = pRequest.DurationUnits 
set par(9) = pRequest.CreationDate 
set par(10) = pRequest.CreationUser 
set par(11) = pRequest.ArrivalUser 
set par(12) = pRequest.EditingUser 
set par(13) = pRequest.NoShowUser 
set par(14) = pRequest.CancelUser 
set par(15) = pRequest.Status 

set tSC = ..Adapter.ExecuteProcedureParmArray(.caseschedinsert,.outputs,SPQuery,"oiiiiiiiiiiiiiii",.par) 
kill caseschedinsert 
kill SPQuery 
kill par 
Quit tSC 
}

Data MessageMap 
{ 
<MapItems> 
<MapItem MessageType="osuwmc.Visit.DataStructures.InsertCaseSchedule"> 
<Method>InsertCaseScheduleSp</Method> 
</MapItem> 
</MapItems> 
}

Certifications & Credly badges:
Followers:
Following: