#Business Process (BPL)

4 Followers · 231 Posts

InterSystems Ensemble Business Process Language (BPL) is a language used to describe executable business processes within a standard XML document.

Documentation.

New
Question Scott Roth · Mar 12

We are trying to track down significant growth within our Namespaces, one big culprit is Ens.AppData (EnsLib.SQL.Snapshot). 

Within many of our BPL's we use EnsLib.SQL.Snapshot to return Results from External SQL Stored Procedures or Query's. The same EnsLib.SQL.Snapshot context variable is used for many of these calls within a BPL. 

Is there something we should be doing at the end of the BPL to ensure that EnsLib.SQL.Snapshot gets cleaned up and purged from Ens.AppData?

1
0 18
New
Question Colin Brough · Mar 5

We have an HL7 feed that contains Lab Results. Each message contains a set of results, identified by a LabReportId. Some LabReportIds can get more than one message / set of results - these are updates, as new results become available, and must be processed in order. Results for different LabReportIds can be processed in any order.

As each message is used to build a PDF, which takes time, we want to run these through a production where the key business process has a Pool Size > 1, while still ensuring that messages for each LabReportId are processed in order.

3
0 84
Article Suprateem Banerjee · Jan 25 14m read

 

Ever since I started using IRIS, I have wondered if we could create agents on IRIS. It seemed obvious: we have an Interoperability GUI that can trace messages, we have an underlying object database that can store SQL, Vectors and even Base64 images. We currently have a Python SDK that allows us to interface with the platform using Python, but not particularly optimized for developing agentic workflows. This was my attempt to create a Python SDK that can leverage several parts of IRIS to support development of agentic systems.

1
0 41
Question Raja Seetharaman · Feb 6

Hello, I am trying to get some fields from HL7 message and create a file using BPL.  The values I need are in a repeating segment (AIG).  Even in the repeating segment, I just want the iteration that has a certain field (AIG:3 populated).  With the help of documentation and community posts, I was able to create the BPL to loop through all of AIG and create the file.  But when I try to narrow the results even further (AIG:3 present), the process gets stuck.  I am not sure I am missing anything or have anything incorrectly set up.

2
0 51
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 45
Question Scott Roth · Dec 29, 2025

I built a BP, that every time that a message is received from a BS, it executes 

 set isAuth=##class(%SYS.OAuth2.AccessToken).IsAuthorized("EpicFHIRPOC",,,.accessToken,.idtoken,.responseProperties,.error)
 if 'isAuth {
        set tSC=##class(%SYS.OAuth2.Authorization).GetAccessTokenClient("EpicFHIRPOC", "*",, .error)        
         set isAuth=##class(%SYS.OAuth2.AccessToken).IsAuthorized("EpicFHIRPOC",,,.accessToken,.idtoken,.responseProperties,.error)
    }

To save time, I was thinking of just creating a BS that goes out and gets the Authorization Token every hour.

3
0 79
Question Scott Roth · Dec 26, 2025

I am trying to centralize our FHIR queries into a single BP object that would send the FHIR query to the EMR, interpret the response into a %Persistent structure that could be sent back to the requestor. In theory it seemed like it would work but I am running into an issue..

"Warning on Message body 5@osuwmc.Epic.FHIR.DataStructures.PatientSearch.Record'
/ 229 because Status 'ERROR <Ens>ErrException: <PROPERTY DOES NOT EXIST>Transform+3 ^osuwmc.Scott.FHIR.DemoOutboundHL7Message.1 *DocType,osuwmc.Epic.FHIR.DataStructures.PatientSearch.Record -- logged as '-'
number - @'

3
0 70
Question Scott Roth · Dec 17, 2025

Using a Workflow Task within HealthShare Provider Directory, when a user clicks on Resubmit message within my Business Process, I check the status of the response. If the response is "Resend Message", I have my Business Process executing the following...

 set tSC = ##class(Ens.MessageHeader).ResendDuplicatedMessage(context.SessionID)
 if $$$ISERR(tSC) $$$LOGSTATUS(tSC)

the context.SessionID is the Session ID of the message as it is being pass thru the Business Process. Does anyone see why that would not work off hand?

3
0 70
Article Andrew Sklyarov · Nov 8, 2025 4m read

When I started my journey with InterSystems IRIS, especially in Interoperability, one of the initial and common questions I had was: how can I run something on an interval or schedule? In this topic, I want to share two simple classes that address this issue. I'm surprised that some similar classes are not located somewhere in EnsLib. Or maybe I didn't search well? Anyway, this topic is not meant to be complex work, just a couple of snippets for beginners.

0
0 127
Question Kurro Lopez · Oct 21, 2025

Hi community,

I have a service that uses EnsLib.RecordMap.Service.FTPService to capture files in an FTP directory.

Instead of uploading them all at once, I would need to do so one at a time.

I have a class that extends this class because it preprocesses, saves everything in the RecordMap class, and then processes all the records at once.

When I invoke the BP, it does so through the method set tStatus = ..SendRequest(message, 1).

I've set the SynchronousSend flag to 1, but it continues processing all the files at

1
0 83
Article Sanjib Pandey · Sep 26, 2025 19m read

Introduction

HL7 messages often contain multiple repeating segments such as NTE, AL1, OBX, ZTX, DG1, and others. These segments sometimes require individual processing and routing to different downstream systems. This technical paper introduces a configurable template designed to automate the splitting of these repeating HL7 segments, improving message handling and integration efficiency.

3
0 147
Question Toni Crooz · Jul 27, 2025

Hi all,

I’m working on a data transformation in IRIS where I need to calculate the difference in hours between two timestamps stored as %TimeStamp.

Example:

Set startTime = "2024-07-12 08:30:00"
Set endTime = "2024-07-12 15:15:00"

I’d like to calculate the number of hours (with decimals, like 6.75) between them. What's the recommended way to do this in ObjectScript? I’ve seen examples using $ZDATETIME, but I’m not sure if that’s the cleanest approach.

Any suggestions or best practices would be appreciated!

Thanks,
Jhonn Marie

3
0 166
Question Laura Blázquez García · May 16, 2025

I'm creating a Business Process that:

  1. Transforms one object into another using DTL
  2. Sends this object to an operation
  3. Transform the object obtained in first point into another one using DTL
  4. Sends the second object to an operation

The Business Process is created with BPL, and objects are stored in BP context. When I execute this Process, in the 3rd point the object obtained in first transformation doesn't exist. It's empty.

6
0 143
Question Juan Mota Sanchez · May 3, 2025

Hi,

I've been working on a very basic Interoperability production in my computer. I followed one of the examples in the courses and created a TEST.FileRouterRoutingRule, but when trying to edit this rule, it takes me to the Rule Editor Login Page, where I can't get in (Not even with the _SYSTEM credentials) - Is this functionality unavailable in the community edition?

2
0 144
Question Gary M Lusso · Apr 18, 2025

 

I need a DTL to handle this.

Any ideas appreciated.

For all Prosthetics orders:
when ORC-1(Order Control) is "NW" (New Order), need to update OBR-18(Placer Field 1) based on PV1-2 (Patient Class) value.
assumption is that the selection logic is that all prosthetics orders with OBR-18 field is always blank.
Description :
If PV1-2 is I, insert I in OBR-18
If PV1-2 is O, insert O in OBR-18
If PV1-2 is E, insert O in OBR-18
If PV1-2 is P, insert O in OBR-18
If PV1-2 is R, insert O in OBR-18
If PV1-2 is B, insert O in OBR-18

2
0 207
Article lando miller · Mar 31, 2025 2m read

Prompt

Firstly, we need to understand what prompt words are and what their functions are.

Prompt Engineering

Hint word engineering is a method specifically designed for optimizing language models.
Its goal is to guide these models to generate more accurate and targeted output text by designing and adjusting the input prompt words.

0
6 188