#Business Process (BPL)

4 Followers · 229 Posts

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

Documentation.

Question Larry Pinsky · Jan 20, 2021

I have a BPL that calls a business service (actually does lots of other things unrelated to my question).  We receive an acknowledgement back containing data that is processed in the BPL and sent to the source system. The process of sending to our downstream system "A" and receiving the response takes about 20 seconds per transaction (very slow on system A's side).  Due to this slowness, we end up with a backlog close to 1000 messages by the end of the workday.

Is there a way to make this multi-threaded so we can send many messages to system A?

4
0 666
Question Scott Roth · Jan 13, 2021

I have a case where our EMR is sending data, but not all the values needed for the Ancillary are valued properly and causes that message to error/halt processing on the Ancillary system, not ideal but its what they do. I would expect them to still process the message except that 1 field, but they don't.

I want to add validation to make sure certain fields are valued correctly for the Vendor. 

So I add some statements to take those items that don't pass this validation out to a batch file with headers.

But I want to email out that batch file.

9
0 1126
Question Scott Roth · Dec 7, 2020

I have a case where I need to look up the NPI provider against an External MS SQL database to retrieve our Provider Identifier to send to a downstream system. In the past I would use a Business Process (BPL) to connect to the outside MS SQL via JDBC and get that information for me. But I was thinking instead of creating a BPL process to do this, would it be better just to link to the outside MS SQL database table to retrieve the information in a SQL statement within a DTL?

So it is better to link to an outside database via a Linked Table wizard?

3
0 389
Question Scott Roth · Oct 19, 2017

We are trying to convert some of our SQL Service Integration Service jobs from Visual Studio to Ensemble. If we execute a Stored Procedure within SQL Server Management Studio it is returning approx 12,000 rows. However when Ensemble executes the same Stored Procedure it is only returning 250 rows.

Is there a limitation to EnsLib.SQL.Snapshot?

This is how we are calling the Stored procedure

Method uspInterfaceEnsSelectPER355MC(pRequest As osuwmc.SSIS.DataStructures.InputPER355MC, Output pResponse As EnsLib.SQL.Snapshot) As %Status
{
Set SPQuery = "{ ?= call dbo.usp_Interface_Ens_Select_PER355MC()}"

4
0 1002
Question Igor Titarenko · Jul 30, 2020

Did anyone run into this error when stopping a Production from Ens.Director?

Ens.Director::StopProduction => ERROR <Ens>ErrProductionNotQuiescent: IRIS can not become quiescent

It happens sporadically when an automated unit test from a class that extends %UnitTest.TestProduction runs a test on a Business Process. I already increased the parameter MAXWAIT to 30 seconds, but the error still happens.

4
0 719
Question Yone Moreno · Jul 15, 2020

Hello,

We would need to know the Ens.Response SourceConfigName to identify which Operation has raised an exception.

We have tried:

$$$LOGINFO("..%Process.%PrimaryResponseHeader.SourceConfigName..: "_..%Process.%PrimaryResponseHeader.SourceConfigName) //It outputs an empty string
 
$$$LOGINFO("response.SourceConfigName: "_response.SourceConfigName) //It generates an exception

 

We would need to get from an Ens.Response which body is null, its SourceConfigName:

How could we know it? 📛

2
0 490
Question Melyssa St-Hilaire · Jul 10, 2020

We have a bunch of CSV files of a few different types, which contain patient and medication data, among other things, which we need to load into Healthshare, so the information can be compiled together and then viewed from the Clinical Viewer/reports made on the data as well.

I cannot find a straightforward example or any documentation about this particular case, which I would expect to be fairly common. All I could find was this: Using a Record Map in a Production When you choose to generate an object class on the Record Mapper page, you create a class that you can use in a business service

3
0 728
Question Goran Stefanovic · Jul 6, 2020

I need to set and use some context variables in a transformation (written in DTL), but the code is manually written.

When writing the same as BPL I define context variables and they are visible in transformations called by that process.

In something like this my.DTLtransform sets HL7 message fields to values in context variables:

Set dtl = ##class(my.DTLtransform).%New()
Set qStatus = dtl.Transform(pRequest, .msg)
 

However, when I create a business process using custom code option, I don't see an obvious option, as well as documentation covering that area.

11
1 983
Question Tim Miller · Jun 9, 2020

So we have a custom business service that we use and we are calling SendRequestSync.

Set tSC=..SendRequestSync(tOneTarget,tTargetStream, .tResponse)

For our response from our custom business operation, we send back an Ens.StringResponse.

set pResponse = ##class(Ens.StringResponse).%New()
set pResponse.StringValue = "File Delivery: "_tOutFilename_" of size: "_pRequest.Stream.Size_" (modified='"_pRequest.Stream.LastModified_"')"_" Status: "_tSC
 

So now we are trying to use Rules to pass the the messages to certain destinations with a normal business process of EnsLib.MsgRouter.RoutingEngine with

3
2 630
Article Yuri Marx · Jun 17, 2020 1m read

In 2017, Forbes published an article talking about API Economy (see: https://www.forbes.com/sites/louiscolumbus/2017/01/29/2017-is-quickly-becoming-the-year-of-the-api-economy/). This article was the trigger to popularize the use of API and API Management by large companies. The article published a maturity model. My understanding is that Intersystems IRIS allows you to reach the top of the pyramid with your current technologies. See the figure above.
For this it is important to combine % CSP.REST package, IRIS API Manager (IAM), ML Pack and IntegratedML, Native API for Python, BPL and

0
2 590
Question Simon Barker · May 29, 2020

I've got a REST service that I can access via a browser. I can get it to take HTML tags as data and display it back to me (so I know the REST part is working). So if I send it this:

http://MyServer:57772/TestArea/rest/TestQuery?UUID=1&RTX=RTX123456&CareType=Palliative
 

Then I can pick out the data and tell it to display in the browser, which is great but what I really want to do is put the data into a string and send to a business process that will do lots of looking up but eventually return a URL that my REST service will then redirect the browser to.

Been trying to follow advice from here but

5
0 542
Article Tani Frankel · Jun 4, 2020 10m read

In this article I'd like to share with you a phenomena that is best you avoid - something you should be aware of when designing your data model (or building your Business Processes) in Caché or in Ensemble (or older HealthShare Health Connect Ensemble-based versions).

2
0 500
Question Mark O'Reilly · Mar 23, 2020

I am developing a BPL with a delay process. 

The problem I have is when a message is delayed I cannot see a job id so whilst a job is in halt status I cannot see how i can then cancel the message? It obviously doesn't show up in queues as it isn't active either. 

Am i missing something?

 BPL Halt

 

4
1 650
Question Yone Moreno · Mar 27, 2020

Hello,

We are developing a BP where we would need to call at the same time to get appointments in two external systems. So then, we would need two threads, one for primary care appointments, and other for specialist appointments . We need to paralelize both calls because of both of them require some time and we would need to shorten it as much as possible.

We are currently using a flow:

And inside the flow we have two sequences, the first one for specialists appointments, where we get them with a rest operation, then transform the json string to a object, and then we convert it to match the

3
0 386
Question Eduard Lebedyuk · Mar 4, 2020

I want to send requests from custom BP with timeout and be able to understand that timeout event happened.

I thought that I need to implement OnTimeout method in my process (in either caller or callee), however it seems like OnTimeout  is never called.

Let's say we have this parent process:

Class Timeout.Parent Extends Ens.BusinessProcess [ ClassType = persistent ]
{
Method OnRequest(pRequest As Ens.StringContainer, Output pResponse As Ens.StringContainer) As %Status {
    set sc = ..SendRequestSync("Timeout.Child", pRequest, .pResponse, 5)
    if ($$$ISOK(sc) && ('$isObject(pResponse))) {
2
0 851
Question Larry Pinsky · Feb 28, 2020

I have a code block in a BPL.  I have the below SQL and code.  All variables have been declared and set.  When I run the SQL, if there are no values returned, I get 100 for the value of SQLCODE when I perform the FETCH, which is correct.  If values are returned, I get a -400 error when I perform the first FETCH.  I've investigated, but cannot find the reason for a -400 error.  Hoping someone out here understands this and knows what's wrong.


   &sql(DECLARE D1 CURSOR FOR SELECT A.SHIPMENTTRACKINGNO, A.SERIALNO, A.CDWACCNO, A.CDWINVOICENO, A.CDWORDERNO, A.CDWPARTNO INTO

2
0 2094
Question Mikael Toivonen · Feb 23, 2020

In a HTTP operation, which extends Ens.BusinessOperation, EnsLib.REST.Operation, one can read the component's AlertGroups property by simply referring to it with "..":

set AlertGroup =  ..AlertGroups//Do something with AlertGroup

 

"AlertGroups" is a property of Ens.Host. The above however  does not work in a business process which Extends Ens.BusinessProcessBPL which extends Ens.BusinessProcess which extends Ens.Host. Can this property be read from inside the business process and what would the syntax be? 

As the end result I would like to include the component's AlertGroups property's value

2
0 315
Question Larry Pinsky · Feb 6, 2020

I have two files that I ultimately need to combine.  The first file contains data from a PO.  The second file contains tracking information.  What I thought about doing was create a BS that grabs the first file, loads it into a record map and transfers it to a BPL.  Then, the BPL would open the second file where I would write code to load the file into a second record map and then insert the tracking information to the correct places in the first file based on PO line items.

First, is this the best approach? Second, how do I open the second file in the BPL?

3
1 415
Announcement Amir Samary · Jan 29, 2020

Hi everyone,

I am very pleased to announce that the Readmission Demo has been released as open source. Many thanks to the Solution Factory team that worked hard on making this possible.

Here are the changes:

  • It is now running on top of IRIS Community 2019.3.0.308.0.
  • It has synthetic data based on Synthea instead of the real data we were using before. But the machine learning models are 100% real
  • Image RRLACESrv has been renamed to “image-riskengine”
  • Image “readmissionsrv” has been renamed to “image-risksrv"
  • We refactored a lot of the code on image-riskengine to look better.
0
2 611
Question Scott Roth · Jan 10, 2020

I am working on a BPL to take data from a MS SQL database and create an HL7 Materials Message for our EMR.  I have done this plenty of times in the past however I am running into an error.

"Remote Gateway Error: JDBC Gateway SP execute(0) error 0: Access to the remote server is denied because no login-mapping exists."

What is confusing is that this BPL doesn't differ from any of my other BPLs in connecting to MS SQL Server. I know I am missing something..

This BPL will execute the 1st Stored Procedure without any issues, the issue is when it comes to executing the second stored procedure.

Any

3
0 853
Article Eduard Lebedyuk · Dec 17, 2019 3m read

This series of articles would cover Python Gateway for InterSystems Data Platforms. Execute Python code and more from InterSystems IRIS. This project brings you the power of Python right into your InterSystems IRIS environment:

  • Execute arbitrary Python code
  • Seamlessly transfer data from InterSystems IRIS into Python
  • Build intelligent Interoperability business processes with Python Interoperability Adapter
  • Save, examine, modify and restore Python context from InterSystems IRIS

Other articles

The plan for the series so far (subject to change).

0
0 569
Question Shameer Sulaiman · May 11, 2018

Hi,

I am sending a request message to Business Process which has one property as Dynamic Object type. So i get the JSON in my REST service and convert that as a dynamic object and set that in the request message and calling the business process from the business service. But the request is not getting sent to the Business Process. Is it possible to send dynamic object input to the business process.

18
0 1053
Question Everardo Cunha · Sep 25, 2019

Greetings,

I am trying to test an hl7 message inside studio and when I click on the test button I get this error:

"<FUNCTION>GetProp+2^%CDCalBk"  at  9:51 am.   $I=/dev/null:50333010   ($X=0  $Y=54) $J=50333010  $ZA=0   $ZB=""   $ZS=65536 ($S=66023400)

I have never seen this before! Any suggestions?

Here a simple test message:

MSH|^~\&|TESTRAD|ABC|RADIOLOGY|WYZ|20190715125605||ORU^R01|20190715125605|T|2.3
PID||123456788^^^EPIC^PMRN|1234567890^^^EPIC^PMRN||TESTING^TWO||19780422|F
PV1||OUTPATIENT|||||^^^SMITH^^^^^PHS^^^^PRN
OBR|1|776565|A44444|CT.TH.CHESTSC/R^CT CHEST LUNG CANCER SCREENING

2
0 394
Question Eduard Lebedyuk · Sep 8, 2019

I'm writing "Finder"-like dialog and need to get list of BPL classes.

The query is dependent on current "path" - it outputs all BPLs in the current path (if any) and all sub-packages which contains BPLs.

So far I have this query:

Query getBPL(path, needPlus = {(path'="")}) As %SQLQuery
{
SELECT DISTINCT $PIECE(Name, '.', 1, $LENGTH(:path, '.') + :needPlus) Name
FROM %Dictionary.ClassDefinitionQuery_SubclassOf('Ens.BusinessProcessBPL')
WHERE Name %STARTSWITH :path
}

My problem is, if I'm not in "root" path I need to add additional dot level, but in root path I only need to add one.

Currently

2
0 515