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
InterSystems Business Process Language (BPL) is a language used to describe executable business processes within a standard XML document.
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.
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 extends , 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 in the BPL code activity?
Any guidance or insights would be greatly appreciated!
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.
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.
I have a message class define. But sometimes the RelatedItems fields is not returned.
Parameter %JSONIGNOREINVALIDFIELD As BOOLEAN = 1;
Property RequestedTerm As AH.AHLIB.Custom.Symedical.Message.PostRelationResponse.termsRequested;
Property RelatedItems As list Of AH.AHLIB.Custom.Symedical.Message.PostRelationResponse.RelatedItems;
Respnse normally will return someting like this,
.png)
on ocassion the RelatedItems are not returned
have response context variable defined as the custom message type
How do I check in a BPL if there is no RelatedItems in the response?
I'm pretty new to ensemble.I'm working on a BPL process where I need to retrieve a result set from an SQL activity, loop over the results, and call a web service. I'm having trouble passing the request parameter(Labtype) into the SQL query for the WHERE condition .Can any one suggest how to loop over the result set as well.Any suggestions on how I can achieve it?
Hello,
I have a problem attempting to store a base 64 encode stream into the OBX:5 field of a HL7 message, by using the StoreFieldStreamBase64 method.
I'm using a transformer to input the contents of a pdf within a stream container (Ens.StreamContainer). The output is a HL7 message (EnsLib.HL7.Message 2.5:ORU_R01).
The transformer is being used in a business process.
This is the code used in the transformer to encode the stream to base 64:
Try {
Set pdfStreamObj = source.StreamGet()
} Catch {
Quit
}
//Set PDF stream object into OBX:5
Set status = target.
Hello,
First of all; thanks for your time reading this post, and thanks for your answers and help. I am really grateful.
We have the following need: Send a DICOM Find Document to get the complete list of a patient's studies from an Outbound System, which we simulate with the tool called "dcm4che" specifically with these two commands:
1º.Initialize a DICOM database in simulator. We will use this database to run queries using DICOM C-FIND commands:
/dcmdir -c ./shared/DICOMDIR --fs-id SAMPLEDICOMS --fs-desc ./shared/dicom/descriptor .
Hello Community,
I am working on creating a FHIR bundle with Practitioner resources inside of a BPL business process. Data source is a cache database table containing business partner data objects.
Part of the implementation is a loop over all new or updated data objects. For each element a SAP call is made to retrieve more information and add it to the target resource. As there was no last run on first start, approx. 130000 objects are initially to be exported. After the first run, there would not be more than 100 to be updated on each run.
Hi Interoperability experts!
Recently noticed an interesting conceptual discussion in our Interoperability Discord channel to which I want to give more exposure.
All we know that typical InterSystems Interoperability production consists of the following chain:
Inbound adapter->Business Service->Business Process->Business Operation->Outbound adapter.
And Business Process (BO) here is always considered as a passive "listener" either on port/folder/rest API for an incoming data.

I usually receive complains from our customers about the BPL and DTL web pages automatic refreshes, it's a common problem among newbies users but for veteran developers too, they forget to save the changes regularly and automatically the web page is reloaded, losing all the work done.
Maybe an autosave would fix this problem that produces a deep feeling of hate and resentment against InterSystems technology among our customers. I've added an idea in our portal, so feel free to vote it!
Hi Community ,
I am using %Date Property for defining one csv source message class .Please refer below class
Class CSVtoHL7. Inputfile.Record Extends ,(%XML.Adaptor, Ens.Request, EnsLib.RecordMap.Base) [ Inheritance = right, ProcedureBlock ]
{
Property ID As %Integer;
Property LastName As %String;
Property FirstName As %String;
Property MiddleName As %String;
Property DOB As %Date;
Property Gender As %String;
}
Please refer to data transformation class
XData DTL [ XMLNamespace = "http://www.intersystems.com/dtl" ]
{
<transform sourceClass='CSVtoHL7.Inputfile.Record' targetClass='EnsLib.HL7.
Hi community,
I am trying to map <assign value='source.{ORCgrp(1).RXE:7.1}' property='target.{ORCgrp(1).RXE:7.1}' action='set' /> in data transformation
My input value for source RXE isRXE:7.1 will be like Keep orders~New orders ~ ~ new orders
After mapping i am getting only First repetition value i,e is only Keep orders value
I have tried using $EXTRACT like this <assign value='$EXTRACT(source.{ORCgrp(1).RXE:7.1},1,*)' property='target.{ORCgrp(1).RXE:7.1}' action='set' /> in data transformation still getting First repetition value in target message
How to get full 7.
Hi All,
If I remember it correctly there is a functionality in IRIS to make this possible.
I've got two incoming Business Services of files from different sources.
BS1: An Ens.StreamContainer with some info and metadata which point to a specific file. Ens.StreamContainer will be send to a BP.
BS2: The files where the metadata points to. It's in the Ens.StreamContainer
But dependent on the flow the file could be later available on BS2. So I want the BPL to wait for the file to arrive at BS2.
Then in the BPL I want to do some merging stuff with the 2 Ens.
Hello,
I want to add a couple of properties to a custom Transform class to give the user the ability to edit its properties directly in the Business Process visual editor. It can be easily done with other Production components, but I can't find in the documentation how to do the same with my Transform. Is it possible?
And another question is about how to use the 'aux' parameter of the DataTransform.Transform method if my component is non-visual?
Is it possible to hide certain properties in a class from displaying in the BPL visual editor, if you want to prevent drag and drop from accessing them or otherwise controlling or restricting their behavior?
Virtual document messages, such as EnsLib.HL7.Message, have hidden fields, such as Source, that do not show, presumably since the field list is rebuilt from the document schema. Setting the flag Internal, or XMLPROJECTION = "NONE" doesn't do it. Trying to follow the Virtual Document precedent to rebuild or edit the field list seems like a heavy list.
I have a production with a HLv2 HTTP Listener. For demo purposes, I need to send HL7 messages directly from a browser. Here is an example (React/typescript):
const message = "MSH...";
const args: RequestInit = {
method: "POST",
mode: "no-cors",
body: message
}
const response = await fetch(IRIS_SERVER_HL7_HTTP, args);
// await checkResponseAsync(response);
return await response.text();
I had an interesting scenario come up, as when we moved from eGate to Ensemble and we will be moving to IRIS here in the near future I was taught to create Business Processes for writing to and extracting data from outside MS SQL Databases.
That works ok for simple messages but I have a case where I have a rather large MFN message coming in from a vendor. The normal Business Process of reading in the HL7, and parsing the message into Stored Procedure structure calls has worked in the past with smaller messaging like ADT, etc.
Hi,
we get HL7 MDM messages with embedded PDF documents that are Base64 encoded. When the embedded PDF document exceeds the size of 3.6 MB the following error occurs:
FEHLER <Ens>ErrBPTerminated: BP Main HL7 MDM # wird wegen folgenden Fehlers beendet: FEHLER #5002: Caché-Fehler: <MAXSTRING>zgetAtFromArray+46^EnsLib.HL7.Segment.1
> FEHLER #5002: Caché-Fehler: <MAXSTRING>zgetAtFromArray+46^EnsLib.HL7.Segment.1
In other posts I read that you can avoid these errors, if you use the data type %VarString instead of normal %String.
Hello, I want to show a fellow DC member how to convert JSON file into HL7 message. I personally do not work with HL7. I set up a production with EnsLib.File.PassthroughService. It passes Ens.StreamContainer to BPL process. I call a DTL to transform StreamContainer to HL7 message. I run into an error:
ERROR <Ens>ErrBPTerminated: Terminating BP JSON2HL7 # due to error: ERROR #5035: General exception Name 'Parsing error' Code '3' Data ''
> ERROR #5035: General exception Name 'Parsing error' Code '3' Data ''
The code is in this GitHub repo:
Hello,
I want to generate and return an http response based on the input of a http GET request. For my first steps I used an EnsLib.Http.GenericService, which uses an EnsLib.HTTP.InboundAdapter to receive requests like http://[my server]:[my-port]/some-path?ID=12345678.
On the inbound side I receive a EnsLib.HTTP.GenericMessage Object which contains the parameters and some other useful information that I can work with. What I would like to do now is to create a simple HTML page, which contains some Information specific for the given parameter values.
Hello, I am writing some cache code that will pick up a PDF file, Base64 encode the contents and then send on to a third party system within a Long String (via their API). I have been testing this and discovered that the PDFs do not open within the supplier system (I get an error saying that it hasn't been decoded correctly). I wanted to prove that the issue does not lie with the way that I have Base64 encoded it within Ensemble, and therefore as a test wanted to Encode the PDF stream, then decode the stream and write out to a new file.
Hello guys,
i try to call a Operation within 3 foreach loops.
When i try to do this, i always get the following error:
I dont get any Errpr when i log my request message at this time i want to call a operation.
Everything works and i get no error. But when i try to call the operation i get this error.
Then i tried to call a operation in the first Level (not in a ForeachLoop) it works.
I simply call the operation with the RequestMessage from my Service.
When i now try to copy this call into the third Level (within 3 foreachloops) Then i also get this error.
I dont know what i am doing wrong.
This article will describe and include an example of how to embed an external PDF file into an HL7 segment, specifically ADT_A01:2.3.1 OBX(). This can be useful when attempting to insert pictures or other external data into an HL7 message. In this example, the name of the PDF file to be embedded is provided in the incoming HL7 message in OBX(1):ObservationValue field.
The basic stipulations for this example are as follows:
Using EnsLib.File.
Hi community,
I am working on Converting Non HL7 message (Using record maps) into HL7 message.
1.Can anyone share few details how to save Non HL7 message into SQL table and the converted HL7 message into SQL table
2.In Message Viewer is there any SQL tables are linked to the session id or where the information regarding the message will be stored? Will the message trace details are stored in globals or in SQL table,If yes can anyone share the details in which tables or globals will it be stored?
.png)
Joe
Was wondering if anyone had a simple way of calling ##class(Ens.Director).EnableConfigItem() within a Business Process or adding code to a Custom Service to start or stop the object?
The use case is that I have a Process that uploads a file into a external SQL table. When it is finished I want it to kick off another Service that does the processing of the data that it just uploaded. Once it is finished the response is sent back to the service and when the service receives the response from the process, I want to stop that service from running.
so.
Hi Community,
I am working on sending Gmail with error details when any errors occurs in the ensemble production.
I am facing the below issues while doing it
1.I have Ens.Alert (Business process) using the class Ens.Alerting.AlertManager and Emailoperation (Business operation) using the class EnsLib.EMail.AlertOperation. here my business process is not sending the Alarm request to business operation eventhough i am using rule to connect the business operation
2.What are SMTP server details needs to given for Gmail?
Please let me know how to resolve these issues
Thanks,
Smythee