In a Business Process (Ens.BusinessProcessBPL), how can you correctly call a classMethod?
I know we can call it in a block <code> :
Or in a <assign>
.png)
Are there other ways and/or good practices?
Thanks
Corentin
InterSystems Ensemble Business Process Language (BPL) is a language used to describe executable business processes within a standard XML document.
In a Business Process (Ens.BusinessProcessBPL), how can you correctly call a classMethod?
I know we can call it in a block <code> :
Or in a <assign>
.png)
Are there other ways and/or good practices?
Thanks
Corentin
I want to execute initialization code on the start of my business process.
I thought OnInit is a way to go, but apparently not - ^dbg global remains empty:
Class Test.BP Extends Ens.BusinessProcess
{
Method OnInit() As %Status
{
Set ^dbg = 1
Quit $$$OK
}
}Ideas?
Our TEST environment and PROD environment are on two different versions of HealthShare Health Connect.
| TEST | IRIS for UNIX (Red Hat Enterprise Linux 8 for x86-64) 2024.1 (Build 267_2U) Tue Apr 30 2024 16:06:39 EDT [HealthConnect:7.2.0-1.r1] |
| PROD | IRIS for UNIX (Red Hat Enterprise Linux 8 for x86-64) 2022.1.4 (Build 812_0_22913U) Thu Dec 7 2023 17:06:30 EST [HealthConnect:3.5.0-1.m1] [HealthConnect:3.5.0-1.m1] |
Someone within the group wants to migrate a BP from TEST to PROD, however they are running into an error "attribute 'languageOverride' is not declared for element 'assign
Hello,
First of all: thanks for your help, and thank you for your time.
Thanks for your time.
We have the following situation:
We are in a BPL, and we have defined 4 <call> asynchronous as follows:
First one name: "Enviar a Proceso NEGRIN"
The second one, named as: "Enviar a Proceso HUNSC"
The third one, titled: "Enviar a Proceso CHUIMI 02"
And the fourth and last one names as: "Enviar a Proceso Fuertev"
Inmediately after the 4 calls, we have a <sync> instruction which should wait for all of them to finish.
It has in the calls text area the name of the four ones which i
.png)
I have a BPL iterating over Dynamic arrays. Can I add Dynamic Array (%Dynamic Abstract Object) and also %Iterator.Array to BPL context? I tried and I see Error: %AddToSaveSet method does not exist for %Iterator.Array
I have been trying to track down an issue we are seeing in our TEST environment with Memory usage.
We have Several BP's for years now that take a HL7 message, parse it apart, and make calls to a Custom EnsLib.SQL.OutboundAdapter to have it execute Insert/Select/Update/Delete stored procedures against a MS SQL Database via JDBC connection. We are using Microsoft's JDBC 12.2 driver to do this.
What we are seeing is that IRIS.WorkQueue globals are being defined for these calls but then the IRIS.WorkQueue is not being cleaned up and taking up large amounts of Memory.
I have tried ensuring the c
<> <> # IRIS-API-Template
zpm "install iris-rest-template"
Make sure you have git and Docker desktop installed.
git clone https://github.com/samuelxabc/IRIS-API-Template.git
docker-compose build
docker-compose up -d
I am still trying to understand and come up with a use case to use FHIR as an enhancement to our existing HL7 messages. Does anyone have an example of taking a FHIR response and transforming it into a SDA?
How does the workflow go? Does it go through 1 BP?
Thanks
Scott
Hello.
I have a business process with an "ASTM" class :
Inside this process i have a business rule. Inside this rule i want to get a specific field inside the message :
So i will use the same logic for HL7 messages. Here is the "path" to the segment and the field :
So i will use this inside the routing rule like i did for HL7 messages.
i have tried MUCH prefix like "ASTM" "X12" "ESI.X12" ..... I only got errors like << PROPERTY DOES NOT EXIST >> .png)
Can someone tell me what i'm doing wrong ?
Thanks.
Thomas.
I have this response, which is a FHIR location resource in a bundle. I would like to load the entry(0).resource into a context property defined as HS.FHIR.DTL.vR4.Model.Resource.Location so I can use it as a source in a DTL. Any help would be greatly appreciated. Thanks.
{"entry":[{"fullUrl":"https://dev-api.hosp.org/idkl/fhir/r4/v1/Location/ATH-1375-PRV-a-1375.D…","resource":{"extension":[{"url":"https://api.hosp.org/idkl/extensions/StructureDefinition/is-messaging-e…","valueBoolean":true}],"id":"ATH-1375-PRV-a-1375.Department-2","identifier":[{"system":"urn:asc:idkl:ATH:13
Does the assign action not work? Why doesn't MSH:7 get updated to the current DT?
.png)
As I begin our adventure into using an External FHIR Repository, I wanted to see what opinions people have about a design Idea I was working on.
I want to create a way that my Team has the ability to send a Message Type, and the system knows from that Message Type which FHIR queries to execute and return the Response back to the user, sort of like a FHIR Query Hub. Does this sound reasonable?
While I know that it can be done directly in Object Script, I was trying to incorporate using a Business Process, and Operation for the Trace elements, since most of my team develops within the Managem
In a HL7 Business Rule, I want to create a custom function that works on an HL7 message object (ENSLIB.HL7.Message). I extended the Ens.Rule.FunctionSet class, and have a class method that accept a ENSLIB.HL7.Message obj -
ClassMethod myfunction(msg As EnsLib.HL7.Message) As %Boolean, so I can call myfunction(HL7) in the rule's condition
The problem is, it seems that I can only use absolute property paths such as msg.GetValueAt("1:9.2") but not a path containing HL7 segment name, for example as in msg.GetValueAt("MSH:9.2"). This is a huge limitation.
Is there anyway to use the HL7 vd
Hi
We have a use case whereby very large HL7 MDM messages, which contain many OBX segments, need to be processed by a custom business process. Part of the process is to iterate over each OBX segment and set a value in the same field for each segment.
Testing with a message that is ~500MB and contains over 8000 OBX segments I've encountered <STORE> errors, which surprisingly seems to be due to using SetValueAt. It appears to get through a few thousand segments before it falls over with the memory error, which I assume is because the SetValueAt method keeps in memory each preceding OBX segment
We have a business process that seems have extra jobs hanging around. This is what we see in the Jobs tab:
.png)
Only the bottom one is actually associated with a process. So what are those other ones? There are no queues and I have no way of finding out why they're there.
Thanks.
IRIS for UNIX (Red Hat Enterprise Linux 8 for x86-64) 2024.1 (Build 267_2U) Tue Apr 30 2024 16:06:39 EDT [HealthConnect:7.2.0-1.r1]
I have a use case where Epic is sending an A60 Allergy transaction is set at the Patient level, but we have a system called VIBE which needs the ADT at an Encounter level instead. Currently we store ADT information in a MS SQL database for years, and we are querying it to get the latest Account Number to insert into the ADT^A60 for VIBE.
This MS SQL Visit Database was built over 20 years ago and is quite cumbersome to keep maintaining. I would like us to move aw
I have an API that does not have all the data. Like it is truncated. Magic number of characters seems to be 163,280
I do an <assign>
context.RawBundle=##class(%DynamicObject).%FromJSON(context.FHIRResponse.Body)
The error does not happen when the response is < 163,280 chars. And when < 163,280 chars, it is a complete FHIR Bundle. Have anyone experienced this? If so, what is the resolution?
.png)
BPL stands for Business Process Language.
This is an XML format for describing complex information orchestration interactions between systems.
InterSystems Integration engine has for two decades, provided a visual designer to build, configure, and maintain, BPL using a graphical interface.
Think of it like drawing a process flow diagram that can be compiled and deployed.
BPL components are added to Integration productions like any other built-in or custom business component.
Test example input and output
There can be a mixed reception

Hi all,
When making a Business Process reusable, I needed to make the target of a <call> configurable as a business host setting. This can be done through indirection. Here's how:
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?
Hi,
Is there a way to send certain message based of source into top of the queue of business operation.. so that that message will processed right away.
Hi Community,
What is Defination of XData which we use using in Object script
we are using XData MessageMap and XData DTL
How can we use XData for different functionalities
Thanks,
Joe
Hi there,
I'm working on a project where I retrieve RawHL7 message(ORU R01 2.3.1) content from a database in a BPL. I've created a context object of type Enslib.HL7.Message, and I need to populate it with the contents from the RawHL7 message so that I can use this context object as source for my DTL transformation.
Does anyone have suggestions on the best approach to achieve this? I'm looking for guidance on how to efficiently transfer the data from the RawHL7 message to the context object.
Thanks in advance for your help!
Hi,
How can I effectively unit test a Business Process Language(BPL) that incorporates three code activities calling methods from distinct ObjectScript classes?.
Appreciate any insights or examples.
Thanks,
Nimisha
Hi community.
I have an API that is deployed in my production (business service) and it calls to a business process to retrieve the information that is requested.
The problem that I have is that the calls are queued and it's creating a bottleneck
.png)
The business process is taking more time than needed.
Is possible to configure the BP to process parallely the requests?
I'm thinking to increase the pool parameter, but I'm not sure if it's a good idea.
Best regards
Ran into an issue this morning, that I am having a hard time trying to track down what might have caused the issue. We have a Business Rule that sends HL7 ADT to a Business Process that inserts the data into a MS SQL Server using a Custom Business Operation (SQL Outbound Adapter).
Early yesterday morning the Custom Business Operation reset its connection through the Java Gateway Server to the MS SQL Database, when it reconnected to the Java Gateway/MS SQL Database it stopped processing. So, the Business Rule had over 40,000 queued up to process. There was no indication of an issue by looking
Hi ,
I'm currently working on a BPL (Business Process Language) in InterSystems Ensemble, and I'm facing an issue when trying to call the SendRequestSync() method within a code activity. My understanding is that SendRequestSync() is part of Ens.BusinessProcess, and since Ens.BusinessProcessBPL extends Ens.BusinessProcess, I believe it should be accessible.
However, during compilation, I'm encountering an error stating that the method doesn't exist in the class.
Am I missing something here? Is there a specific way to access SendRequestSync() in the BPL code activity?
Any guidance or insight
Hi,
I'm currently working on a Business Process Language (BPL) project where I'm using ##Class(%SQL.Statement).%ExecDirect to execute a SQL query. The query returns more than one row, and I'm facing an issue in handling the result set.
<property name='tResult' type='%SQL.StatementResult' instantiate='0' />
I'm setting the result of the query to context.tResult, but the loop through the result set processes only a single row. I need assistance in correctly setting up my context property or any other approach to iterate through all the rows returned by the query.
Thank you in advance
I have created a BPL to process a file and create a lookup table. I am looking to add logic to use the original filename so that I can use a single BPL to create multiple tables. How can I access the original filename within a BPL?
How do we trigger a BPL Business Process on a time schedule?
We are building a production that takes a steady stream of (HL7) lab results messages, processes them and stores them in a temporary database table. At scheduled points during the day (eg 0800, 1300, 1600) the database is queried and messages sent on to the downstream system. Aiming that the Processes to be implemented in BPL if possible - but we are having trouble triggering code in a BPL as a scheduled job.
We can get an ObjectScript class method to be run via the Task Manager - but we are not clear how to pass control into the B
.png)