#InterSystems IRIS

19 Followers · 5.7K Posts

InterSystems IRIS is a Complete Data Platform
InterSystems IRIS gives you everything you need to capture, share, understand, and act upon your organization’s most valuable asset – your data.
As a complete platform, InterSystems IRIS eliminates the need to integrate multiple development technologies. Applications require less code, fewer system resources, and less maintenance.

New
Discussion Evgeny Shvarov · 4 min ago

Hi folks!

Suppose a new version of your amazing software solution built on IRIS needs some persistence change: some data needs to be converted, some classes get new properties or even renamed, and some data should be prepopulated for newly introduced persistent classes to keep the whole application data consistent.

What are your approaches? 

SQL-based scripts? ObjectScript, or Python? for both directions of migration, up and down? 

Do you autogenerate it with Claude/Codex? What about data-consistency tests?

COuld you please share your thoughts? or libraries?

1
0 3
Article Kate Lau · Oct 13, 2025 5m read

Hi all,

It's me again 😁. In the pervious article Writing a REST api service for exporting the generated FHIR bundle in JSON, we actually generated a resource DocumentReference, with the content data encoded in Base64

Question!! Is it possible to write a REST service for decoding it? Because I am very curious what is the message data talking about🤔🤔🤔

OK, Let's start!

1. Create a new utility class datagen.utli.decodefhirjson.cls for decoding the data inside the DocumentReference
 

ClassExtends%RegisteredObject

2. Write a Python function decodebase64docref to 
a. loop through the FHIR bundle
b.

3
2 304
Article Robert Cemper · Aug 26, 2017 3m read

This is a  rather personal view of the history before Caché.
It is in no sense meant to compete with the excellent books from Mike Kadow discussed in an earlier article.
We have different histories and so this is meant to create a different perspective of the past.

The whole story started in 1966 at MGH (Mass.General Hospital) on a PDP-7 Ser.#103
with 8K of memory (18-bit words) [today = 18K byte ]  as a spare system.

"Serial Number 103 - was located in the basement of the now demolished Thayer Building,
currently [2014] the site of the Cox Cancer Center at MGH.

16
2 2330
New
Article Geet Kalra · Jun 2 3m read

In the previous article, we used pyprod to create production components while relying on the UI for production configuration. That same production can now be defined entirely in Python:

from intersystems_pyprod import Production, ServiceItem, ProcessItem, OperationItem

iris_package_name = "HelloWorld"

class MyProduction(Production):
    services = [
        ServiceItem(
            "MyServiceName",
            "HelloWorld.MyService",
            host_settings={"target": "MyProcessName"},
        )
    ]
    processes = [
        ProcessItem(
            "MyProcessName",
            "HelloWorld.MyProcess",
            host_settings={"target": "MyOperationName"},
        )
    ]
    operations = [
        OperationItem("MyOperationName", "HelloWorld.MyOperation")
    ]
6
0 126
Article Bruno Santos · Mar 19 8m read

The problem

How many times have we migrated an IRIS Instance to another machine, maybe even another version, and after a few days realized we forgot that one SSL Configuration critical for a Business Operations to work? Or maybe a credential, or a lonely class in a package by itself?

The solution

The simple solution is to make a checklist¹. A checklist of the entities we have to move. But simple checklists on Word documents are often forgotten, or just ignored.

4
3 205
Article Kate Lau · Oct 9, 2025 5m read

Hi,

It's me again😁, recently I am working on generating some fake patient data for testing purpose with the help of Chat-GPT by using Python. And, at the same time I would like to share my learning curve.😑

1st of all for building a custom REST api service is easy by extending the %CSP.REST

Creating a REST Service Manually

Let's Start !😂

1. Create a class datagen.restservice which extends  %CSP.REST

ClassExtends%CSP.REST

2. Add a function genpatientcsv() to generate the patient data, and package it into csv string

ExtendsAs

you may test the function in the terminal by typing

3. Add a function 

4
1 250
New
Question Hamras T · Jun 1

Hi all,

I'm working on a DICOM router in InterSystems IRIS, based on the workshop-iris-dicom-interop (https://github.com/intersystems-ib/workshop-iris-dicom-interop) example on GitHub. I'm using EnsLib.DICOM.Process to route incoming images to different PACS destinations, where the target system is decided at runtime via a database lookup.

I've run into two issues I'd love some guidance on:

1. Dynamically changing the destination without disrupting transactions

Right now, if I want to send to a new PACS target, I'd need to add a new Business Operation and call

1
0 33
New
Article Guillaume Rongier · Jun 2 9m read

 

In the previous IoP article, I showed how IoP can expose Python messages to DTL by generating JSON schemas. That is useful when the message is primarily a Python object and we want the IRIS tooling to understand its structure.

This time, the direction is a little different.

Starting with IoP 3.7.1, a PersistentMessage can now be a native IRIS message body class. The Python class is still the source code you write, but the generated IRIS class extends Ens.MessageBody

0
1 21
New
InterSystems Official Dominic Chui · Jun 1

IPM version 0.10.7 was released on May 29th, 2026. As usual, you can check it out on the GitHub page or through the Community Registry.


Highlighted Features

Utility Scripts iriscli and ipm

IPM is now bundled with two convenience scripts that are runnable from a standard terminal. iriscli launches an interactive IRIS terminal and runs IPM commands directly. These are automatically installed to both ~/.local/bin/ and , so they work inside and outside of containers (Unix/Linux only).

Examples:

0
0 35
New
Question Aziz Cotrim · May 29

I have several Business Operations that share similar behavior, like building HTTP headers or parsing a specific response format. In C# I would extract this into a service class or a base class. What is the recommended way to do this in IRIS? Should I use a utility class, a common superclass, or is there another pattern the community prefers?

2
0 57
New
Question Aziz Cotrim · May 29

I have a Business Process that needs to call an external API that may take several seconds to respond. I'm worried that keeping the BP blocked waiting for the response could affect the overall Production throughput. Is there a recommended pattern for handling async calls inside a BPL or custom BP class to avoid this kind of bottleneck?

3
0 55
New
Question Paul Norg · May 29

I'm approaching the need to send notifications through a Microsoft Exchange or Gmail servers. however my last foray into this, I was blocked due to an issue inside my SSL certificate is what I thought after the attempt.

So my attention will be on trying to match the cryptography in the SSL certificate I produce compared to the mail server I'm trying to use.

Has anyone else had an issue with this approach? My other option is Amazon SNS potentially. I do have a functional MS Teams channel for alerts, and can make different notification channels as well.

Any help or insights are appreciated. 

3
0 59
Article David Hockenbroch · May 7 8m read

In our previous article, we explored the basics of unit testing in IRIS and the ways to apply it to a REST API. We even figured out how to test logic before finalizing network configurations and authentication, allowing us to focus solely on testing the API contents. Today, we will build upon that foundation and elevate our unit testing strategy by using another tool: %Populate .

At first glance, the %Populate class appears to be very simple. You can create a class that extends both %Persistent and %Populate and inherit a Populate method designed to generate randomized records.

1
2 160
Article Pietro Di Leo · Oct 9, 2025 6m read

Introduction

In my previous article, I introduced the FHIR Data Explorer, a proof-of-concept application that connects InterSystems IRIS, Python, and Ollama to enable semantic search and visualization over healthcare data in FHIR format, a project currently participating in the InterSystems External Language Contest.

In this follow-up, we’ll see how I integrated Ollama for generating patient history summaries directly from structured FHIR data stored in IRIS, using lightweight local language models (LLMs) such as Llama 3.2:1B or Gemma 2:2B.

The goal was to build a completely local AI pipeline that can extract, format, and narrate patient histories while keeping data private and under full control.

All patient data used in this demo comes from FHIR bundles, which were parsed and loaded into IRIS via the IRIStool module. This approach makes it straightforward to query, transform, and vectorize healthcare data using familiar pandas operations in Python. If you’re curious about how I built this integration, check out my previous article Building a FHIR Vector Repository with InterSystems IRIS and Python through the IRIStool module.

Both IRIStool and FHIR Data Explorer are available on the InterSystems Open Exchange — and part of my contest submissions. If you find them useful, please consider voting for them!

2
6 257
Article José Pereira · May 19 13m read

Abstract

Common Table Expressions (CTEs) provide a structured framework for defining reusable intermediate result sets within SQL statements. InterSystems IRIS implements CTEs via the WITH clause, enabling clearer query composition and modular analytical processing while remaining fully integrated with the IRIS cost-based optimizer.

This article explores the semantics of CTEs in InterSystems IRIS, explains their interaction with query optimization, discusses appropriate deployment scenarios, and presents executable examples illustrating practical patterns for production environments.


2
3 281
New
Question Pietro Di Leo · May 28

Hello everyone, I am working with the VSCode extension by connecting to clients' IRIS servers remotely with my personal user (pdileo). However, one of the development environments was recently updated and my user was created for the second time with a different password.

I noticed that the VSCode extension no longer allows me to log in because the password has been changed, without asking me for a new one, only showing the 401 AxiosError.

2
0 54
New
Article Mihoko Iijima · May 28 31m read

Vector search is a retrieval method that converts text, images, audio, and other data into numeric vectors using an AI model, and then searches for items that are semantically close. It enables “semantic similarity search” from free text, which is difficult with keyword search alone.

However, in real use, I encountered cases where results that are “close in meaning” but logically the opposite appeared near the top of the search results.

This is a serious issue in situations where affirmation vs. negation matters. If the system returns the wrong answer, the impact can be significant, so we cannot ignore this problem.

This article does not propose a new algorithm. I wrote it to share a practical way I found useful when semantic search fails due to negation.

 

0
2 73
New
Article Jonathan Card · May 28 5m read

There seems to be a generous use of ClassMethods in ObjectScript code generally. I hope my own experiences aren't representative, but I bet they are. Forgive me for giving away the ending of this article, but in short: don't use them. Unless you can make a pretty convincing case that you have to, just never use them.1

What is a ClassMethod? In an ObjectScript class, you can define methods in two different ways: in a Method, you must instantiate an instance of the class to call the method, and in a ClassMethod, you can call the method without instantiating the class. Of course, in a ClassMethod, you don't have access to any properties of the object (because there's no object), but you can access globals (they are global, after all) and Parameters (which are class constants).

3
2 157
New
Article Thomas Dyar · May 27 15m read

TL;DR: This article demonstrates how to run GraphRAG-style hybrid retrieval—combining vector similarity, graph traversal, and full-text search—entirely within InterSystems IRIS using the iris-vector-graph package. We use a fraud detection scenario to show how graph patterns reveal what vector search alone would miss.


Why Fraud Detection Needs Graphs

Every year, businesses and consumers lose billions to fraud. In 2024 alone, consumers reported $12.5 billion lost—a 25% increase year over year. What makes modern fraud so difficult to detect is that fraudsters rarely work alone.

0
0 53
New
Article Gabriel Ing · May 27 8m read

Welcome back to a series of introductory articles on AI Hub, the new product feature currently in an early access program! (links: EAP Site for download, documentation)

In the last article, we covered how to create agents and agent tools directly in ObjectScript using the new %AI classes. However, sometimes, instead of creating a new agent, you just want to add some custom tools to an existing agent so you can ask your local claude code, codex, copilot or other agent of choice to query your data directly. This is where MCP Servers might come in.

2
4 93
New
Question Ashok Kumar Thangavel · May 28

Hi Community,

Interoperability metrics were enabled for a production using ##class(Ens.Util.Statistics).EnableSAMForNamespace(). However, after running DisableSAMForNamespace() and DisableStatsForProduction(), the metrics continue to appear in the endpoint output.

Is there a way to completely stop these interoperability metrics from displaying in the API metrics stream? Is there an additional step or cache clear required?

0
1 22
New
Question Dmitrij Vladimirov · May 28

Hi community.

How do i count distinct values over cumulative date dimension?

I got calculated measure function defined in cube: COUNT([dimension].[H1].[dimension].Members, EXCLUDEEMPTY)

[dimension].[H1].[dimension] = non-unique numerical fields of ids

Then i got AGGREGATION function defined in Analyzer (that stored in ^DeepSee.CalcMbrs):

AGGREGATE(%TIMERANGE(TimeDimension.hierarchy.level,TimeDimension.hierarchy.level.CurrentMember),Measures.Measure)

This return an error:

ERROR #5001: No member provider object found for member function: MEMBER(5)

All syntax is correct. I checked it twice.

1
0 29
New
Announcement Liubov Zelenskaia · May 27

Join our next in-person Developer Meetup in Boston to explore AI for Developers and Startups.

This event is hosted at CIC Venture Cafe.

Talk 1:"Developing Full-Stack AI Applications from the Ground Up" by Robert Costa, Senior Systems Developer, InterSystems

Talk 2:"Blood, Bytes, and Babies: Building an AI-Powered Autism Diagnostic Test from Scratch" by Hugh Cam, Scientist | Entrepreneur, BlueSavant AI

Food, beverages, and networking opportunities will be provided as always.

>> Register here

0
0 24
Question Don Martin · Sep 5, 2025

We have a task that runs objectscript code to load data into a linked external table.  After upgrading from 2024.1 to 2025.1, the load is throwing an error, with error code -400, and no error message.  The data DOES get loaded into the external table in its entirety, so with no meaningful error message, its hard to determine what the issue is.  The result is the same with and without the USING clause, so don't let that confuse you.

2
0 143