InterSystems IRIS for Health™ is the world’s first and only data platform engineered specifically for the rapid development of healthcare applications to manage the world’s most critical data. It includes powerful out-of-the-box features: transaction processing and analytics, an extensible healthcare data model, FHIR-based solution development, support for healthcare interoperability standards, and more. All enabling developers to realize value and build breakthrough applications, fast. Learn more.
VSCode is the most used IDE in the world. It is strategic have more extensions for VSCode for InterSystems technologies to keep increasing the developer community.
My new app IRIS VSCode Global Editor is an excellent sample to learn how to create extensions to IRIS. You can check it on https://openexchange.intersystems.com/package/IRIS-Global-VSCode-Editor.
To be ready to create extensions for VSCode
From https://code.visualstudio.com/api/get-started/your-first-extension you have all steps to get ready, but I will detail here to you.
Very similar question posed here: https://community.intersystems.com/node/467496, but I am missing a piece of this:
How do I correctly call a EnsLib.HL7.MsgRouter.RoutingEngine class from the BPL?I can successfully call the BPL from the EnsLib.HL7.Service.TCPService, and I have the BPL created to delay then call the rule. And I set the context and the result location..png)
This rule is really basic just sending the HL7 content to a EnsLib.HL7.Operation.TCPOperation
When implementing deferred response there was a problem initially with a few responses which meant we had blank jobs spawned somehow. How do you get rid. All the operation does is:
SET sc =..SendRequestAsync($piece(..ForwardComponentNames,",", i),pRequest,1)These all sent ok and tried to update status to 9 from 6 hoping it would clear the blank jobs but it didn't . The original issue has been resolved weeks ago.
Implements Idea DPI-I-456
What The Sample Does
This sample was cloned from iris-interoperability-template. I have reconfigured the interoperability Production with an Inbound HTTP Adapter which is used by a HTTP Business Service. The configuration details for the business service are specified in System Default Settings.
I configured Call Interval setting to call HTTPServer once every hour. You can change both the URL and frequency in the service's settings.

Originally the HTTP Service had two targets. The response body from each call was sent as a HTTP Generic Message to a BPL business process and also a file operation which saved data to a folder iris-http-calls.
Now the HTTP Service sends a HTTP Generic Message to a file operation. Then a file service sends the file to a BPL business process.
Prerequisites
Make sure you have git and Docker desktop installed.
Installation: ZPM
Open IRIS Namespace with Interoperability Enabled. Open Terminal and call: USER>zpm "install iris-http-calls"
Installation: Docker
Clone/git pull the repo into any local directory
git clone https://github.com/oliverwilms/iris-http-calls.git
Open the terminal in this directory and run:
docker-compose build
- Run the IRIS container with your project:
docker-compose up -d
How to Run the Sample
Open the production and start it if it is not already running. It makes HTTP calls to HTTPServer using URL.
How to alter the template
This repository is ready to code in VSCode with the ObjectScript plugin. Install VSCode, Docker and ObjectScript plugin and open the folder in VSCode.
Use the handy VSCode menu to access the production and business rule editor and run a terminal:

environment variables usage
this example shows how you can introduce env variables in your dev environment. Suppose you need to setup the production with some secret token to access a limited access API. Of course you don't want to expose the secret to GitHub. In this case Env variables mechanism could be helpful. First introduce .env file and setup .gitignore to filter .env from git.
Then add the secret token in .env in a form ENV_VARIABLE="TOKEN VALUE"
Next introduce make environment variables be imported to dockerfile. to make it work add the environment section into docker-compose.yml, .e.g:
environment:
- SAMPLE_TOKEN=${SAMPLE_TOKEN}
Then you'll be able to init the running container with the data from env variables e.g. with the following call, which uses the value from .env file as a setting of the production:
USER> d ##class(dc.Demo.Setup).Init($system.Util.GetEnviron("SAMPLE_TOKEN"))
package manager production parameters
Users of this module can use parameters to pass data to the module during installation and customize the File Path for the file operation and file service as well as modify URL. it can be useful when setup parameters are secret tokens to access particular API. You as a developer can provide such parameters with default tag in module.xml.
<Default Name="FilePath" Value="iris_http_calls" />
<Default Name="UrlModify" Value="/Patient?_id=egqBHVfQlt4Bw3XGXoxVxHg3" />
These default parameters enable users to call the installation of the package with the option of passing of parameters. E.g. the installation call could be run as:
zpm "install iris-http-calls -D FilePath=iris_http_calls -D UrlModify=/MedicationStatement?patient=egqBHVfQlt4Bw3XGXoxVxHg3"
USER>zpm "install iris-http-calls -D FilePath=iris_http_calls -D UrlModify=/MedicationStatement?patient=egqBHVfQlt4Bw3XGXoxVxHg3"
[USER|iris-http-calls] Reload START (/usr/irissys/mgr/.modules/USER/iris-http-calls/0.3.37/)
[USER|iris-http-calls] Reload SUCCESS
[iris-http-calls] Module object refreshed.
[USER|iris-http-calls] Validate START
[USER|iris-http-calls] Validate SUCCESS
[USER|iris-http-calls] Compile START
[USER|iris-http-calls] Compile SUCCESS
[USER|iris-http-calls] Activate START
[USER|iris-http-calls] Configure START
[USER|iris-http-calls] Configure SUCCESS
[USER|iris-http-calls] Activate SUCCESS
The default parameters are used to setup the production in the following call:
<Invoke Class="dc.Demo.Setup" Method="Init" >
<Arg>${FilePath}</Arg>
<Arg>${UrlModify}</Arg>
</Invoke>
Method Init in dc.Demo.Setup class configures File Service and File Operation using the FilePath parameter. The UrlModify parameter is used to modify the URL setting of the HTTP service.
The production makes calls to HTTPServer using modified URL based on CallInterval. The response body is sent in a StreamContainer to a FileOperation. A file service reads the file and passes a Stream Container to a BPL process.
Hello,
The title says it all. I’m building an IRIS image with docker-compose using a separate Dockerfile. Pretty straightforward procedure: I import a Installer script inside the container containing a Installer Manifest I defined. Within the manifest, I create a namespace with code and data databases in separate locations. My intention is to keep the code database inside the container, so whenever I build the container, the imported code is replaced. The data, however, should be persistent.
Hi Community,
In this article, I will introduce my application iris-HL7v2Gen .
IRIS-HL7v2Gen is a CSP application that facilitates the dynamic generation of HL7 test messages. This process is essential for testing, debugging, and integrating healthcare data systems. The application allows users to generate a wide variety of HL7 message types, validate their structure against HL7 specifications, explore the message hierarchy, and transmit messages over TCP/IP to production systems. These features are particularly useful in settings where compliance with HL7 standards is mandatory for interoperability between different healthcare organizations or systems.
Application Features
- Dynamic HL7 Message Generation: Instantly create HL7 messages for a range of message types, facilitating comprehensive testing.
- Message Structure Exploration: Visualize the structure of generated messages based on HL7 specifications.
- Value Set Visualization View predefined sets of allowable coded values for specific fields.
- Message Validation: Validate messages against HL7 standards to ensure compliance.
- TCP/IP Communication: Easily transmit messages to production using TCP/IP settings.
- Broad Message Type Support: Supports 184 different HL7 message types, ensuring versatility for various healthcare integration needs.
- ClassMethod: Generate a Test Message by Invoking a Class Method
- Version Support: Currently Supports HL7 Version 2.5
Hello Community,
Is there any option or log is available to identify who killed/terminated the running process?
Thanks!
My IRIS instance is connected to a Postgres database using SQL Gateway and linked tables. One of these tables is projected to the Patient class. I want to select a record from this table by ID and convert it to a FHIR resource using the %ExistsId and %OpenId methods. I noticed that if I call these two methods from the console, the record is always found. But, if I do the same from the FHIR Facade layer, the %OpenId method returns NULL. The error is intermittent - yesterday FHIR Facade didn't work at first, then it worked, this morning when I try to select a patient record from the FHIR facade layer using the %OpenId method it returns NULL again. I also checked the context of the current user using the $USERNAME function, in both cases the current user is _SYSTEM. How can this be explained?
in the InterSystems management portal, I am in the lookup table viewer (interoperability>lookup Tables, I would like to use import function to convert our existing table from other system to intersystems lookup table.
so I converted our existing one like below and saved it as xxx.xml file locally. when I try to import, it says it is not a valid export file.
my question is " what's the valid format for a file to be valid to use to import for lookup table?"
Hey everyone, I am implementing version control with git-source-control on our codebase and I ran into a pretty strange issue. I believe I have the set up (mostly) correct as the behavior with .cls files is exactly as expected. However, I noticed that git is not keeping track of any changes to CSP files.
Specifically, if a new CSP file is created and saved, I will get the following output:
exporting new version of /csp/testdb/wrc.csp to C:\InterSystems\IRIS\mgr\repo\TESTDB\csp\testdb\wrc.csp
Added /csp/testdb/wrc.csp to source control.
As part of fully decoupling code we send a snapshot from a business service (running a SQL statement).
sql service Processor File Out
This is picked up by a processer and puts it into a file .txt.
Issue is if you open it up via the SQL.snapshot message as this is 46,819 rows it'll take too long to respond to opening up the sql.snapshot in the message viewer when viewing the session if looking from the business service
Is there any way to not have this xml open up in full in the portal? I.e. have a see more?
The latest "Bringing Ideas to Reality" InterSystems competition saw me trawling through the ideas portal for UI problems to have a go at.
Hello Community,
Is there any way to permanently clear all the commands displayed in the line recall History. The :clear deletes all the commands in that particular process/recall buffer.
Thanks!
Like many others probably find themselves, we were stuck doing live data mapping in our Interface Engine that we really didn't want to do, but had no good alternative choice. We want to only keep mappings for as long as possibly needed and then purge expired rows based upon a TTL value. We actually had 4 use cases for it ourselves before we built this. Use cases:
By "unsuccessful installation" I mean IRIS Community Edition for Healthcare is not running and the server won't start after a fresh installation.
InterSystems is announcing an end of maintenance event for Zen Reports beginning in Intersystems IRIS and IRIS for Health 2025.1. This follows the deprecation notice made when InterSystems IRIS was introduced in 2018 and subsequent inclusion of InterSystems Reports in 2020 to provide replacement reporting functionality. An overview of the timeline is:
March 2018. InterSystems IRIS 2018.1: Announcement of Zen Reports deprecation, continued shipment to provide continuity for existing applications
I am developing locally on my IRIS instance using VSCode and client-side editing approach. How can I automatically export a single .cls file/a whole package to a remote TEST/PREPROD server using a script or command line and recompile the unit remotely? Are there any more simple and straightforward ways than CI/CD explained in the series of articles by Eduard?
We have error - ERROR #5821: Cannot instantiate query: 'SQLCODE = -146, %msg = Error: '' is an invalid DISPLAY Date value' not able to see what is causing:
CASE When P.PatReltoGuar->Name = 'SELF' then P.Lnm Else Substring(P.GuarNmIfNotPat, 1,Charindex(',',P.GuarNmIfNotPat)-1) End as DemoGuarLastName,
CASE When P.PatReltoGuar->Name = 'SELF' then P.Fnm Else Substring(P.GuarNmIfNotPat,Charindex(',',P.GuarNmIfNotPat)+1,LEN(P.GuarNmIfNotPat)) End AS DemoGUARFIRSTNAME,
CASE When P.PatReltoGuar->Name = 'SELF' then P.StreetAddrL1 Else P.GuarStreetAddrL1 End as DemoGuarAddresslineOne,
s connection = ##class(%Net.Remote.Java.JavaGateway).%New()
s sc = connection.%Connect("127.0.0.1",53274)
s classpath="C:\Users\ME9Y1PM\Downloads\wrapper_jar\wrapper-drools-1.0.0-20241127.071529-1.jar"
if (sc=$$$OK) {
s SCJavaDroolsObj.connection=connection
s sc = SCJavaDroolsObj.connection.%Import("com.lca.smc.drools.DroolsRules")
s SCJavaDroolsObj.drools = ##class(com.lca.smc.drools.DroolsRules).%New()
d SCJavaDroolsObj.drools.applyRules(patientjson)
Iris for Health is sending back ACKs back to the vendor for incoming X12 messages but, they are not making it there. Instead, the vendor is getting Reset packets and it seems they are coming out from Iris for Health.
Questions:
- Does Iris indeed generates Reset Packets?
- What causes Reset Packets to be triggered?
- What settings does InterSystems recommend to not send Reset packets?
- Are settings needed in the BS to prevent Reset Packets?
First time trying to use Foreign Tables/Servers instead of Linked Tables...
Within the SQL Editor inside of the Managment Portal, or connecting through DBeaver JDBC how we can see what Foreign Servers have been defined? Is there a way to query and verify structure of the Foreign Server connection to know that we are building the correct Foreign Tables?
I attempted to create my first Foreign table but it failed when I tried to query the tables because it said the table could not be found. But when I sign into the Database via SQL Management Studio, I can see the table.
Experience & feedback from online course "Hands-On with InterSystems API Manager for Developers"
With my basic knowledge of Docker container and REST API, I would like to have my first try on using InterSystems API manager to take control of APIs and microservices. I have completed this online course using my local IRIS instance as host (Windows OS) and IAM running on a Linux VM (guest).
Firstly, I will introduce InterSystems API Manager (IAM), then explain the steps for setting up my local environment and lastly walk through the course chapters.
Introduction
Dear All,
I have been sent an HL7 message as a file with the MSH segment as follows....
MSH|^~\&|SendingApp|pms3medd|HealthLink|cribrumt|20241121050000|PKI|ORU^R01|01_ASCIItest_2|P|2.3.1||||||UNICODE
I try picking up the file with a "EnsLib.HL7.Service.FileService" business service using a EnsLib.File.InboundAdapter adaptor. The Character set is set to "Native" and the Default Char Encoding to latin 1.
I am seeing the following error:
Hi there,
Hi all,
I'm performing a migration of some services from one instance to another, and I noticed that the technique defined within the InterSystems Server Migration Guide does not include OAuth client configurations. The recommended technique is to use the ##class(Security.System).ExportAll() and ##class(Security.System).ImportAll() methods.
Is there a way to migrate OAuth client configurations, or do those have to be re-created manually?
InterSystems FAQ rubric
It can be obtained with a List query of the %SYS.Namespace class.
1. Create a routine like this:
getnsp
set statement=##class(%SQL.Statement).%New()
set status=statement.%PrepareClassQuery("%SYS.Namespace","List")
set resultset=statement.%Execute()
while resultset.%Next() {
write resultset.%Get("Nsp"),!
}
quit2. Run it in your terminal
%SYS
DOCBOOK
SAMPLES
USER
The method of executing class queries introduced in this article can be applied in a variety of cases.
I want to integrate IRIS with Keycloak OAuth2 provider to use delegated authentication everywhere and to secure everything - sys*/Portal applications, REST services, FHIR server and so on. If an unathenticated user tries to access any IRIS URL - he or she should be redirected to Keycloak. After the user has successfully authenticated, i would like to access his requistes (username, email, roles, scopes) extracted from the JWT token, programmatically. What should be done to achieve that? I found this repo but it seems a bit tricky to implement a custom ZAUTHENTICATE function which has an access to HTTP context and manages HTTP redirections according to OAuth2 flow.
.png)