#Business Operation

4 Followers · 265 Posts

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

Documentation.

Question Scott Roth · Apr 7

We are working on Disk Consolidation and looking at Class/Globals that are rather large and not being cleaned up by the nightly Purge process. We have implemented DeleteHelper - A Class to Help with Deleting Referenced Persistent Classes | IDC on any Custom Data Classes, and Business Processes (BPL).

We have a bunch of Data Classes, BPL's, and Operations that connect to external MS SQL Server using JDBC to query or write data to using Stored Procedures and Queries. All that Query external tables are using EnsLib.SQL.Snapshot, and this is being written to ^Ens.AppData which is not cleaned up.

1
0 33
Question Robert Hildebrand · Feb 5

Hi,

I want to consume an API that provides HL7 messages. To achieve this, I have thought of the following workflow:

I have created a business service that periodically triggers a business process. The trigger request is forwarded to a business operation. There, a %Net.HttpRequest is assembled from scratch and then sent to the API endpoint. The corresponding HttpResponse then contains several HL7 messages encoded in UTF-8 in the message body. To further process the HL7 messages, the operation sends the HttpResponse back to the business process as EnsLib.HTTP.GenericMessage.

3
0 102
Question Hassan Mirza · Jan 22

Hi, I have simple email alert setup (EnsLib.EMail.AlertOperation) where in operations I have SMTP server setup and Recipients emails.

Also I find Alert Groups dropdown option in operations, processes, how this is different from setting up simple email alert with recipients list?

Please advise.

1
0 63
Question Ryan Hulslander · May 21, 2025

WSDL for a CDC vendor was provided with a URL using a custom socket (non 443). Everything generated fine, but when making calls to their https:// URL that has their custom port in the URL - no response comes back. The assumption is, their server isn't even processing the request, as Postman does using the custom https://path.to.server:NNNN port in the URL.

I see with a normal web operation that uses %Net.HttpRequest overriding the port property is easily done - but no animal seems to exist for any generated SOAP Operation class.

3
0 184
Question Will · Mar 16, 2025

Hi,

My HL7 interface in production is outputting messages to a HL7 File Operation and a  EnsLib.HL7.Operation.HTTPOperation. There is no errors in the File Operation, but the HL7 HTTPOperation is giving ERROR #5911: Character Set 'iso-8859-4' not installed, unable to perform character set translation.  Both the HL7 File Operation and HL7 HTTP Operation are using latin1 for Default Char Encoding.

What is ERROR #5911 aboutIs something missing in the IRIS installation? 

Thank you.

W

5
0 145
Question Jacopo Magliani · Nov 4, 2024

I am developing a business operation that receives a request, creates a message with the data contained in it and sends it to an outlook email. For testing purposes both the sender and the destination are the same email account
This is the code:
ClassBO.AlertEmailSenderExtendsEns.BusinessOperation{

ParameterADAPTER = "EnsLib.EMail.OutboundAdapter";
PropertyAdapterAsEnsLib.EMail.OutboundAdapter;
ParameterINVOCATION = "Queue";
MethodOnMessage(pRequestAsMessages.AlertMsgToEmail, OutputpResponseAsMessages.AlertResponse) As%Status
{
setsc = $$$OK
Setmsg = ##class(%Net.
7
0 340
Question Fahima Ansari · Apr 1, 2024

In The Business Process and the Business Operation, I am using the following code to get the value of TimeCreated and TimeProcessed 

BP:

%Ensemble("Process").%PrimaryRequestHeader.TimeCreated

%Ensemble("Process").%PrimaryRequestHeader.TimeProcessed

BO:

..%RequestHeader.TimeCreated

..%RequestHeader.TimeProcessed

But I am trying to use ..%RequestHeader.TimeCreated in Business Service it is not storing any value.

How to get the value of TimeCreated and TimeProcessed in Business Service?

5
0 201
Question Smythe Smythee · Feb 17, 2024

Hi Community,

Is there a way to call HL7 Data transformation directly from Business service without using Rule functionality in the production

In this scenario i need to call a data transformation in directly in business service and give the transformed message to Business operation 

Please share if you have any ideas to implement this.

Thanks,
Smythee

6
0 311
Question Conor Browne · Nov 17, 2016

Hoping someone can help,

I have the "Sample FHIR Production" installed ( as described in the documentation) with the following Components:

Service: HS.Gateway.ECR.SDA3XMLFileService

Processes: HS.FHIR.FromSDA.DTL.Transaction.Process

Operations: HS.FHIR.Repository.Operations

When a patient's data gets updated in my application a new SDA3 message is generated and processed by the FromSDA DTL. The Repository Stores that data as a New patient ( i.e. when I query the Repo they have different IDs "resource":{ "resourceType":"Patient", "id":"4", ) .

5
0 1101
Question Smythe Smythee · Sep 11, 2023

Hi Community,

I have SDA file as Ens.StreamContainer Message using pRequest As Ens.StreamContainer

SDA file structure looks like this 

<Name><FamilyName>Lucy</FamilyName><GivenName>Hale</GivenName><MiddleName>Park</MiddleName></Name><Gender><Code>F</Code><Description>F</Description></Gender><BirthTime>2023-09-07T00:00:00</BirthTime>

How can i change individual value from the Steam and then save changed value into the stream?

3
1 1027
Question Julio Rodriguez · Jul 10, 2023

Hello,

I have a EnsLib.HL7.Operation.FTPOperation that uses SFTP protocol and public/private key to connect to an external vendor moveitcloud.

Issue: The vendor is planning to enable Multi Factor Authentication for this file transfer account.

Question: Have you configured a SFTP operation to use Multi factor Authentication? If not, is there another way?

Thank you,

1
0 476
Question Clint Childs · Dec 2, 2022

What I can do:
Get a subset of HL7 messages.
Send the messages to a RecordMap (with key fields from the HL7 message).
Save each message to a file.

How can I send all messages until a set time (e.g. 9am each day) to single file?

Scenario:
In the period 09:00 1 Jan 2022 to 09:00 2 Jan 2022 there are say 50 messages to save to file: File001.txt
In the period 09:00 2 Jan 2022 to 09:00 3 Jan 2022 there are say 40 messages to save to file: File002.

2
0 589
Question Scott Roth · Jun 1, 2022

I would like to capture any NACK's that is sent back to the Operation. The Operation is already setup to "Save Replies/IndexNotOK's", but I would like to see if we can query Cache and pull those NACK's into an extract.

Is this possible?

Thanks

Scott

4
0 386
Question Thomas Vessiere · May 5, 2022

Hello. 

I'm trying to POST a JSON on an URL. 

But the body request arrive empty on the web service : 

[DEBUG] # 2022-05-05 15:04:32,966 # scopes founds : api
[DEBUG] # 2022-05-05 15:04:32,971 # PatientController:PostSignaletic object null

Here is the code, i tried a TONS of ways to do it but i'm still in trouble ... 

Method SendSignaletique(Token As %String)
{
    //set UrlPats = "https://app.depistagesurdite.be/externaldemo"
    
    /*set internalID = "123456789"
      set lastName = "Test"
      set firstName = "CHRV"
      set dateOfBirth = "2022-05-04"
      set gender = "1"
      set clinicId = 22
      set mothersName = "CHR VERVIERS"
      set address = "Rue du parc , 29"
      set postalCode = 4800
      set place ="Verviers"
      set telephone1 = "087212824"*/
      
    try
    {
        set JsonArray = ##class(%DynamicArray).%New()
        set SignaletiquePat = ##class(%DynamicObject).%New()
        
        set SignaletiquePat.internalID = "050522001"
        set SignaletiquePat.lastName = "Tata"
        set SignaletiquePat.firstName = "Silva"
        set SignaletiquePat.dateOfBirth = "05/05/2022"
        set SignaletiquePat.gender = "1"
        set SignaletiquePat.clinicId = 22
        set SignaletiquePat.mothersName = "Anne Dede"
        set SignaletiquePat.address = "Rue des prés, 50"
        set SignaletiquePat.postalCode = "4620"
        set SignaletiquePat.place = "fléron"
        set SignaletiquePat.telephone1 = "0499998855"
        
        set JsonArray."0" = SignaletiquePat
        
        set JsonArrayOBJ = JsonArray.%ToJSON()
        
        $$$TRACE("Json : " _JsonArrayOBJ)
        
        set HTTPRequestPat = ##class(%Net.HttpRequest).%New()
      
          set HTTPRequestPat.ContentType = "application/json"
        
        Do HTTPRequestPat.SetHeader("Authorization","Bearer "_Token)
          Do HTTPRequestPat.EntityBody.Write(JsonArrayOBJ) // like this ? didnt work
          set ..Adapter.HTTPServer = "185.36.164.222"
          set ..Adapter.URL = UrlPats_"/api/patient/signaletic"
        set st = ..Adapter.SendFormDataURL(..Adapter.URL,.callResponsePat,"POST",HTTPRequestPat,,JsonArrayOBJ) // not working too....
      
          #dim callResponsePat as %Net.HttpResponse
          set dynamicObject = {}.%FromJSON(callResponsePat.Data)
          set JsonString = dynamicObject.%ToJSON()
          
          $$$TRACE("return : " _ JsonString)
          
          set Iterator = dynamicObject.%GetIterator()
                
          While Iterator.%GetNext(.key,.val)
          {
              if (key = "Message")
              {
                  if (val = "An Error as Occured.")
                  {
                      $$$TRACE("Erreur : "_ val)
                      
                  }
                  else
                  {
                      $$$TRACE("pas d'erreur : " _val)
                  }
              }
          
          }
          
        
    }
    catch ex
    {
        $$$TRACE("Error while sending datas: "_ex.DisplayString())
    }
}
14
0 603
Question Scott Roth · Apr 13, 2022

I have been struggling trying to understand "Response From" and "Response Target Config Names" as I am trying to track down Orphaned messages.  I have noticed that when a Business Rule, or Business Process sends to a File Based Operation, there is always a NULL value response being returned. I am thinking these NULL values are causing some of the orphaned message problems we are seeing.

If the Business Operation is a File based operation, how do I prevent the NULL value from being sent back? Is this because our "Response From" and "Response Target Config Names" is blank?

2
0 542
Question gerald hanford · Apr 5, 2022

Hello Community,

I am still pretty new to Ensemble, Cashé, or ObjectScript. My question is this how can I tell when a file was finished and read fully? Currently, I have an EnsLib.FilePassthroughService reads a file from a designated file path and moves it to an archive file path. I need to set up an alert or a notification that can tell me once the file has been read in its entirety and has been moved out of its current file path.

Any help you can give me would be greatly appreciated, or if you need further clarification I can do my best to answer any question you have. Thank you. 

3
0 320
Question Dyego Crisostomo · Oct 3, 2019

Hi,

I'm trying to establish a communication between my edge, which is in one server, with my HUB which is in another one. 
In EDGE, when the HS.Gateway.HSWS.WebServices component sends a message to the HUB component, it receives the following error: "Cannot invoke method RegisterGateway; WebServiceClientClass 'HS.Hub.HSWS.WebServicesClient' could not be instantiated, or the WebServiceURL Location could not be determined".
 

May someone help me? 
 

1
0 498
Question Ting Wang · Jul 2, 2019

Hello community,

I have a very weird situation that in the name space, when I choose the soap service for a component from Basic Settings->ServiceName dropdown menu, the service registry name is there. However, when I go to HealthShare management->Service Registry, there is not any service showing up. Then I am trying to add this service by clicking the Add Service button and fill out the api information, then I hit save button and it says that "Service with this name and service type already exists", which won't allow me to add this particular service.

1
0 491
Question Joe Jung · Jan 26, 2022

Currently running Ensemble on Red Hat Enterprise Linux Server release 7.7

One of our clients is requesting files sent to their SFTP site be encrypted with their PGP public key and digitally signed with our PGP private key

We have created a custom class that includes the following command to encrypt the files

if (pAction = "Encrypt") {
// Find the Key ID from the Keyname
set tKeyId = ..GPGKeyLookup(pKeyName, ..#PUBLICKEYLUT)
set tCmdLine = "gpg --homedir "_pGPGhomedir_" --always-trust -r """_tKeyId_""" -o "_pOutFileName_" -e "_pInFileName
}
// Execute the command to generate the output file

2
0 648
Question prashanth ponugoti · Dec 1, 2021

Hi All,

I have configured Business Operation with EnsLib.HTTP.OutboundAdapter and set properties.

In the BusinessOperation method  I am trying to create %Net.HttpRequest 

Set httpRequest= ##class(%Net.HttpRequest).%New()

to post REST Service.

I am able to access HTTPServer ,URL details form Adapter using below code

Set httpRequest.Server = ..Adapter.HTTPServer
Set httpRequest.Location = ..Adapter.URL

How to read SSLConfiguration from Adapter properties?

As of now , I am hardcoding same string which I have configured for BusinessOperation Settings tab


Set httpRequest.

3
0 349