Article Patrick Jamieson · Apr 15, 2025 6m read

I know that people who are completely new to VS Code, Git, Docker, FHIR, and other tools can sometimes struggle with setting up the environment. So I decided to write an article that walks through the entire setup process step by step to make it easier to get started.

I’d really appreciate it if you could leave a comment at the end - let me know if the instructions were clear, if anything was missing, or if there’s anything else you'd find helpful.

The setup includes:

✅ VS Code – Code editor
✅ Git – Version control system
✅ Docker – Runs an instance of IRIS for Health Community
✅ VS Code REST Client Extension – For running FHIR API queries
✅ Python – For writing FHIR-based scripts
✅ Jupyter Notebooks – For AI and FHIR assignments

Before you begin: Ensure you have administrator privileges on your system.

In addition to reading the guide, you can also follow the steps in the videos:

For Windows

2
2 428
Article Ariel Glikman · Apr 15, 2025 4m read

If you look at the values.yaml of the IKO's Helm chart you'll find:

useIrisFsGroup:false

Let's break down what it is and in what situations you may want to set it to true.

FsGroup refers to the file system group.

By default, Kubernetes volumes are owned by root, but we need IRIS to own its files (IRIS in containers is installed under irisowner user). To get around this we employ one of two methods:

1) initContainers

The initContainers run before app containers (like IRIS) in a pod.They generally set up the environment for the application and then run to completion/terminate.

0
0 214
Discussion Alex Woodhead · Apr 12, 2025

There is a list of numbers from 1 to 190.

AllList="1,2,3,4,5,6,7,8,9,.....,187,188,189,190"

There is a collection of sets of these values:

List(1)="3,5,6,7,9"
List(2)="1,2,6,9"
List(3)="5,8,9"
List(4)="2,4,6,8"
List(5)="4,7,9"

What is an elegant approach in Object Script to pick the least number of list items:

  • List(1)
  • List(5)
  • List(n)

That together would cover as many numbers as possible from the AllList.

Interested in best coverage over efficiency.

7
0 229
Question Ashok Kumar T · Apr 15, 2025

Hello Team,

I got xDBC protocol is not compatible while executing python script. How to fix this error

C:\Users\ak\Desktop\lpyth\iris>C:/Users/ak/AppData/Local/Programs/Python/Python312/python.exe c:/Users/ak/Desktop/lpyth/iris/irisconn.py
An error occurred: connection failed: IRIS xDBC protocol is not compatible

py -m pip list
Package            Version
------------------ ---------
intersystems-iris  3.9.2

import intersystems_iris as iris
args = {'hostname':'127.0.0.1', 'port':1972,'namespace':'LEARNING', 'username':'_SYSTEM', 'password':'SYS'}
try:
    conn = iris.connect(**args)
    irispy =
2
0 128
Discussion Benny Verhamme · Apr 11, 2025

Hello 

We are pretty new to Ensemble and we are considering on using a default setup for our production. Let me explain the situation. We have one sender that sends HL7 ADT messages to our system. We have 60+ other systems that need to recieve ADT messages. We where thinking on a few ways on how to do the setup. 

Setup1:

We create one big ADTRouter that contains a first mapping.The result is send to another big ADTRouter that contains all the filters/expressions and mappings for the recieving systems.

4
0 257
Question Nimisha Joseph · Apr 14, 2025

Hi everyone,

I'm working on a DTL that transforms an HL7 message (EnsLib.HL7.Message) to an XML document (EnsLib.EDI.XML.Document).

The target XML is based on a custom schema and has an element like:

<xs:element name="deceasedDateTime" type="xs:dateTime" nillable="true"/>

What I need is for the output to show:

<deceasedDateTime xsi:nil="true"/> when the source HL7 value is empty, for eg: 

<portalPatientUpdate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <deceasedDateTime xsi:nil="true" />
</portalPatientUpdate>

My questions:

  1. How can I correctly assign xsi:nil="true" in the DTL
0
0 117
Question Michael Davidovich · Apr 10, 2025

Hello,

Our software commonly returns a full result set to the client and we use the DataTables plugin to display table data.  This has worked well, but at datasets grow larger, we are trying to move some of these requests server-side so the server handles the bulk of the work rather than the client.  This has had me scratching my head in so many ways.  

I'm hoping I can get a mix of general best practice advice but also maybe some IRIS specific ideas.

Some background

- I would admit our tables aren't best optimized for SQL in the sense that we don't utilize parent-child relationship in tables

6
0 225
Question Steven Chesser · Apr 13, 2025

Using Cache 2017.2 sever as my target.

I have a x64 Ubuntu client setup going.  This is NOT server. Just client. 

I have the Linux Ubuntu x64 ODBC driver gzip file. 

ODBC-2018.1.5.659.0-lnxubuntux64.tar.gz is all I could find.  Someone posted it in another post.

I can connect to a test sever that does NOT use SSL.  That works pretty easily.

But I have A server with SSL enabled. With Windows Cache ODBC drivers I can use SSL just fine.

This is what my SSLDefs.ini file on the Windows machines look like and it works just fine.

YES.I know.Not super secure because of the settings.

1
0 136
Discussion Anna Golitsyna · Apr 10, 2025

I ask ChatGPT periodically to produce ObjectScript or plain MUMPS code for string manipulation, or for implementing known algorithms etc. Occasionally, it does make mistakes or uses non-existing class members but generally not that bad. Is there any tutorial on the subject of using AI for coding, ideally specifically for ObjectScript/MUMPS? Any AI productivity advice, or tricks you are using, or another AI flavor?

Thanks in advance,
Anna

4
0 262
Question Ashok Kumar T · Apr 11, 2025

Hello Community,

The subroutine ^routine is not executed while the queue is being processed in WorkMgr. However, it works when defined as a function. Is it mandatory to define subroutine^routine as a function for it to execute properly?

testwqm.mac
 set wqm = ##class(%SYSTEM.WorkMgr).%New()
 set sc=wqm.Queue("subr1^testwqm")  ; not executing the subr1 set sc=wqm.Queue("subr2^testwqm") ; executing the subr2 properlyset sc=wqm.Queue("subr1") ; executing the subr1 properlyquit
subr1
 set^test("subr1",$NOW())=$LB($USERNAME,$ROLES)
 quit;
subr2()
 set^test("subr2",$NOW())=$LB($US
3
0 137
Question Gary M Lusso · Mar 27, 2025

My attempts to add CR/LF between segments

// Add CR/LF after "Total Cost:" if multiple "Item Number:" exist
            //$$$LOGINFO(tItemNumberCount_" "_tTotalCostSegment_"----cr/lf")
            If (tItemNumberCount > 1) && (tTotalCostSegment > 0) {
                Set tOBXSegment = pOutput.GetSegmentAt("ORCgrp(1).OBRuniongrp.OBXgrp("_tTotalCostSegment_").OBX", .tStatus)
                //$$$LOGINFO(tOBXSegment_"----"_"tOBXSegment from cr/lf")
                Set tOBXText = tOBXSegment.GetValueAt(5) //_"||||||\X0D\\X0A\" // Append escaped CR/LF representation
                //Do

2
0 135
Question Julian Matthews · Apr 11, 2025

Hey everyone.

I'm currently looking at a process where we're utilising the Class Ens.StreamContainer, and was looking to do some deletions outside of any purge routines.

Having been burned before, I wanted to make sure that deleting the container also deletes the contents within.

From looking in the class, the  %OnDelete ClassMethod appears to be removing an index from a search table and nothing more.

Am I looking in the right place, or is there a extended class for Ens.StreamContainer that does in fact delete the %Stream.Object
contained within the Ens.StreamContainer?

2
0 151
Question john.smith4237 · Mar 12, 2025

Hi Guys,

We currently use wkhtmltopdf to convert our html based Zen page reports to PDF using in windows, but because we are now moving to IRIS running in a container we can use that anymore and I've been told that IRIS does have some kind of tool kit or utility that can do similar job and I'm not talking about  GenerateReport() methond in zen reports?

Thanks 

4
0 201
Question Gary M Lusso · Mar 5, 2025

Sample with multiple Items;

MSH|^~\&|GMRC IF CONSULT|XXX^XXXXX^DNS|GMRC IF CONSULT|YYY^^DNS|20250123175341+0000|CRNR|ORM^O01^ORM_O01|Q5808332894T6790522104|T|2.3|||State|State|USA

PID|1||1013570973V041977^^^ICN^ID~1110106796^^^EDIPI^EDIPI||PROSTEST^EHR||19760902|M||||||||||129256619|678235672

ORC|NW|15207778763^XXX^GMRCIFR|||||^^^20250123175300+0000^^R||20250123175331+0000|XXX8051652^PCP1^Physician||XXX8051652^PCP1^Physician|||20250123175341+0000||YYY

OBR|1|15207778763^XXX^GMRCIFR||YYY^PROSTHETICS IFC^757Office1235||20250123175300+0000||||||||||XXX8051652^PCP1^Physician|||Implant Usage (PSAS)||||

15
0 280
Question Jerry Petrole · Apr 9, 2025

Hello, 

One of our clients has a 'Notes' class with over 3 million records.   We have a report that pulls data from this table that was taking about an hour to run.   Our test environment (which has a copy of the production database) runs the same report query in 1 second.    

We attempted to purge and rebuild indices which made an improvement (down to 15 minutes) but still not great.

Next we ran tune table through the Mgmt Portal and it timed out.   I then ran tune table via the Terminal and it finished in a couple minutes.

3
0 125
Question Webby Jett · Apr 10, 2025

Hi everyone,


I'm currently testing out IRIS 2024.3 for a new project, and it's been running smooth for the most part. However, I noticed that when running some heavier analytical queries, the memory usage spikes more than I expected, even when result sets aren’t that large.

I’ve gone through the basics (buffer sizes, query plans, etc.), but I’m wondering if there are any new tweaks or recommended settings in 2024.3 specifically for managing memory better during these peak loads.

Anyone else run into something similar or have tips to fine-tune this?

Thanks for any help!
 

 

.

These
1
0 138
Question Gary M Lusso · Apr 9, 2025

I need to add an extra blank OBX segment after a segment containing text, Total Cost:

I get the OBX segment but it is in incorrect location.

It should be after the line containing Total Cost:

It needs to contain:

OBX|1|TX|2000.02^REASON FOR REQUEST^AS4|

code:

    //Do pOutput.SetValueAt(tOBXText_"~~","ORCgrp(1).OBRuniongrp.OBXgrp("_i_").OBX:5","set") //
         If (tOBXText[ "Total Cost:") {
             Set tSegmentOBX = ##class(EnsLib.HL7.Segment).%New()
             Set tSegmentOBX.SegType = "2.3:OBX"
             Set tSC = tSegmentOBX.SetValueAt("OBX", 0, "set")
             Set tSC = pOutput.Inse

2
0 167
Discussion Alex Woodhead · Apr 10, 2025

Background

Embeddings is a new IRIS feature empowering the latest capability in AI semantic search.
This presents as a new kind of column on a table that holds vector data.
The embedding column supports search for another existing column of the same table.
As records are added or updated to the table, the supported column is passed through an AI model and the semantic signature is returned.
This signature information is stored as the vector for future search comparison.
Subsequently when search runs, a comparison of the stored signatures occurs without any further AI model processing overhead.

Embedd

0
2 139
Question Scott Roth · Apr 9, 2025

I have a segment within a Group (grp) that needs to be validated that it is populated within the message. 

When you use a Foreach within a Business Rule how should you account for the counter in the group?

For example, Epic sends their MFN message in the following format.

MSH~MFI~[~{~MFE~STF~PRA~[~ZPR~]~[~ZLK~]~[~CER~]~[~ZMG~]~[~ZTF~]~[~ZGP~]~[~ZDD~]~}~]

so, the ZLK segment might not exist until the last MFEgrp that is in the message. I need to verify if there is an Employee ID associated with the Provider in the HL7 message before I run it through the translation.

1
0 123
Question Fahima Ansari · Mar 21, 2025

I am receiving the garbled text due to incorrect encoding or decoding. I tried to use the $zconvert function to convert it into the normal text but failed to do that. Can anybody suggest what I have to use to convert that into normal text?

Example: Garbled text that I am getting is "canââ¬â¢t , theyââ¬â¢re".

6
0 303