#Business Operation

4 Followers · 262 Posts

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

Documentation.

Question Dhaval Shah · Jan 3, 2019

Hi All,
I created a Business Operation to Integrate with Amazon S3.
I have used HTTP Outbound Adapter for the same. Used Get method of Adapter Class.
Basically in a request I want to send Unique File Name and File and in Response I want to get Version ID and if operation was successful, then set flag to true.
I have created a class for request in that I have two properties, as shown Below :
   

    Property fileName As %String;
    Property file As %GlobalBinaryStream;
This is in my Operation Class
 

            set pResponse = ##Class(SaveFileResponse).%New()
            set fileName = pRequest.fileName

8
1 1151
Article Benjamin De Boe · Jan 22, 2019 1m read

Running predictive models natively in an InterSystems IRIS Business Process has of course always been the goal of our PMML support, but somehow never made it into the kit because there were a few dependencies and choices that needed addressing and answering. Anyhow, thanks to some pushing and code kindly provided by @Amir Samary (Thanks again Amir!), we finally got it wrapped in a GitHub repo for your enjoyment, review and suggestions.

2
3 566
Question Duncan Priest · Sep 5, 2018

I'm writing a SOAP client in Ensemble (2017.2.2) that is required to pass empty elements to the SOAP server in the form <xsi:type="ns:ResponsibleUser"/> where ResponsibleUser is a class that itself has no properties.I initially thought I'd found the answer with the XMLIGNORENULL parameter of XML enabled classes but this didn't make any difference for SOAP requests, only working when I wrote the XML to a file.

1
0 631
Question Ting Wang · Dec 10, 2018

I created the Process to extract the required data from ADT message to a Dynamic Object. I wanted to send the JSON stream to EnsLib.File.PassthroughOperation operation and generate a file with the content of JSON stream.

Here are the codes for Process:

set oMetadata = ... /// metadata is from ADT message which is dynamic object

set jsonRequest = ##class(%ZEN.Auxiliary.jsonProvider).%ObjectToJSON(oMetadata)
set tSC = ..SendRequestAsync(..JSONOperation,jsonRequest,0,,..MetadataContext)  /// send the jsonRequest to operation

Here are the errors in the operation: "ERROR <Ens>ErrGeneral: No MessageBody

8
0 1299
Question Scott Roth · Nov 30, 2018

I am trying to explore some new possibilities outside of the normal day to day HL7 interfacing we do. I have only done 1 other Web Service interface but it was using a SOAP proxy wizard. Now I am tasked with trying to make a call to an external API 

https://npiregistry.cms.hhs.gov/api/

but I am a bit confused about how to go about doing it.Since they don't have a wsdl, this means it is a REST web service correct?or is it considered an API call?

12
2 1189
Question Scott Roth · Oct 31, 2018

I am working on my first REST operation concept and had a question about the Property Parameters. If I put a value in CAPTION, does that mean that when I use it in my call that it will come out in the URL?

For example...

Property enumerationType As %String(CAPTION = "enumeration_type");

Then in my operation...

Set tURL=..Adapter.URL_"?q="_pRequest.enumerationType

so when it builds the URL it looks like...

3
0 474
Question Arun Madhan · Oct 29, 2018

HealShare 2017

Hi dev community,

I am currently  working on an interface that needs to communicate to a SOAP/ITK endpoint.

I am using the EnsLib.ITK.AdapterKit.Operation.SOAPOperation to interface with an ITK 
service, but it is proving to be more complex than originally expected to set up the web client 
against that particular end-point since I haven't been provided with a WSDL from ITK service side as 
the vendor state they are following the ITK standard and no WSDLs are needed.

I have set up an EnsLib.ITK.AdapterKit.Operation.SOAPOperation within Health Share production and 
we are currently

1
0 393
Question Larry Pinsky · Mar 22, 2017

We have many sFTP business operations that work successfully.  I just modified an existing one to point to a new IP and Port, as well as use new credentials (username and password only).  When I attempt to sFTP a file, I receive the following error.

ERROR <Ens>ErrFailureTimeout: FailureTimeout of 15 seconds exceeded in EnsLib.FTP.PassthroughOperation; status from last attempt was ERROR <Ens>ErrOutConnectFailed: SFTP Connect failed for sftp.pmpclearinghouse.net:22/OARRS PMP/SSL='!SFTP'/PubKey=''/PrivKey=''
with error ERROR #7500: SSH AuthenticateWithUsername Error '-2146430958': SSH Error

5
0 2819
Question Mauri Kaatrasalo · Oct 10, 2018

Hi!

We would like to retry message so that it's restored to end of operation's queue. This is in situation where order of messages is not needed to be handled by Ensemble, there is version number in message data and receiving application can ignore incoming message if necessary.

We would try to send message until it's accepted (or manually suspended), but this should not block operation's queue.

We have already this in actions:

D - Disable the Operation, log an error and restore the message to the front of the Operation's queue.

Would be nice to have one like this:

Q - Disable the Operation, log an

1
0 1007
Question Warren Grob · Sep 10, 2018

I am having an issue with the output file format on a production where quotes (" ") around column values are being removed from the imported file.  For example, my input file is a csv formatted as such: "123", " ", "ABC".  The output file format that is being generated produces: 123, , ABC.  I need the output file to retain the quotes around the data.

Is this something that can be corrected in the record map?  Or is it an issue elsewhere?

3
1 483
Question Herb Salgado · Sep 13, 2018

Hello,

I am trying to send a HL7 Billing Batch 2.3:FHS file out to an FTP site:

The file needs to be  in Variable Length / Carriage return carriage control format--  

 When I send the file, the format is Fixed Length 512 Byte Record-- Not Working

The data is ok within the file-- It is just the way I am sending it out of Ensemble that is not correct.

I am thinking that it is a setting within the Operation that I am missing or not choosing correctly.

Charset-AsciiCR

Separators -|^~\&\r

Default Char Encoding: Binary

I appreciate the help,

Herb

Record format:      Fixed length 512 byte records

Record

2
0 384
Question Thomas Kotze · Sep 11, 2018

Hi, 
Connections/ SOAP Operations to 3rd Parties can hold some challenges like the 3rd party changes it 's structures/ WSDL  and returns an additional property in a SOAP response. So I have tried to implement the XMLIGNOREINVALIDTAG in the proxy SOAP response structures , but in Ensemble this seems to get ignored.

Are there any good suggestions on how to handle this an ideal would have been that the other party inform you of changes before hand....

Or we can ignore the tags, and inform the operations of such problems but the rest of the response message is valid and could be processed

Best regards

1
0 457
Article Stuart Peters · Jan 27, 2017 2m read

Below is a simple alert processor based on the EnsLib.HTTP.OutboundAdapter  to send text alerts via an SMS Gateway service. Typically, all that is needed to send an HTTP Post to the gateway service is the destination phone number, a source phone number, credentials, and the URL.

The code below is based on the Anveo gateway whose interface is as follows:

Class Hospital.TextMessageAlert Extends Ens.BusinessOperation
{
Parameter ADAPTER = "EnsLib.HTTP.OutboundAdapter";
Property Adapter As EnsLib.HTTP.OutboundAdapter;
Parameter INVOCATION = "Queue";

 

/// The phone number that receives the text message

5
2 2195
Question Andrew Makinson · Sep 3, 2018

In a EnsLib.REST.Operation I have...

Set tSC=..Adapter.Post(.tHttpResponse,,pRequest.stream)

This sends JSON string over HTTP

I am getting this error back from the server

ErrHTTPStatus: Received non-OK status 415 from remote HTTP server: 'HTTP/1.1 415 Unsupported Media Type'

I have been told that the media type should be "JSON"

how do I go about changing the media-type of the HTTP Request?

1
0 1248
Question Andrew Makinson · Sep 3, 2018

Trying to get an outbound operation working using the EnsLib.REST.Operation class but having problems

from the Operation

Class LPCH.FSE.DictionaryItems.All.Operation Extends EnsLib.REST.Operation
{
Parameter ADAPTER = "EnsLib.HTTP.OutboundAdapter";
Property Adapter As EnsLib.HTTP.OutboundAdapter;
Parameter INVOCATION = "Queue";
Method ProcessTaskEX(pRequest As Ens.Request, Output pResponse As Ens.Response As %Status
{
      // Get URL
      Set tURL=..Adapter.URL
      
      // Execute the call
      Set tSC=..Adapter.PostURL(tURL,.tHttpResponse)
      
      //Return the response
      If $$$ISERR(tSC)&&$I

3
0 1495
Question David.Satorres6134 · Jun 14, 2018

Hi,

I'm getting mad trying to get data from an external REST service that uses Basic Authentication from Ensemble. The BO worked fine when I was using a test server without authentification, but as soon as we need to go to production I cannot have it working.

So far, I've created the username/password at the credentials page (Ensemble-Configure-Credentials). I've setup the BO to use this credentials. But nothing happens.

I've tried with the Rest Client (addon for Mozilla), and using the same address, port and user/pwd works just fine.

So, the question is: how can I use the Basic authentication in

8
0 1913
Question Sergio Vidal · Jul 20, 2018

Hi,

I have a question related with EnsLib.SQL.OutboundAdapter adapter.

Is there a way to open an oracle transaction and do either commit or rollback depending on the query result?

Is posible to keep open an oracle transaction to execute a lot of queries on different methods on the same business operation and do a commit when the business process finished?

Thanks and Best Regards

Sergio Vidal

4
0 411
Question Ewan Whyte · Jun 29, 2018

I'm trying to add an Operation to store DICOM files but each time I add a Operation using the class EnsLib.DICOM.Operation.TCP it reverts into Services and I cannot work out why this is happening. I've tried following the guide online (link at the bottom) but the Operation still reverts to a Service.

Any pointers would be appreciated,

Thank you.

https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KE…

1
0 390
Question Thembelani Mlalazi · Jun 22, 2018

I have a service that takes a file and pass it through to the production .While I am passing the file through I get the file stream and set it to a variable within my message and the variable is of type %Ens.StreamContainer. But after all processing and I need to write out my file to a pdf format The file gets written but is a corrupt file since I can not read it I have tried this with asimple pass through everything is fine .But here I do not know what I am doing wrong here is the operation code

 set pInput=pRequest.FileStream
     ;the variable to hold the status for the method
 #dim
11
0 996
Question Guillaume Lepretre · Jun 20, 2018

Hello,

I used the operation : EnsLib.EMail.AlertOperation to send mail to handle error. However, I want to get more information about the error (session ID message, the date, the namespace... etc).

what is the best way to do it?

I tried to add informations in OnAlertRequest method as below but I need to change mail operation from all namespaces...

4
0 627
Question Scott Roth · Jun 14, 2018

I have several stored procedures that when I execute them they will only return a single snapshot. In my BP I have been setting this to a Snapshot variable then looping using a WHILE through the snapshot variable just to get that single value.

Since it is only a single row, is there an easier way where I don't have to do a WHILE loop to pull the values out of that row? Can I call First Row or something like that to get me just the row into the Snapshot variable?

1
0 513
Question Bharathsimha Reddy Jakka · May 21, 2018

Routing Rule Usage -

Can we use Functions and Methods with multiple parameters and refer objects by reference as parameters inside Routing rule ?

How do we handle DB related workflows in Business Rules ?
How can we perform Response object based handling in Business Rules ?
Can we try by extending methods with Ens.Util.FunctionSet and pass in the Context object from the rule as a parameter for certain functions ? 
Can we split the Business Operations into methods that can be used from the routing rules and create the message route request flow ?

My understanding - Inside a rule we can refer only to

1
0 581
Question Thembelani Mlalazi · May 10, 2018

I have a batch that uses the record mapper class .I would like to have a custom operation that will write this batch to a csv file .My operation has a batch as its request and I would like to read that batch data to a csv.So far here is  what I have.

Method BatchFile(pRequest As ResponseRBAT, Output pResponse As EnsLib.RecordMap.BatchResponse) As %Status
{
 #dim status as %Status=$$$OK
 #dim inrec as HSCIC.DBS.ResponseRMAP.Record=##class(ResponseRMAP.Record).%New()
 set x=0
    set:$$$ISOK(status) status=  ..Adapter.PutLine(pRequest.%Source,pRequest.BatchHeader)
    //set
1
0 932
Question Thembelani Mlalazi · Apr 26, 2018

I am using the EnsLib.RecordMap.Operation.BatchFileOperation to write a batch to a file but for some reason this has been working fine as of yesterday I had a problem with the cache databases filling up running out of memory so had to compact my database and gain space now when I run the operation I get the above error  .Of course in my batch table there is no batch record with ID 1.The message is passed with the correct header information but still get this error any suggestions why?

3
0 1111
Question Bob Felbol · Apr 20, 2018

Hi

Made a request for API REST.

Using HTTP Request adapter.

Adapter As EnsLib.HTTP.OutboundAdapter

Outside the Ensemble an API response is JSON (CORRECT)

Answer in Ensemble: =?Á
Â0 
?_eä,cÒ
'=
*^<YÙF¡í$í¼ÈÞÝt 
oÉ÷ý$?|
¤1¡{Dâhà°Ý?Öù)2ós??R?¸¼?ºd?$,ñD+»??

ÔºQZéýNÕ V{C?óò?b¢?éÍ )$ 
²5Å?wEë? ??©tÖã1z×2FëÊnôeË æ??]Zßq ܺ?á

Help me.

Thank you

8
0 588
Question Peter Branagan · Apr 10, 2018

Hi All,
I have a line of mumps code that creates a folder on a network shared drive.
Example:
d ##class($Library.File).CreateDirectory("\\share\folder\newfolder")
If I run this line of code from a cache terminal window it works fine and creates the folder without problems.
However If I create a very simple business operation in a production in the same namespace that simply runs this one line of code then the code fails.
Anybody encountered this issue in the past and If so how did you overcome the problem.

4
0 1834