#Business Operation

0 Followers · 255 Posts

InterSystems Ensemble provides specialized business operation classes that use specific outbound adapters to communicate with external systems and UI.

Documentation.

Question Scott Roth · Feb 23, 2021

I am trying to figure out how to send a Page via a HTTP.OutboundAdapter to a URL from Ensemble.

We have a URL that I am able to pass PNo=xxxx%PMsg=xxxx as parameters to send the page to a pager.

http://xxxxx.xxxxx.xxx/Employee/Tools/Paging/SendPage.aspx?PNo=1817&PMs…

When I send the above URL through a REST client I receive a Response of "SENT".

But when I try to send it through the HTTP.OutboundAdpater I do not get a response.

3
0 313
Question Scott Roth · Feb 4, 2021

We are getting more and more request wondering if we could send/receive data via HTTPS to the outside world from within our Hospital Network. As you can imagine our Ensemble/Cache productions are not exposed to the DMZ or has access outside of the network. We only communicate with external vendors through a VPN, so communicating not using a VPN is rather new to us.

Currently there is a project to get rid of using Proxy, and instead of through a Load Balancer that can use rules to filter out traffic, which adds another layer of complexity.

3
0 306
Question Mark O'Reilly · Jan 25, 2021

Hi:

I've looked on many of these examples and questions how to post the JSON body but all the posts are a little complexly worded for me to follow. 

so i have an EnsLib.REST.Operation

The example in ENSDEMO Directory Request says 

Set tSC=..Adapter.PostURL(tURL,.tHttpResponse,"",pRequest.Body)

What i can't see is how in Demo Rest Directory request it happens to get the value of the message fields into 

/// For JSON content submission
Property Body As %GlobalCharacterStream;

I have also played around with converting objects to JSON ect.  All i want to do is post an example like this to the API

2
0 1020
Question Scott Roth · Jan 13, 2021

I have a case where our EMR is sending data, but not all the values needed for the Ancillary are valued properly and causes that message to error/halt processing on the Ancillary system, not ideal but its what they do. I would expect them to still process the message except that 1 field, but they don't.

I want to add validation to make sure certain fields are valued correctly for the Vendor. 

So I add some statements to take those items that don't pass this validation out to a batch file with headers.

9
0 1074
Question Jens Salecker · Dec 15, 2020

We have a webserver which is using a port different to 443 for HTTPS communication. I can connect from the terminal session but not via the EnsLib.HTTP.OutboundAdapter. 

the example used in Terminal:

 
set httprequest=##class(%Net.HttpRequest).%New()
set httprequest.Server="appserver"
set httprequest.Port="4999"
set httprequest.Https=1
set httprequest.SSLConfiguration="app server"
do httprequest.SetHeader("Custom","cust")
set httprequest.ContentType="application/json"
do httprequest.EntityBody.CopyFrom(jsonfile)
do httprequest.Post("/FHIR/Bundle")
2
0 496
Question Scott Roth · Oct 19, 2017

We are trying to convert some of our SQL Service Integration Service jobs from Visual Studio to Ensemble. If we execute a Stored Procedure within SQL Server Management Studio it is returning approx 12,000 rows. However when Ensemble executes the same Stored Procedure it is only returning 250 rows.

Is there a limitation to EnsLib.SQL.Snapshot?

This is how we are calling the Stored procedure

4
0 979
Question Utsavi Gajjar · Dec 3, 2020

Hello, 

I am attempting to setup a DICOM Routing to Storage Production using Ensemble 2017.1. I have followed the Routing to Storage production given in Ensemble Demo Namespace. I have created association with appropriate “Presentation Context” for inbound and outbound PACS system.  I am attempting send a Computed Radiography Image from one PACS to another via Ensemble but its failing when sending the image to the receiving PACS with following error :

2
0 367
Question Ramesh Ramachandran · Sep 23, 2020

We use ExecureProcedure() to execute a stored procedure which returns a result set. But we see lot of "Invalid cursor state" errors when the result set is empty.  The connection to SQL server database is made through ODBC. 

ERROR #6022: Gateway failed: Fetch. + ERROR <Ens>ErrGeneral: SQLState: (24000) NativeError: [0] Message: [Microsoft][ODBC Driver 11 for SQL Server]Invalid cursor state 

Here is the code snippet from the business operation class which uses EnsLib.SQL.OutboundAdapter  

do ..Adapter.DSNSet(DataSourceName)

2
0 9801
Question Mathieu Van Sevenant · Aug 13, 2020

Hello everyone smiley

We are facing what seems to be a network problem while transferring HL7 messages from Ensemble/Healthshare to a distant target through TCP/IP.

Here is the version of the system in any case it could be useful: Cache for Windows (x86-64) 2017.2.1 (Build 801U) Wed Dec 6 2017 09:07:51 EST [HealthShare Modules:Core:14.02.2415 + Linkage Engine:15.03.9901]

Then the configuration of the operation:

NB high numbers for Read- and Response-Timeouts come from "long" transfers occuring sometimes, e.g. HL7 messages with about 600 segments, successfully transferred if we let them this "long" time.

7
0 1005
Question Bukhtiar Ahmad · Sep 10, 2020

Hi i have rules and i want to log them to analyse what rules executed , I want to add in the log Msg Controller Id, MRN, Value coming in the message, and my customize text telling whats wrong with this field... i have like 50 rules and at the end i can check the log table and found like 20 entries so it means 20 data issues are there for a given message control id. any advice how to to do it

3
0 303
Question Mark O'Reilly · Aug 5, 2020

Hi:

I have an sql outbound adapter. Sometimes we have trouble connecting to the database. 

The timeout in develpment is set to 15 seconds in live it is 150 seconds as it is an always connected Buisness operation. 

I thought adding E=S or/and X=S would suspend the message. Why does it not? 

Is the only way around then adding something to the buisness operation itself/ creating a customised SQL buisness operation rather than EnsLib.SQL.OutboundAdapter?

Thanks 

Mark

5
0 540
Discussion Neerav Verma · Jul 29, 2020

Hello All,

I have been using IRIS / Ensemble for over a decade and appreciate lot of it's functionalities and features, however besides having a UI of 80's era (which doesn't bother me), what I believe where IRIS is lacking is lack of out of the box connectors (services/operations).
If we look at IRIS's competitors for eg Mulesoft, Talend, Boomi they all have hundreds of pre-built connectors for major applications like Salesforce, SAP etc and cloud services like Azure, AWS etc to store and retrieve information and data.

Just to give an idea here is a link of Dell Boomi connectors

1
0 595
Question Yone Moreno · Jul 15, 2020

Hello,

We would need to know the Ens.Response SourceConfigName to identify which Operation has raised an exception.

We have tried:

$$$LOGINFO("..%Process.%PrimaryResponseHeader.SourceConfigName..: "_..%Process.%PrimaryResponseHeader.SourceConfigName) //It outputs an empty string
 
$$$LOGINFO("response.SourceConfigName: "_response.SourceConfigName) //It generates an exception

 

We would need to get from an Ens.Response which body is null, its SourceConfigName:

How could we know it? 📛

2
0 450
Question Mark O'Reilly · Jun 11, 2020

I'm cautious not to ask too many questions on here, but there really doesn't seem to be a good XML end to end guide that explains these things. 

I have now a Business operation that's going to call a url like https://directory.spineservices.nhs.uk/ORD/2-0-0/organisations/Y00334?_…

I'm looking the status of the practice- I tried date but again fell flat as i wan't able to ensure i only got the end date from the first <date> tags and not any subsequent dates. 

Managed to do it kinda in a class method like so 

4
0 411
Article Eduard Lebedyuk · Jun 18, 2020 1m read

Often we need to debug a Business Operation. Tracing and logging work but sometimes you want to work with a BO as with your local terminal session.

Here's how you can do that on any operating system.

Windows has a great tool for debugging Business Operations - Foreground mode. In that mode Windows launches a local terminal with operation job.

Note that there's  an issue with some InterSystems IRIS versions (older than 2021.1) which caused cterm launch instead of iristerm. To fix that you can either install Caché/Ensemble/HealthShare on a same server or run this reg file:

0
2 607
Question ED Coder · Apr 14, 2020

DeadJobAlert: Job 'X478915' for config item 'Business  Service' was marked as 'dead' under ghost Id 'sys:ZX478915_6117'

This is the error message I get, but can you advice how can I start debugging this? I look at the jobs and I just see "dead" I cant see any information on the message itself.

I would appreciate if you could advice on how to start debugging such a job. Events are also non-informative.

3
0 1012
Question Mark O'Reilly · Apr 30, 2020

Hi:

Sorry I can't find the correct documentation for this. It's very simple I think. 

I open up an XML reader class and correlate the XML to a message type. 

My XML will read something like 

<StatusLastChecked></StatusLastChecked>

This gets correlated into a message with the following property 

Property StatusLastChecked As %String(XMLPROJECTION = "element");

I can use the following to get the other properties out 

i.e. docs.RelayedDocuments.GetAt(i).DateAdded will get the date added properties

When i try for the one with the blank value for the blank entry with a trace I get undefined traced out 

6
0 680
Question Mary George · May 7, 2020

Hi,

I have a HealthShare HealthConnect operation which uses the EnsLib.HTTP.OutboundAdapter. It is using a custom Operation class to send HTTP Post request. The request data that is sent to the operation and the response back from the operation is not  displayed on the visual trace. Is there anyway to display this data in the trace? 

Thank you for your help. 

7
0 828
Question Michel Liberado · Mar 1, 2020

Hi,

I have a production with a BS calling a BP calling another BP and so on and finally a BO. All calls are made using SendRequestSync.

The initial request is passed by value. The response is passed by ref and I allocate memory for it in the BO, hoping that it will go back to the initial caller in the BS, but it does not.

It looks like the following:

3
0 410